在MATLAB中使用Integral2函数时出错

时间:2016-04-01 11:36:05

标签: matlab calculus numerical-integration

据我所知,没有人问过这个问题。 我被要求计算函数的双积分,并且也是相同的双积分但是交换了积分的顺序(即:首先对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 = integral2(f,ymin,1,0,2 * pi)

我确定我的错误很简单,但我之前从未使用过Integral2,而我却迷失了答案。谢谢。

2 个答案:

答案 0 :(得分:2)

根据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的调用暗示y }是fun的第一个参数,它具有01的常量限制。我们如何解决这个问题?只需定义一个翻转参数的新函数:

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

对所有人来说都是对的。 (尽管由于integral2的误差容限,您可能会注意到两个正确答案之间存在细微差别,可以通过文档中的选项进行调整。)

答案 1 :(得分:0)

错误表明您无法传递函数以获​​得集成限制。您需要为每个集成限制指定标量值。此外,函数的维度/操作中存在一些错误。试试这个:

{{1}}