📅  最后修改于: 2023-12-03 15:20:00.779000             🧑  作者: Mango
SciPy 是一个高级的 Python 科学计算库,它基于 NumPy 库并且拥有许多内置的工具来进行优化、线性代数、积分、插值、特殊函数、FFT 等操作。它的名字来源于 "科学(Scientific)" 和 "Python"。
可以通过 pip 来安装 SciPy,命令如下:
pip install scipy
SciPy 增强了 NumPy 数组的功能,如向量化函数、矢量和矩阵运算、线性代数和随机数生成。
使用 SciPy 可以进行一般和局部最小化、曲线拟合、最小二乘拟合和期望值最大化等优化。此外,还有包括内置的优化算法(如 Nelder-Mead、Powell 等)和策略(如 Basin-Hoppig 和 Differential Evolution),这些方法在不同场景下作用更佳。
SciPy 还包括了许多标准模块,如:
要使用 SciPy,可以这样导入:
import scipy
使用 SciPy 中的函数,需要在导入时指定具体的子模块。例如,如果你要使用积分函数,需要使用:
from scipy import integrate
假设我们有一个函数 f(x) = x^2 + 5sin(x),我们想要找出这个函数的最小值。我们可以在 scipy.optimize 模块中使用 minimize 函数来实现。代码如下:
import numpy as np
from scipy.optimize import minimize
import matplotlib.pyplot as plt
def func(x):
return x**2 + 5*np.sin(x)
x0 = 0
result = minimize(func, x0)
print(result)
使用 SciPy 还可以方便地解决微分方程的问题。例如,如果我们要解决下面的微分方程:
y’’ + 2y’ + 5y = np.sin(x)
y(0) = 0
y’(0) = 1
我们可以采用如下的代码:
from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
def model(y, x):
dydx = np.zeros(2)
dydx[0] = y[1]
dydx[1] = -2*y[1] - 5*y[0] + np.sin(x)
return dydx
y0 = [0, 1]
x = np.linspace(0, 10, 101)
y = odeint(model, y0, x)
plt.plot(x, y[:, 0], '-', label='y(x)')
plt.plot(x, y[:, 1], '--', label='y`(x)')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
以上示例代码只提供了 SciPy 的一部分功能,更多功能请看官访问 SciPy 官网。