用Python学《微积分B》(微分法)

  本节主要介绍多元函数导数(微分)的计算方法,包括:多元复合函数求导法则、多元隐函数求导、多元隐函数组求导三个子话题。

一、多元复合函数链导法


1,一元复合函数“链导法”
  回顾一下,一元复合函数求导的方法 —— “链导法”chain rule):

y=f(u),u=g(x)dydx=dydudgdx

  “链导法”这个名字很形象,由外而内逐层求导,像一个链条。事实上,“链导法”不仅适用于一元复合函数,也适用于多元复合函数。
2,一元与多元复合函数“链导法”
  这类复合函数,从外层看是多元(二元)函数,从内层看是一元函数,如下:
z=f(u,v),u=φ(t),v=ψ(t)dzdt=zududt+zvdvdt

  如上式,它在各个分量上面,也是由外而内逐层求导。不同的是,外层是偏导数(二元函数),内层是导数(一元函数)。
3,多元与多元复合函数“链导法”
  这类复合函数,从外层和内层看都是多元(二元)函数,如下:
z=f(u,v),u=φ(x,y),v=ψ(x,y)zx=zuux+zvvxzy=zuuy+zvvy

  如上式,它在各个分量上面,也是由外而内逐层求导。不同的是,它用的偏导数。
注:关于求导法则,还可以参考以下链接
https://www.khanacademy.org/math/calculus-home/taking-derivatives-calc/chain-rule-calc/a/chain-rule-overview
https://www.mathsisfun.com/calculus/derivatives-rules.html
http://mathinsight.org/chain_rule_multivariable_introduction
http://www.columbia.edu/itc/sipa/math/calc_rules_multivar.html
4,全微分形式不变性
  回顾一下,一元函数微分具有形式不变性,而多元函数全微分同样也具有形式不变性,如下:
z=f(u,v)dz=zudu+zvdv

  如果 u、v是 x 、 y 的函数,通过链导法可得
u=φ(x,y),v=ψ(x,y)dz=zxdx+zydy

  观察上面的两个全微分式,可以发现:自变量替换后,全微分的形式保持不变。
5,应用Python - sympy 求复合函数导数的时候,隐藏了链导过程,举例如下:

from sympy import *
init_printing()
# Example 1
u,v=symbols('u v')
x,y,z=symbols('x y z')
u = x * y
v = x + y
z = E ** u * sin(v)
z

exysin(x+y)

z.diff(x), z.diff(y)

(yexysin(x+y)+exycos(x+y),xexysin(x+y)+exycos(x+y))


# Example 3
u,v=symbols('u v')
x,y,z,t=symbols('x y z t')
u = E ** t
v = cos(t)
z = u * v + sin(t)
z, z.diff(t)

(etcos(t)+sin(t),etsin(t)+etcos(t)+cos(t))



二、多元复合隐函数求导


1,一元隐函数求导
  先回顾一下一元隐函数的求导过程:对于方程 F(x,y)=0 ,它可以确定一个一元函数 y=y(x) ,故称之为一元隐函数。两边同时对 x 求导,并应用“链导法”,然后整理出 dydx 的表达式,例如:

x2+y2=9dx2dx+dy2dx=0dx2dx+dy2dydydx=2x+2ydydx=0dydx=xy

2,一元隐函数偏导法
  对于方程 F(x,y)=0 还有另一种求导方法
dydx=FxFy

  即使用偏导数来确定这个隐函数的导函数,注意是负数加倒数关系。
3,多元隐函数求导
  类似一元隐函数求导,不同的是要先对各个分量求偏导数,最后叠加。
F(x,y,z)=0zx=FxFz,zy=FyFz

注:关于隐函数微分除了WIKI,还可以参考:Maht is fun - implict differential

扫描二维码关注公众号,回复: 129249 查看本文章
#sympy.geometry.util.idiff(eq, y, x, n=1)
#Return dy/dx assuming that eq == 0.
x,y,z=symbols('x y z')
expr = x **2 + y ** 2 - 9
idiff(expr, y, x)

xy

x,y,z=symbols('x y z')
expr = x ** 2 + y ** 2 + z ** 2 - 4 * z
idiff(expr, z, x, 2)

1(z2)2(x2z2z+2)



注:上式求隐函数 x2+y2+z24z=0 的二阶偏导数 zx


三、多元方程组求导


1,方程组

{F(x,y,u,v)=0G(x,y,u,v)=0

2,雅可比式(Jacobi)
J=(F,G)(u,v)=FuGuFvGv

3,一般方法
  这里有一个很复杂的公式,我就不列了,只给出一般的步骤:先求方程组两边求导,再解微分方程组。下面举例并用Python演示
已知
{xuyv=0yu+xv=1


ux,uy,vx,vy

分析:两个方程只能确定两个隐函数,而未知量有4个,故这两个隐函数都是二元的。

from sympy import *
init_printing()
x,y = symbols('x y')
u = Function('u')(x,y)
v = Function('v')(x,y)
expr1 = x * u - y * v
expr2 = y * u + x * v - 1
expr1, expr2

(xu(x,y)yv(x,y),xv(x,y)+yu(x,y)1)


expr1.diff(x)

xxu(x,y)yxv(x,y)+u(x,y)

expr1.diff(y)



xyu(x,y)yyv(x,y)v(x,y)

expr2.diff(x)

xxv(x,y)+yxu(x,y)+v(x,y)


expr2.diff(y)

xyv(x,y)+yyu(x,y)+u(x,y)



如上,对两边求导,就得到了4个新的方程,如果把偏导数当作未知量,那么就有6个方程,8个未知量。列出方程组,通过消元法将其中4个未知量用另外两个表示出来即可。

猜你喜欢

转载自blog.csdn.net/sagittarius_warrior/article/details/78342057