如何用matlab求隐式函数的导数
隐函数求导的例子
假设有一个圆 x2+y2=5 , 要求在某个点上的切线的斜率.
我们可以把式x2+y2=5中的每一项对x求导, 可以得到:
dxd(x2)+dyd(y2)dxdy=dxd(5)
2x+2ydxdy=0
再将 dxdy 看成一个变量, 可以对式(2)求解得到: dxdy=−yx , 这就一阶导, 也是圆上每一个点上切线的斜率.
对式(2)再次求导:
dxd(2x)+dxd(2ydxdy)=0
求dxd(2ydxdy) 这一项要用乘法法则, 注意(dydx)2和dx2d2y是不同的.
2+2×(dydx)2+dx2d2y=0
将dxdy=−yx 代入式(4) , 将 dx2d2y 看做变量可以求解得到: dx2d2y=−y3y2+x2 这个就是二阶导.
如何用matlab求隐式函数的一阶导数
方法1: 用二元隐函数存在的定理
具体来说, 二元函数的求导代码是这样写的:
把等号右边的式子全移到左边
分别对式子求 x 和 y 的偏导
syms x y;
f = @(x,y) ( x^2+y^2-4 );
dx = diff(f(x,y),x);
dy = diff(f(x,y),y);
ans = - dy/dx
方法2: 用solve硬解
如果你不知道公式, 还可以用solve函数强解隐函数导数, 具体做法如下:
- 把y写成y(x)让matlab把其当做与x相关的导数
- 直接对式x2+y(x)2=5求导可得到这样的结果: 2∗x+2∗y(x)∗diff(y(x),x)=0
- 用变量dydx来代替原有的diff(y(x),x)
- 用solve函数解dydx
syms x;
g = str2sym('x^2+y(x)^2=5');
dgdx = diff(g,x)
dgdx1 = str2sym('2*x + 2*y(x)*dydx = 0')
solve(dgdx1,str2sym('dydx'))
如何用matlab求隐式函数的二阶导数
方法1: 链式法则
syms x y;
f = @(x,y) ( x^2 + y^2 - 5 );
dfx = diff(f,x);
dfy = diff(f,y);
% 一阶隐式导
-dfx/dfy
f1 = @(x,y) (-x/y);
dydx = -x/y;
% 二阶隐式导
d2ydx2 = diff(dydx,x)+diff(dydx,y)*dydx
方法2: 用solve硬解
如果不知道公式也一样可以用solve函数硬解, 不过要稍麻烦一点.
syms x y(x);
s1 = str2sym('x^2+y^2=5');
m1 = diff(s1,x)
syms dydx;
s2 = subs(m1,diff(y),dydx)
s3 = solve(s2,dydx)
% 再求导后用一阶导替换diff(y)
s4 = diff(s3,x)
ans = subs(s4,diff(y),s3)