MATLAB中使用积分2函数时的错误
据我所知,没有人问过这个问题。 我被要求计算一个函数的二重积分,也是同样的二重积分,但积分顺序被交换了(即:先积分dydx,然后积分dxdy)。这是我的密码: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
%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
的误差公差,您可能会注意到两个正确答案之间的微小差异,这可以通过文档中的选项进行调整。)