如何正确使用积分限制(Matlab)

时间:2015-04-21 11:41:27

标签: matlab integration

我制作了一个脚本,用于计算限制的给定积分:

0 <= x <= 2 and 0 <= y <= 1 

但现在我想将限制更改为:

0 <= x <= 2 and 0 <= y <= sin((pi*x)/2) 

功能:

function f = inte(x,y)

dz = 10;

f = exp(-dz*((x-1.25).^2+y.^2)).*cos(y.*(x-1.25));

end

这是我早期限制的脚本:

L = 100; M = L/2;

hx = (2)/L; hy = (1)/M; 

x=[0:L]*hx;
y=[0:M]*hy;

Fx=[];

for i = 1:L+1

    Fy=[];

    for j = 1:M+1

        f = inte(x(i),y(j));
        Fy = [Fy f];

    end

    ycor = hy*(sum(Fy) - Fy(1)/2 - Fy(end)/2);
    Fx = [Fx ycor];

end

ans = hx*(sum(Fx) - Fx(1)/2 - Fx(end)/2);

disp (ans)

当我尝试更改代码时,似乎无法得到正确的答案。正确的答案应该是0.1560949 ......

L是x方向上的步数,y方向上是M. hx和hy是步长。 这真让我烦恼。不,我只能使用命令integral2或traps作为参考。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在您目前的代码中,行

hy = (1)/M; 
y=[0:M]*hy;

参考y变量。当y的限制依赖于x时,这些行不能保持在x的循环之外:它们应该被移入并使用值x(i)。像这样:

for i = 1:L+1   % as in your code

   hy = (sin(pi*x(i)/2))/M;     
   y = [0:M]*hy;

   Fy=[];  % this and the rest as in your code 

我可以根据需要输出0.1561