回 帖 发 新 帖 刷新版面

主题:如何从隐函数中求高阶导数呢?

例如,log(x)+exp(-y./x)=0,需要求y对x的二阶导数,如何用matlab实现呢?

回复列表 (共7个回复)

沙发

一.视y为 x的函数,两边对x 求导:
1/x + exp(-y/x)(y/x^2-y'/x)=0 ....(1)
==>y'=....
-1/x^2 + exp(-y/x)(y/x^2-y'/x)^2+exp(-y/x)(y'/x^2-2y/x^3-y''/x+y'/x^2))
(对(1)式两边对x 求导,并将y'代入)
==>y''=....

二.f(x,y)=log(x)+exp(-y./x)
    dy/dx=-fx/fy
    
In Matlab :
>> syms x y
>> f=log(x)+exp(-y/x)
>> dy=-diff(f,x)/diff(f,y)
 
dy =
 
-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x)
>> g=1/x + exp(-y/x)*(y/x^2-dy/x) %此即上述(1)式y' 代之于dy

>> ddy=-diff(g,x)/diff(g,y)
 
ddy =
 
(1/x^2-y/x^2*exp(-y/x)*(y/x^2+(-1/x-y/x^2*exp(-y/x))/exp(-y/x))-exp(-y/x)*(-2*y/x^3+(1/x^2+2*y/x^3*exp(-y/x)-y^2/x^4*exp(-y/x))/exp(-y/x)-(-1/x-y/x^2*exp(-y/x))/exp(-y/x)*y/x^2))/(-1/x*exp(-y/x)*(y/x^2+(-1/x-y/x^2*exp(-y/x))/exp(-y/x))+exp(-y/x)*(1/x^2+(-1/x^2*exp(-y/x)+y/x^3*exp(-y/x))/exp(-y/x)+(-1/x-y/x^2*exp(-y/x))/exp(-y/x)/x))


由于平日未涉及此类问题,故在此只能给出一种基于数学分析有关原理的解法,希望有朋友给出更简便的方法!

板凳


谢谢您的回复!
您的算法我基本能看懂。由于我刚学matlab不久,有些细节问题我还不是很明白。您能将所有程序语句都贴上来吗?谢谢!
其中,我有个小问题,
>> g=1/x + exp(-y/x)*(y/x^2-dy/x) 
您是如何得到的?是手工算出来的还是编程算出的呢?如果f(x,y)很复杂,手工几乎无法算的话,如何编程得到g呢?
谢谢!

3 楼

其中的g是由语句dy=-diff(f,x)/diff(f,y)
然后经过简单的化简就会得到,其实是一个隐函数求导的问题,你可以对dy再次求导,就能够得到y对x的二阶导数了
完整的程序如下:
>> syms x y
>> f=log(x)+exp(-y/x)
 
f =
 
log(x)+exp(-y/x)
 
 
>> dy=-diff(f,x)/diff(f,y)
 
dy =
 
-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x)
 
 
>> simple(dy)
 
simplify:
 
(x+y*exp(-y/x))/x*exp(y/x)
 
 
radsimp:
 
(x+y*exp(-y/x))/x/exp(-y/x)
 
 
combine(trig):
 
(x+y*exp(-y/x))/x/exp(-y/x)
 
 
factor:
 
(x+y*exp(-y/x))/x/exp(-y/x)
 
 
expand:
 
exp(y/x)+y/x
 
 
combine:
 
(1/x+y/x^2*exp(-y/x))*x*exp(y/x)
 
 
convert(exp):
 
-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x)
 
 
convert(sincos):
 
-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x)
 
 
convert(tan):
 
-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x)
 
 
collect(x):
 
1/exp(-y/x)+y/x
 
 
mwcos2sin:
 
-(-1/x-y/x^2*exp(-y/x))*x/exp(-y/x)
 
 
ans =
 
exp(y/x)+y/x
 
 
>> d2y=simple(-diff(dy,x)/diff(dy,y))
 
d2y =
 
y/x

4 楼

f(x,y)=0
==>fx+fy*y'=0
   y'=-fx/fy    (fy<>0)
==>fxx+fxy*y'+[fyx+fyy*y']*y'+fy*y''=0
==>y''=[2*fx*fy*fxy-fy^2*fxx-fx^2*fyy]/fy^3


f(x,y)=log(x)+exp(-y/x)
InMatlab:
>> syms x y
>> f=log(x)+exp(-y/x);
>> fx=diff(f,x)
 
fx =
 
1/x+y/x^2*exp(-y/x)
 
>> fy=diff(f,y)
 
fy =
 
-1/x*exp(-y/x)
 
>> fxx=diff(fx,x)
 
fxx =
 
-1/x^2-2*y/x^3*exp(-y/x)+y^2/x^4*exp(-y/x)
 
>> fxy=diff(fx,y)
 
fxy =
 
1/x^2*exp(-y/x)-y/x^3*exp(-y/x)
 
>> fyy=diff(fy,y)
 
fyy =
 
1/x^2*exp(-y/x)
 
>> d2y=[2*fx*fy*fxy-fy^2*fxx-fx^2*fyy]/fy^3
 
d2y =
 
-(-(2/x+2*y/x^2*exp(-y/x))/x*exp(-y/x)*(1/x^2*exp(-y/x)-y/x^3*exp(-y/x))-1/x^2*exp(-y/x)^2*(-1/x^2-2*y/x^3*exp(-y/x)+y^2/x^4*exp(-y/x))-(1/x+y/x^2*exp(-y/x))^2/x^2*exp(-y/x))*x^3/exp(-y/x)^3

5 楼

[quote]
>> ddy=-diff(g,x)/diff(g,y)
 
[/quote]
第一种方法中这个论断是不对的,用第二种方法吧!

6 楼

多谢仁兄回复!
我的qq  50852253,有空向仁兄学习!

7 楼


多谢仁兄回复!
我的qq  50852253,有空多多交流!

我来回复

您尚未登录,请登录后再回复。点此登录或注册