有没有办法在matlab中进行隐式区分

时间:2013-01-25 23:25:25

标签: matlab

我使用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没有这么简单的功能。

3 个答案:

答案 0 :(得分:3)

这里有一些代码可以做你想要的,所有的解释都在评论中,注意这段代码假设你希望Matlab为你做几乎所有的数学思考。

%// 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);

这是检查两个答案是否相同。

simplify(dyOver_dx - also_dyOver_dx) %// == 0

答案 1 :(得分:1)

最好的方法永远是最简单的方法!

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

享受它!

答案 2 :(得分:-1)

您可以尝试使用:

diff(expr, sym('v')) //This differenciates the expression respect to v