3

私は数学の問題を解決するために、matlab をよく使用していました。

現在、matlab で暗黙的な微分を行う方法を探しています。y^3*sin(x)+cos(y)*exp(x)=0たとえば、 について微分したいと思いdy/dxます。

通常、数学的な方法を使用してこれを行う方法は知っていますが、matlab で簡単な方法を見つけるのに苦労していました。通常の微分が必要な場合 ( f(x) から微分を見つける )、シンボリック数学ツールボックスを使用して、次のようにしました。

syms x
y = myfunctionOf(x)
diff(y)

シンボリックツールボックスを調べてdoc diff簡単に調べましたが、上記のケースで役立つものは何も見つかりませんでした。しかし、matlab にはそのような単純な機能がないとは信じられません。

4

3 に答える 3

3

ここにあなたが望むことをするいくつかのコードがあります.すべての説明はコメントにあります.

%// Firstly you need to define a function `f` in terms of `x` and `y`. 
syms x y;
f = y^3*sin(x)+cos(y)*exp(x);

%// Then you need to tell Matlab that y is a function of x,
%// you do this by replacing y with y(x)
yOfx = sym('y(x)');
f_yOfx = subs(f, y, yOfx);

%// Then you need to differentiate with respect to x
df = diff(f_yOfx, x);

%// df will have diff(y(x), x) terms in it, 
%// we want to solve for this term, 
%// to make it easier we should first replace it with a variable
%// and then solve
syms Dy;
df2 = subs(df, diff(yOfx, x), Dy);
dyOver_dx = solve(df2, Dy);

%// Finally if we do not want all of the y(x) terms, 
%// then replace them with y
dyOver_dx = subs(dyOver_dx, yOfx, y)

もちろん、ちょっとした紙の仕事を気にしないのであれば、dy/dx = -(partial f/partail x)/(partial f/partial y)そこからはるかに短いコードを取得することができます

%// Implicit differentiation identity
also_dyOver_dx = -diff(f, x)/diff(f, y);

ここでは、2 つの答えが同じであることを確認します。

simplify(dyOver_dx - also_dyOver_dx) %// == 0
于 2013-12-02T15:57:57.243 に答える
2

最良の方法は、常に最も簡単な方法です。

syms x y(x)
f = y^3*sin(x)+cos(y)*exp(x);
diff(f,x)

また、より良い視覚化のためにかなりのコマンドを含めることもできます!

pretty(ans)  %"Pretty print" output

また、別の方法があります:

syms x y f
f = y^3*sin(x)+cos(y)*exp(x);
-diff( f, x )/diff( f, y )
pretty(ans)  %"Pretty print" output

楽しめ!

于 2015-02-16T07:30:42.947 に答える
-1

あなたは使用してみることができます:

diff(expr, sym('v')) //This differenciates the expression respect to v
于 2013-01-26T00:54:39.250 に答える