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

问题描述 投票:0回答:1

我制作了一个脚本来计算给定的积分与限制:

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 方向的步数,M 是 y 方向的步数。 hx 和 hy 是步长。 这真的很困扰我。不,我只能使用命令integral2或trap作为参考。

提前致谢!

matlab numerical-integration
1个回答
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
,如你所愿。

© www.soinside.com 2019 - 2024. All rights reserved.