MATLAB中使用积分2函数时的错误

MATLAB中使用积分2函数时的错误,matlab,calculus,numerical-integration,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 cas

据我所知,没有人问过这个问题。 我被要求计算一个函数的二重积分,也是同样的二重积分,但积分顺序被交换了(即:先积分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)
我得到的错误是:

使用积分2时出错(第71行)

XMIN必须是浮点标量

EngMathsA1Q1c中的错误(第5行)

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


我确信我的错误很简单,但我以前从未使用过积分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
根据,可变限值作为第二对限值给出。所以你的第一个积分应该是

%    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==dydx
集成,我们得到

>> 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
作为第二个参数,但是前面对
integration2
的调用意味着
y
fun
的第一个参数,并且它具有
0
1
的恒定限制。我们如何解决这个问题?只需定义一个翻转参数的新函数:

>> fun2 = @(y,x) fun(x,y);
>> q = integral2(fun2,0,1,0,xmax)
q =
   0.220241017706984
世界上一切都好。(尽管由于
integral2
的误差公差,您可能会注意到两个正确答案之间的微小差异,这可以通过文档中的选项进行调整。)