使用梯形规则的 MATLAB 双积分

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

我必须用梯形复合法则来积分:

%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

我对如何进行双重积分感到困惑,但我想它会得到类似的东西:

%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

我的陷阱功能需要第一次集成?

matlab numerical-integration
1个回答
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 角。

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