如何用matlab求隐式函数的导数

如何用matlab求隐式函数的导数

隐函数求导的例子

假设有一个圆 \(x^2+y^2=5\) , 要求在某个点上的切线的斜率.

我们可以把式\(x^2+y^2=5\)中的每一项对\(x\)求导, 可以得到:

\[\begin{equation} \frac{d(x^2)}{dx} + \frac{d(y^2)}{dy}\frac{dy}{dx} = \frac{d(5)}{dx} \tag{1} \end{equation} \]

\[\begin{equation} 2x+2y\frac{dy}{dx} = 0 \tag{2} \end{equation} \]

再将 \(\frac{dy}{dx}\) 看成一个变量, 可以对式\((2)\)求解得到: $ \frac{dy}{dx}= - \frac{x}{y}$ , 这就一阶导, 也是圆上每一个点上切线的斜率.

对式\((2)\)再次求导:

\[\begin{equation} \frac{d}{dx}(2x) + \frac{d}{dx}(2y \frac{dy}{dx} ) = 0 \tag{3} \end{equation} \]

\(\frac{d}{dx}(2y \frac{dy}{dx} )\) 这一项要用乘法法则, 注意 \((\frac{dx}{dy})^2\)\(\frac{d^2y}{dx^2}\) 是不同的.

\[\begin{equation} 2 + 2 \times ( \frac{dx}{dy} )^2 + \frac{d^2y}{dx^2} = 0 \tag{4} \end{equation} \]

将$ \frac{dy}{dx}= - \frac{x}{y}$ 代入式\((4)\) , 将 \(\frac{d^2y}{dx^2}\) 看做变量可以求解得到:

\[\frac{d^2y}{dx^2} = - \frac{y^2+x^2}{y^3} \]

这个就是二阶导.

如何用matlab求隐式函数的一阶导数

方法1: 用二元隐函数存在的定理

具体来说, 二元函数的求导代码是这样写的:

  1. 把等号右边的式子全移到左边
  2. 分别对式子求 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函数强解隐函数导数, 具体做法如下:

  1. 把y写成y(x)让matlab把其当做与x相关的导数
  2. 直接对式x^2+y(x)^2=5求导可得到这样的结果: 2*x + 2*y(x)*diff(y(x), x) = 0
  3. 用变量dydx来代替原有的diff(y(x), x)
  4. 用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)

http://www.codebonobo.tech/post/b0003_隐函数求导/

posted @ 2022-05-24 01:33  酱_油  阅读(4818)  评论(0编辑  收藏  举报