gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:47 26 4
gpt4 key购买 nike

我经常使用 matlab 来帮助我解决数学问题。

现在我正在寻找一种在 matlab 中进行隐式微分的方法。例如,我想区分 y^3*sin(x)+cos(y)*exp(x)=0dy/dx

我知道如何使用数学方法通常做到这一点,但我一直在努力寻找使用 matlab 的简单方法。当我需要正常微分(从 f(x) 求微分)时,我使用符号数学工具箱并做了如下操作:

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

我查看了 doc diff 并在符号工具箱中进行了快速查找,但没有找到任何可以帮助我解决上述情况的信息。但是我就是不相信matlab没有这么简单的功能。

最佳答案

这里有一些代码可以满足您的需求,所有解释都在注释中,请注意,此代码假定您希望 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

关于matlab - 有没有办法在matlab中进行隐式微分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com