求导
scipy.misc.derivative
可用于求任意函数的任意阶导数:
def derivative(func, x0, dx=1.0, n=1, order=3)
func
:自定义的被求导函数\(f(x)\)x0
:求导的位置,即求\(f^{(n)}(x_0)\)dx
:用于微分的小量n
:求导的阶数order
:用于求导的采样点个数,必须为>=n+1的奇数
示例:
画出\(\cos\sqrt{x^2+1}\)及其在\(0\)点处的\(1,3,5\)阶泰勒展开式 \[ f(x)=f(x_0)+f'(x_0)(x-x_0)+\frac{f''(x_0)}{2!}(x-x_0)^2+\dots+\frac{f^{(i)}(x_0)}{i!}(x-x_0)^i+\dots \]
1 | import numpy as np |
定积分
一重积分
scipy.integrate.quad
可以求任意函数的一重积分
quad(func, a, b)
表示求函数func
从a
到b
的一重积分
示例:
求\(\int_0^\infty e^{-x}\sin(x^2+2)\)
1 | import numpy as np |
输出:
1 | (0.37378979243874044, 1.3876530327162045e-08) |
返回的值分别是积分结果和绝对误差
多重积分
scipy.integrate.dblquad
和scipy.integrate.tplquad
分别能够求二重和三重积分
dblquad(func,a,b,gfun,hfun)
表示\(\int_a^b \text dx \int_{gfun(x)}^{hfun(x)} func(x,y) \text dy\)
tplquad(func,a,b,gfun,hfun,qfun,rfun)
表示\(\int_a^b \text dx \int_{gfun(x)}^{hfun(x)} \text dy \int_{qfun(x,y)}^{rfun(x,y)} func(x,y,z) \text dz\)
返回值和quad
一致
需要注意的是,func
定义的参数顺序必须是func(x,y,z)
非线性方程(组)
scipy.optimize.fsolve
可以解非线性方程(组)
fsolve(func,x0)
表示求\(func(x)=0\)的根,迭代初值x0
若要解方程组,可将func(x)
的x
定义为向量
示例: \[ x^3+1.1x^2+0.9x-1.4=0 \\ \begin{cases} 5x_2+3=0 \\ 4x_1^2-2\sin(x_2x_3)=0 \\ x_2x_3-1.5=0 \end{cases} \]
1 | import numpy as np |
输出:
1 | [0.67065731] |
求极值点
scipy.optimize.minimize
是求非线性规划的函数,若不加约束,即可求任意函数(一元,多元)的极小值点
minimize(func,x0)
表示求\(func(x)=0\)的最小值,迭代初值x0
返回的是一个result
类,可以调用成员以获取相应信息
示例: \[ f_1(x)=e^x\cos(2x) \\ f_2(x_1,x_2)=100(x_2-x_1^2)^2+(1-x_1)^2 \]
1 | import numpy as np |
输出:
1 | fun: -0.2344426467071059 |