据我所知,没有人问过这个问题。 我被要求计算函数的双积分,并且也是相同的双积分但是交换了积分的顺序(即:首先对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,而我却迷失了答案。谢谢。
答案 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
的第一个参数,它具有0
和1
的常量限制。我们如何解决这个问题?只需定义一个翻转参数的新函数:
>> fun2 = @(y,x) fun(x,y);
>> q = integral2(fun2,0,1,0,xmax)
q =
0.220241017706984
对所有人来说都是对的。 (尽管由于integral2
的误差容限,您可能会注意到两个正确答案之间存在细微差别,可以通过文档中的选项进行调整。)
答案 1 :(得分:0)
错误表明您无法传递函数以获得集成限制。您需要为每个集成限制指定标量值。此外,函数的维度/操作中存在一些错误。试试这个:
{{1}}