使用integral2进行双积分,输入参数太多

时间:2017-05-05 13:25:49

标签: 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.

1 个答案:

答案 0 :(得分:0)

您不希望计算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,这确实是两种方法的结果。