【问题标题】:Double integral using integral2, too many input arguments使用integral2的双积分,输入参数太多
【发布时间】:2017-05-06 21:28:15
【问题描述】:

这是代码:

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.

【问题讨论】:

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

标签: matlab


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-02-20
    • 2013-08-26
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多