📌 目录
scipy.optimize
简介- 单变量函数最小值:
minimize_scalar
- 多变量函数最小值:
minimize
- 非线性方程求根:
root
- 曲线拟合:
curve_fit
- 示例:抛物线拟合与参数估计
- 示例:非线性方程组求解
- 出站链接与参考资料
1. scipy.optimize
简介
scipy.optimize
模块提供:
- 最优化方法(无约束、有约束)
- 最小值搜索(单变量、多变量)
- 求解方程(单根、多元组)
- 最小二乘拟合、曲线拟合
- 边界条件、Jacobian 支持
广泛应用于数据建模、物理模拟、机器学习调参等领域。
2. 单变量函数最小值:minimize_scalar
用于求解单变量函数的最小值。
示例:f(x) = (x – 3)² + 4 的最小值
from scipy.optimize import minimize_scalar
f = lambda x: (x - 3)**2 + 4
res = minimize_scalar(f)
print("最小值点 x =", res.x)
print("最小值 f(x) =", res.fun)
✅ 理论最小值应出现在 x=3 处,对应 f(x)=4。
3. 多变量函数最小值:minimize
用于优化多个变量组成的函数,支持多种算法(BFGS, Nelder-Mead, L-BFGS-B 等)。
示例:Rosenbrock 函数(优化经典函数)
import numpy as np
from scipy.optimize import minimize
def rosen(x):
return sum(100.0*(x[1:] - x[:-1]**2.0)**2.0 + (1 - x[:-1])**2.0)
x0 = np.array([1.3, 0.7])
res = minimize(rosen, x0, method='BFGS')
print("最优点 x =", res.x)
print("最小值 f(x) =", res.fun)
4. 非线性方程求根:root
用于解任意非线性方程组。
示例:解 x³ – 1 = 0
from scipy.optimize import root
f = lambda x: x**3 - 1
sol = root(f, x0=1.0)
print("根 x =", sol.x)
可解出 x ≈ 1。
5. 曲线拟合:curve_fit
基于最小二乘法,拟合自定义函数曲线,广泛用于科学建模。
示例:y = a * e^(b*x) 拟合
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
def model(x, a, b):
return a * np.exp(b * x)
# 生成带噪声数据
x = np.linspace(0, 4, 50)
y = 2.5 * np.exp(1.3 * x) + np.random.normal(0, 4, 50)
# 拟合
popt, _ = curve_fit(model, x, y)
a_fit, b_fit = popt
# 预测值
y_fit = model(x, a_fit, b_fit)
plt.scatter(x, y, label='原始数据')
plt.plot(x, y_fit, 'r-', label='拟合曲线')
plt.legend()
plt.title(f"拟合结果: a={a_fit:.2f}, b={b_fit:.2f}")
plt.show()
6. 示例:抛物线拟合与参数估计
def parabola(x, a, b, c):
return a * x**2 + b * x + c
x_data = np.linspace(-5, 5, 100)
y_data = 2 * x_data**2 + 3 * x_data + 4 + np.random.normal(0, 3, 100)
params, _ = curve_fit(parabola, x_data, y_data)
print("拟合参数 a, b, c =", params)
7. 示例:非线性方程组求解
解:
x² + y² = 1
x² - y = 0
def system(vars):
x, y = vars
return [x**2 + y**2 - 1, x**2 - y]
guess = [1, 0.5]
sol = root(system, guess)
print("解 x, y =", sol.x)
🔗 出站链接与参考资料
📘 官方文档
scipy.optimize
官方文档:
https://docs.scipy.org/doc/scipy/reference/optimize.htmlminimize
函数说明:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
🎓 学习资源
- Optimization with SciPy 教程:
https://realpython.com/python-scipy-optimization/ - 拟合与建模案例实战:
https://scipy-lectures.org/advanced/mathematical_optimization/
发表回复