2016-04-01 15 views
1

私が知る限り、誰もこれを尋ねていません。 私は、関数の二重積分と同じ二重積分を計算するよう求められましたが、積分の順番は入れ替わっています(つまり、最初にdydx、次にdxdyに積分します)。ここに私のコードは次のとおりです。MATLABでIntegral2関数を使用したときのエラー

%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 *パイ)

私は私のミスは単純なものであると確信しているが、私は」前にIntegral2を使用したことがなく、私は答えが失われてしまいました。ありがとうございました。

答えて

1

を、可変制限は制限の第二の対として与えられます。だからあなたの最初の積分は

% 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の最初の引数は限界の最初のセットに関連付けられていると仮定し第1の引数の関数であってもよい第2の制限のセット。あなたは統合の順序を切り替える場合は、あなたもそれに応じてfの入力の順序を切り替える必要があるため


は、私は2番目の部分と指摘しています。その引数(すなわち、fun(x,y) ~= fun(y,x))には対称ではありません

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

ちょっといい機能:以下の例を考えてみましょう。これを、(0,0)、(2,0)、(0,1)の頂点を持つ第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を第二のような最初の引数としてxyで定義されているからだが、integral2の前の呼び出しがyfunの最初の引数であることを意味し、これは01一定の限界があります。これをどのように修正するのですか?引数を反転させる新しい関数を定義するだけです:

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

そして、すべては世界で正しいです。 (エラー許容度がintegral2であるため、2つの正解間の小さな違いに気づくかもしれませんが、ドキュメントごとのオプションで調整できます)

0

エラーには、統合の限界に関数を渡すことができないと記載されています。統合の各限界にスカラー値を指定する必要があります。また、機能の寸法/操作にはいくつかの誤差があります。この試す:integral2 documentation当たり

%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 
関連する問題