2016-11-18 5 views
1

私はMATLAB 2012bを使用しています。 私は、単純な機能の/ dxdyd²取得したい:symsとdiffを使用してMATLABで混合派生物を計算する

f(x,y) = (x-1)² + 2y² 

私は次の例のようにsymsdiffを使用することができるドキュメントの状態を:

> syms x y 
> diff(x*sin(x*y), x, y) 
ans = 
    2*x*cos(x*y) - x^2*y*sin(x*y) 

しかし、同じことをやって私が得ました間違った答えは:私はこのようなdiffを使用する場合

> syms x y 
> f = (x-1)^2 + 2*y^2; 
> diff(f,x,y) 
ans = 
    4*y 

答えは右です:

diff(diff(f,x),y) 

この方法で使用するのは問題ではありませんが、最初のバリアントが動作しないのはなぜですか?それはバージョンの問題ですか?

答えて

1

R2010aから実際のドキュメント:

差分(exprが)に関しては、シンボリック式exprを区別symvarによって決定されたその自由変数に変換します。

差分(exprは、V)との差分(exprは、SYM( 'V'))Vに対して式exprを区別する。

差分(exprを、N)はexprをn回微分します。 nは正の整数です。

diff(expr、v、n)およびdiff(expr、n、v)はv n回に対してexprを区別します。

したがって、コマンドdiff(f,x,y)が最後のケースです。これは、f w.r.tを差別化することと等しくなります。 x,y回、またはy,x回。

何らかの理由で、警告またはエラーが表示されず、syms変数の1つがn = 1と解釈され、差別化が実行されていることがわかりません。この場合、diffと思われるのは基本的にdiff(f, y, 1)です。いずれの場合においても

は、追加の場合がある現象は、あなたが(R2016b)にリンクドキュメントで、バージョンごとに変更されているようです:

差分(F、VAR1 .. 。、varN)は、変数var1、...、varNに対してFを区別します

あなたはバージョンの問題に遭遇していると思われます。

あなたは、二回WRT xyの両方を区別したい場合は、2番目の試みが実際にそれを行うには、正しいと最もポータブルな方法です:

diff(diff(f,x), y) 

または同等

diff(diff(f,y), x) 

NB symbolic/symbolic/@sym/diff.mのR2010aコードを確認しましたが、実際にはnはデフォルトで1に設定されています。入力変数の1つがdoubleである場合にのみ変更され、差別化する変数は引数リストの最後のsyms変数と等しく設定されます。 syms可変コールはサポートされておらず、検出もエラートラップもありません。

+0

私はそれを得る、ありがとう。 – Eugene

0

symsはシンボリック変数のみを作成しています。

実行する最初のコードは、1つの派生語だけです。あなたが提供した2番目のコードは2回区別されます。だから私はあなたが提供したコードの最初の部分でもう一度差別化するのを忘れたと思います。

また、私はあなたがどんな答えを期待しているのでしょうか?あなたは二次微分は私にゼロを与えて実行

diff(f,y) 

なく

diff(f,x,y) 

を使用する必要がありますよりも、答えとして4 * yをしたい場合は?

diff(diff(f,x),y) 

あなたは次のことを行う必要があるよりも、答えとして4をしたい場合:

diff(diff(f,y),y) 
+0

はい、正解です。そしてそれは2番目の混合微分です。問題は、diff(x * sin(x * y)、x、y)のようなmatlabのドキュメント(https://www.mathworks.com/help/symbolic/diff.html)の構文では、しかし、私のコンピュータ上ではそうではありません。 – Eugene

関連する問題