方程是4*x^2-2*y^2==9
。通过隐式微分,我可以发现y
对x
的二阶导数是-9/y^3
,这需要在最后一步进行替换。
我试图复制这个答案使用Matlab的符号工具箱。我确实找到了一些对一阶导数这里的支持,并且成功地找到了一阶导数。
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中教我怎么做吗?
发布于 2017-12-29 17:36:26
据我所知,在Matlab中没有直接获得隐式二阶导数的方法。在Matlab中使用隐式函数是相当棘手的。首先,变量y
是x
的一个隐式函数--您应该将它定义为:
clear all
syms y(x) % defines both x and y
f = 4*x^2-2*y^2-9
在这里,y(x)
现在被称为任意或抽象符号函数,即没有显式公式的任意或抽象符号函数。然后取f
相对于x
的导数
s1 = diff(f,x)
这将以y(x)
对x
,diff(y(x), x)
的隐式导数的形式返回一个函数(在本例中,diff(y)
是简写)。您可以用diff(y)
和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))
这就产生了(2*(y(x)^2 - 2*x^2))/y(x)^3
。然后,您可以使用f
的原始表达式消除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'))
要取得同样的结果,还有许多其他的方法。也请参阅这两个教程:[1],[2]。
发布于 2018-07-30 03:40:02
我问这个问题已经近四年了,从霍奇勒那里得到了很好的帮助,但我发现了另一种使用链式规则的方法。
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))
https://stackoverflow.com/questions/48014029
复制相似问题