使用梯形法则的MATLAB双积分

时间:2016-02-20 21:01:50

标签: matlab integration

我必须使用梯形复合规则进行整合:

%f.m
function [ab]=f(x,y)
ab = sqrt((exp(sin(x.*pi - y.*pi)))+(exp(cos(x.*y.*pi))))

和我的梯形函数:

%trap.m
function [T] = trap(a,b,N)
h=(b-a)./N;
x=a+[0:N]*h;
y=f(x);
T=(y(1)+y(N+1)+2*sum(y(2:N)))*h/2

我很困惑我将如何进行这种双重整合,但我认为Iit会有类似的东西:

%main.m
clear;
Tr = zeros(6);
a=0;
b=3 ; 
N = 2.^([1:10]);

for i=1:2:10,
    [Tr(i)]=trap(a, b, N(i), %first integration); %second integration...
end

我的陷阱功能会进行第一次集成吗?

1 个答案:

答案 0 :(得分:0)

在一维梯形法则中,函数值乘以h / 2,h,h,...,h,h / 2,其中h是步长。这些是此集成规则的权重。当在两个维度中应用集成规则时,权重将乘以。一般来说,你会在两个维度上有不同的步长,比如h1和h2,权重将是h1 * h2乘以下面的数字:

1/4 1/2 1/2 1/2 1/4
1/2  1   1   1  1/2
1/2  1   1   1  1/2
1/4 1/2 1/2 1/2 1/4

实现这一点的一种快速方法是添加所有值,减去每侧的1/2值(这会减去两次角),然后添加1/4的角值。不需要for循环:您可以使用meshgrid设置网格以进行评估,并使用sum进行双重求和。例如:

f = @(x,y) sqrt((exp(sin(x.*pi - y.*pi)))+(exp(cos(x.*y.*pi))));
a1 = 0; b1 = 3; N1 = 20;
h1 = (b1-a1)/N1;
a2 = -1; b2 = 4; N2 = 30;
h2 = (b2-a2)/N2;
[X,Y] = meshgrid(a1:h1:b1, a2:h2:b2);
Z = f(X,Y); 
T = h1*h2*(sum(Z(:)) - 0.5*(sum(Z(1,:)+Z(end,:)) + sum(Z(:,1)+Z(:,end))) + 0.25*(Z(1,1)+Z(1,end)+Z(end,1)+Z(end,end)))

最后一行恰好对应于我上面所说的:添加所有值,减去1/2的边,增加1/4的角。