隐微分 - 使用 Matlab 的二阶导数

Implicit differentiation - Second derivative using Matlab

等式是4*x^2-2*y^2==9。使用隐式微分,我可以发现 y 关于 x 的二阶导数是 -9/y^3,这需要在最后一步进行替换。

我正在尝试使用 Matlab 的符号工具箱复制这个答案。我确实找到了对一阶导数的一些支持 here,并且成功找到了一阶导数。

clear all
syms x y f
f=4*x^2-2*y^2-9
sol1=-diff(f,x)/diff(f,y)

但我无法继续寻找最终简化的二阶导数(将 4*x^2-2*y^2 替换为 9)。

有人可以告诉我如何在 Matlab 中执行此操作吗?

据我所知,在 Matlab 中没有直接获得隐式二阶导数的方法。在 Matlab 中使用隐式函数可能相当棘手。首先,您的变量 yx 的隐式函数,您应该这样定义它:

clear all
syms y(x) % defines both x and y
f = 4*x^2-2*y^2-9

这里的y(x)就是现在所谓的arbitrary or abstract symbolic function,即没有明确公式的。然后取 f 关于 x 的导数:

s1 = diff(f,x)

这个 returns 是 y(x) 关于 xdiff(y(x), x) 的隐式导数的函数(在这种情况下 diff(y) 是 shorthand).您可以使用 subs and solve:

以代数方式求解此函数 diff(y)
syms dydx % arbitrary variable
s2 = subs(s1,diff(y),dydx)
s3 = solve(s2,dydx)

这产生了第一个隐式导数。然后,您可以对该表达式求另一个导数,以获得作为第一个函数的第二个隐式导数:

s4 = diff(s3,x)

最后将一阶隐式导数的表达式代入,化简得到最终形式:

s5 = simplify(subs(s4,diff(y),s3))

这会产生 (2*(y(x)^2 - 2*x^2))/y(x)^3。然后你可以使用 f 的原始表达式消除 x 并进一步替换和求解:

syms x2
f2 = subs(f,x^2,x2)
x2 = solve(f2,x2)
s6 = subs(s5,x^2,x2)

最后,如果需要,您可以将其转换回具有最终替换的显式代数表达式:

s7 = subs(s6,y,'y')

这会产生 -9/y^3 的解。

整个过程可以写得更简洁(但很不清晰)为:

clear all
syms y(x) dydx x2
f = 4*x^2-2*y^2-9;
s1 = solve(subs(diff(f,x),diff(y),dydx),dydx)
s2 = simplify(subs(subs(subs(diff(s1,x),diff(y),s1),x^2,solve(subs(f,x^2,x2),x2)),y,'y'))

还有很多其他方法可以达到相同的效果。另请参阅这两个教程:[1], [2].

我问这个问题已经快四年了,并得到了 horchler 的出色帮助,但我发现了另一种使用链式法则的方法。

syms x y
f=4*x^2-2*y^2-9
dydx=-diff(f,x)/diff(f,y)
d2ydx2=diff(dydx,x)+diff(dydx,y)*dydx

d2ydx2=simplifyFraction(d2ydx2,'Expand',true)

s1=solve(f,x)
subs(d2ydx2,x,s1(2))