【问题标题】:Errors when using the Integral2 function in MATLAB在 MATLAB 中使用 Integral2 函数时出错
【发布时间】:2016-04-01 11:36:04
【问题描述】:

据我所知,没有人问过这个问题。 我被要求计算函数的双积分,以及相同的双积分,但积分顺序交换(即:首先为 dydx 积分,然后为 dxdy)。这是我的代码:

    %Define function to be integrated
f = @(x,y) y^2*cos(x);

    %First case. Integration order: dydx
ymin = @(x) cos(x);
I = integral2(f,ymin,1,0,2*pi)

    %Second case. Integration order: dxdy
xmin = @(y) asin(y)+2*pi/2;
xmax = @(y) asin(y)-pi/2;
B = integral2(f,xmin,xmax,-1,1)

我得到的错误是:

使用integral2时出错(第71行)

XMIN 必须是浮点标量。

EngMathsA1Q1c 中的错误(第 5 行)

I = 积分2(f,ymin,1,0,2*pi)

我确信我的错误很简单,但我以前从未使用过 Integral2,我找不到答案。谢谢。

【问题讨论】:

    标签: matlab calculus numerical-integration


    【解决方案1】:

    根据integral2 documentation,变量限制作为第二对限制给出。所以你的第一个积分应该是

    %    Define function to be integrated
    f = @(x,y) y.^2.*cos(x);
    
    %    First case. Integration order: dydx
    ymin = @(x) cos(x);
    I = integral2(f,0,2*pi,ymin,1);
    

    常量限制集总是排在第一位,并且 Matlab 假设 f 的第一个参数与第一组限制相关联,而 f 的第二个参数与第二个限制相关联一组限制,可能是第一个参数的函数。


    我指出第二部分是因为如果您想切换积分顺序,您还需要相应地切换f 的输入顺序。考虑以下示例:

    fun = @(x,y) 1./( sqrt(2*x + y) .* (1 + 2*x + y).^2 )
    

    一个漂亮的小函数,它的参数不是对称的(即fun(x,y) ~= fun(y,x))。让我们将其整合到第一象限中的一个细长三角形上,其顶点位于 (0,0)、(2,0) 和 (0,1)。然后与dA == dy dx整合,我们就有了

    >> format('long');
    >> ymax = @(x) 1 - x/2;
    >> q = integral2(fun,0,2,0,ymax)
    q =
       0.220241017339352
    

    酷。现在让我们与dA == dx dy 集成:

    >> xmax = @(y) 2*(1-y);
    >> q = integral2(fun,0,1,0,xmax)
    q =
       0.241956050772765
    

    糟糕,这不等于第一次计算!这是因为fun 定义为x 作为第一个参数,y 作为第二个参数,但是之前对integral2 的调用暗示yfun 的第一个参数,并且它具有常量01 的限制。我们如何解决这个问题?只需定义一个翻转参数的新函数:

    >> fun2 = @(y,x) fun(x,y);
    >> q = integral2(fun2,0,1,0,xmax)
    q =
       0.220241017706984
    

    世界上一切都好。 (尽管由于integral2 的容错性,您可能会注意到两个正确答案之间的细微差别,可以通过文档中的选项进行调整。)

    【讨论】:

      【解决方案2】:

      错误表明您无法为积分限制传入函数。您需要为每个积分限制指定一个标量值。此外,函数的维度/操作也存在一些错误。试试这个:

      %Define function to be integrated
      f = @(x,y) y.^2.*cos(x);%changed to .^ and .* 
      
      %First case. Integration order: dydx
      %ymin = @(x) cos(x);
      I = integral2(f,-1,1,0,2*pi)%use scalar values for limits of integration
      
      %Second case. Integration order: dxdy
      %xmin = @(y) asin(y)+2*pi/2;
      %xmax = @(y) asin(y)-pi/2;
      B = integral2(f,0,2*pi,-1,1)% same issue, must use scalars
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        相关资源
        最近更新 更多