使用Gauss-Legendre积分进行双重积分

时间:2016-08-07 13:38:26

标签: matlab numerical-methods numerical-integration

我想用Gauss-Legendre积分来评估双积分。我想出了以下代码

m=5000;

%generate weights and abscissas
[wx,xx]=leg(-1,1,m);
[wy,xy]=leg(-1,1,m);

%define function
psi=@(x,y) hypergeom(-1./4,3./2,x.^2.*y.^6);


%integrate with respect to x
intx=zeros(1,m);
for num=1:m
    intx(num)=sum(wx.*psi(xx,yx(num)));
end

sum(wy.*intx)

我使用符号腿(x1,x2,m)来生成权重和横坐标。

还有其他方法可以让这段代码运行得更快吗?

1 个答案:

答案 0 :(得分:1)

假设w是一个行向量,你可以使用meshgrid来复制y,x然后再进行矩阵乘法:

m = 5000;
[w,x]=leg(-1,1,m);
[X, Y] = meshgrid(x);
psi=@(x,y) hypergeom(-1./4,3./2,x.^2.*y.^6);
result = w * psi(X,Y) * w';