一、SciPy求函数积分
1、已知函数型求积分
一般情况
from scipy import integrate
import numpy as np
def f(x):
return x + 1
v , err =integrate.quad(f, -1, 1)
print(format(v, ".2f")) # 保留两位小数
遇到未知的参数的函数
from scipy import integrate
import numpy as np
def f(x, a, b):
return a * x + b
v , err =integrate.quad(f, -1, 1, args=(-1,1))
print(format(v, ".2f")) # 保留两位小数
遇到有断点的函数
from scipy import integrate
import numpy as np
def f(x):
return 1 / np.sqrt(abs(x))
v , err =integrate.quad(f, -1, 1, points=[0])
print(format(v, ".2f")) # 保留两位小数
2、给出点集的积分
from scipy import integrate
import numpy as np
def f(x):
return np.sqrt(x)
x = np.linspace(0, 2, 10)
y = f(x)
v =integrate.trapz(y,x)
print(format(v, ".2f")) # 保留两位小数
3、多重积分
二重积分:
from scipy import integrate
import numpy as np
def f(x,y):
return x*y
def h(x):
return x
v, err = integrate.dblquad(f,1,2,1,h)
# 第二个参数开始分别对应积分从左到右的积分下限到下限
print(format(v, ".2f")) # 保留两位小数
三重积分:
模板:
from scipy import integrate
import numpy as np
# 被积函数
def f(x,y,z):
return
def g(x):
return
def h(x):
return
def r(x,y):
return
def q(x,y):
return
v, err = integrate.tplquad(f, a, b, g, h, q, r)
# 第二个参数开始分别对应积分从左到右的积分下限到下限
print(format(v, ".2f")) # 保留两位小数
4,总结:
integrate.quad(f, a, b) # 一重积分
integrate.trapz(f, a, b) # 离散点积分
integrate.dblquad(f, a, b, c, d) # 二重积分
integrate.tplquad(f, a, b, c, d) # 三重积分
二、SciPy求函数导数
1、求F(x ) 求其在X0的导数即F′(X0)
from scipy.misc import derivative
def f(x):
return x**5
# i 代表每次求导后代入导数的x0
for i in range(5):
print(derivative(f, i, n = 2)) # n 代表求的几阶导数
2、将求导式子打印出来
使用sympy模块里的diff和symbols函数。diff函数可以得到F(x )的导数表达式F′(x ),而sympy的symbols函数表示数学表达式里数学符号设定
from sympy import diff, symbols
t =symbols('x', real=True)
for i in range(1, 4):
# 代表对t求i阶导数
print(diff(t**5, t, i))
# 代表当t=i时的导数值
print(diff(t**5, t, i).subs(t, i), i)
3、使用numpy模块里的函数也可实现求函数的导数。
import numpy as np
# p代表构造的多项式,内部的列表代表多项式的系数
# 等于 x^5+2^4+3^2+5
p = np.poly1d([1, 2, 0, 3, 0, 5])
print(p)
# 第一种求导方式
for i in range(1, 4):
print(np.polyder(p, i)) # 代表对p求i阶导
print(np.polyder(p, i)(1.0)) # 表示对p求i阶导数后,自变量求1后的值
# 第二种求导方式
for i in range(1, 4):
print(p.deriv(i))
print(p.deriv(i)(1.0))
运行结果为:
更多求导方法见求导大全
三、求极限
实例代码如下:
import sympy
x = sympy.symbols('x')
def f(x):
return (sympy.sin(x))/x
lim1 = sympy.limit(f(x), x, 0)
lim2 = sympy.limit(f(x), x, sympy.oo)
print(lim1) # x->0时 f(x)的结果
print(lim2) # x->oo时 f(x)的结果