📌 目录

  1. scipy.integrate 模块简介
  2. 一维定积分:quad 函数
  3. 多重积分:dblquadtplquad
  4. 积分中的误差与参数说明
  5. 常微分方程(ODE)求解:solve_ivp
  6. 示例:一阶微分方程建模
  7. 示例:二阶系统模拟(如弹簧振子)
  8. 出站链接与参考资料

1. scipy.integrate 模块简介

该模块提供了强大的数值积分与微分方程求解能力,适用于:

  • 计算函数的积分(单变量、多变量)
  • 数值求解微分方程组(ODE)

它广泛用于物理模拟、信号处理、生物建模、天体力学等领域。


2. 一维定积分:quad 函数

quad(func, a, b) 可计算函数 func 在区间 [a, b] 上的积分。

示例:积分 sin(x) 从 0 到 π

import numpy as np
from scipy.integrate import quad

result, error = quad(np.sin, 0, np.pi)
print("积分结果:", result)
print("估计误差:", error)

✅ 输出应接近 2,因为 ∫₀^π sin(x) dx = 2。


3. 多重积分:dblquadtplquad

用于计算二维和三维定积分。

示例:二维积分 ∫∫ xy dxdy over [0,1]x[0,1]

from scipy.integrate import dblquad

func = lambda y, x: x * y
result, error = dblquad(func, 0, 1, lambda x: 0, lambda x: 1)
print("二维积分结果:", result)

函数参数顺序为 (y, x),外积分先对 x,内积分对 y


4. 积分中的误差与参数说明

quaddblquad 的返回值通常包括:

  • 积分结果
  • 误差估计值(计算时的上下界、精度控制);

你还可以传入 epsabsepsrel 控制误差阈值。


5. 常微分方程求解:solve_ivp

该函数支持求解一阶或高阶微分方程系统。

常用参数:

参数说明
fun函数 dy/dt = f(t, y)
t_span时间区间 (t0, tf)
y0初始条件 y(t0)
method数值解法(如 RK45、BDF 等)

6. 示例:一阶微分方程 dy/dt = -2y

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

def dydt(t, y):
    return -2 * y

sol = solve_ivp(dydt, [0, 5], [1], method='RK45', t_eval=np.linspace(0, 5, 100))

plt.plot(sol.t, sol.y[0])
plt.xlabel('t')
plt.ylabel('y')
plt.title('解: dy/dt = -2y')
plt.grid()
plt.show()

预期解为指数衰减 y(t) = e^{-2t}。


7. 示例:二阶微分方程(如弹簧振子)

经典二阶系统 m*d²x/dt² + kx = 0 可转化为一阶系统:

def spring(t, y):
    # y[0] = x, y[1] = dx/dt
    k = 2
    m = 1
    return [y[1], -k/m * y[0]]

# 初始位置 x=1, 速度=0
sol = solve_ivp(spring, [0, 10], [1, 0], t_eval=np.linspace(0, 10, 200))

plt.plot(sol.t, sol.y[0])
plt.title('简谐振动:x(t)')
plt.xlabel('时间 t')
plt.ylabel('位移 x')
plt.grid()
plt.show()

这个模拟的是不带阻尼的简谐振动。


🔗 出站链接与参考资料

📘 官方文档

🎓 深度阅读