Matlab 二重积分使用积分2,输入参数过多

Matlab 二重积分使用积分2,输入参数过多,matlab,Matlab,代码如下: for Y=0:0.01:N, eta(round(1+Y*100))=((i*alpha*lambda)^(1/3))*Y+eta0; V2(round(1+Y*100))=((i*alpha*lambda)^(-2/3))*q*integral2(@(n) airy(n),eta0,eta,eta0,eta); end 发生什么事了 Error using profiles>@(n)airy(n) Too many input arguments. 您不

代码如下:

for Y=0:0.01:N,
    eta(round(1+Y*100))=((i*alpha*lambda)^(1/3))*Y+eta0;
    V2(round(1+Y*100))=((i*alpha*lambda)^(-2/3))*q*integral2(@(n) airy(n),eta0,eta,eta0,eta);
end
发生什么事了

Error using profiles>@(n)airy(n)
Too many input arguments.

您不希望计算平面下的体积
z=f(x,y)
,这是
integral2
的目标。您要计算积分的积分:

integral(@(n) integral(@(x) airy(x), xMin, n), xMin, xMax, 'ArrayValued', true)
注意,我们需要为外部积分添加
'ArrayValued'=true
,因为内部积分不允许对其上限进行向量化计算

这可以使用
integral2
进行优化(快约10倍):

integral2(@(x, y) airy(y), xMin, xMax, xMin, @(x) x)
您可以这样解释:内部积分是通过积分
y
轴直到
y=x
来计算的,外部积分是通过积分
y
积分的结果来计算的

所提供方法的验证

可以使用以下测试功能验证该方法:

airy = @(n) n; % linear test function
xMin = 0;
xMax = 10;

第二个积分是:
n^3/6=166.6667
,这确实是两种方法的结果。

很有趣。我会说它有“太少的输入参数”问题是,我如何修改一个预定义的一个变量的MATLAB函数,以便通过积分2对其进行两次积分?你需要一个双变量函数。。。