等式为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中执行此操作吗?
答案 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)
是简写)。您可以使用subs
和solve
代数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 :(得分: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))