隐式差异 - 使用Matlab进行二阶导数

时间:2017-12-28 20:34:42

标签: matlab symbolic-math derivative differentiation

等式为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中执行此操作吗?

2 个答案:

答案 0 :(得分:1)

据我所知,没有直接的方法可以在Matlab中获得隐含的二阶导数。在Matlab中使用隐式函数可能相当棘手。首先,您的变量y隐式地是x的函数,您应该将其定义为:

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) 的导数
y(x)

根据x相对于diff(y(x), x)diff(y)的隐式导数返回一个函数(在这种情况下,diff(y)是简写)。您可以使用subssolve代数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))

最后,将第一个隐式导数的表达式替换为this并简化以获得最终形式:

(2*(y(x)^2 - 2*x^2))/y(x)^3

这会产生x。然后,您可以使用f的原始表达式删除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')) 的解决方案。

这整个过程可以更简洁(但非常不清楚)写成:

return

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

答案 1 :(得分:0)

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

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))