2017-04-14 18 views
1

私はmatlabの第3変数の二重積分方程式を解こうとしています。第3変数の二重積分方程式を解く

例:まず

以下のように、私は(k = 1のとき)象徴それを解決しようとした:コードが正しい答え、すなわち時間を与える

syms x y h 
F = @(x,y,h) 2*x*y+4*h; 
f = @(x) x/2; 
solve(int(int(F(x,y,h)*f(x),x,0,3)*f(y),y,0,1)-3, h) 

k = 1のときは2/3となる。

しかし私の実際の問題では、関数Fとfははるかに複雑です。そして、私が複雑なFとfで同じコードを適用したとき、matlabは適切な時間にそれを解決しません。実際にはそれが解決するかどうかは分かりません。コードを30分実行させ、強制終了させました。私はこの経路をさらに追求しなければならないだろうが、今は数値で解決しようとしている。以下のコードは私が試したものです:

F = @(x,y,h) 2.*x.*y+4.*h; 
f = @(x) x./2; 
g1 = @(y,h) integral(@(x) F(x,y,h).*f(x),0,3) 
g2 = @(h) integral(@(y) g1(y,h).*f(y),0,1)-3 
bsolve = fsolve(g2,0) 

なぜこのコードは私に0.5833の間違った答えを与えますか? integralのドキュメントから

答えて

0

:スカラー値の問題機能Y = FUN(X)については

はベクトル 引数Xを受け入れ、ベクトル結果YXの各要素で評価積分機能 を返さなければなりません。配列値問題(下記の 'ArrayValued'オプションを参照)の場合、FUNはスカラを受け入れ、 値の配列を返す必要があります。

コールをintegralにネストしているため、外側の積分はベクトルを内側の呼び出しに渡しています。この問題を解決するには、スカラー上で動作するように構成された内部の積分、g1する必要があります。

g1 = @(y,h)integral(@(x)F1(x,y,h).*f1(x),0,3,'ArrayValued',true) 

コードが浮動小数点で2/3を返します。この一変量のルート検索の問題には、おそらくfsolveの代わりにfzeroを使用するべきです。

+0

ありがとうございました! – user2011987

関連する問題