本文目录导读:

我来给你介绍几个使用SciPy进行积分计算的实用案例。
基础安装与导入
import numpy as np from scipy import integrate import matplotlib.pyplot as plt
一维定积分 - quad
案例1:计算简单函数积分
# 计算 ∫(0 to 2) x² dx
def f(x):
return x**2
result, error = integrate.quad(f, 0, 2)
print(f"∫(0 to 2) x² dx = {result:.6f}")
print(f"估计误差: {error:.2e}")
# 理论值: 2.666667
案例2:三角函数积分
# 计算 ∫(0 to π) sin(x) dx
result, error = integrate.quad(np.sin, 0, np.pi)
print(f"∫(0 to π) sin(x) dx = {result:.6f}")
# 理论值: 2.0
案例3:含参数函数积分
# 计算 ∫(0 to 1) 1/(1+x^a) dx
def f(x, a, b):
return 1 / (1 + x**a) * b
result, error = integrate.quad(f, 0, 1, args=(2, 3))
print(f"∫(0 to 1) 3/(1+x²) dx = {result:.6f}")
广义积分
案例4:无穷积分
# 计算 ∫(0 to ∞) exp(-x²) dx
result, error = integrate.quad(lambda x: np.exp(-x**2), 0, np.inf)
print(f"∫(0 to ∞) exp(-x²) dx = {result:.6f}")
# 理论值: √π/2 ≈ 0.886227
案例5:奇点积分
# 计算 ∫(0 to 1) 1/√x dx (在x=0有奇点)
result, error = integrate.quad(lambda x: 1/np.sqrt(x), 0, 1)
print(f"∫(0 to 1) 1/√x dx = {result:.6f}")
# 理论值: 2.0
多重积分
案例6:二重积分
# 计算 ∫∫(x² + y²) dxdy, 区域: x∈[0,1], y∈[0,1]
def f2(x, y):
return x**2 + y**2
# 方法1:使用nquad
result, error = integrate.nquad(f2, [[0, 1], [0, 1]])
print(f"二重积分结果: {result:.6f}")
# 方法2:使用dblquad
result2, error2 = integrate.dblquad(lambda y, x: x**2 + y**2,
0, 1,
lambda x: 0, lambda x: 1)
print(f"dblquad结果: {result2:.6f}")
案例7:三重积分
# 计算 ∫∫∫(x² + y² + z²) dxdydz
def f3(z, y, x):
return x**2 + y**2 + z**2
result, error = integrate.nquad(f3, [[0, 1], [0, 1], [0, 1]])
print(f"三重积分结果: {result:.6f}")
实际应用案例
案例8:计算概率分布
# 计算正态分布的概率
from scipy.stats import norm
# P(0 ≤ X ≤ 1.96),其中X ~ N(0,1)
def normal_pdf(x):
return norm.pdf(x)
result, error = integrate.quad(normal_pdf, 0, 1.96)
print(f"P(0 ≤ X ≤ 1.96) ≈ {result:.4f}")
print(f"验证: norm.cdf(1.96) - norm.cdf(0) = {norm.cdf(1.96) - norm.cdf(0):.4f}")
案例9:曲线长度计算
# 计算抛物线 y = x² 从 x=0 到 x=2 的曲线长度
# 公式: L = ∫√(1 + (dy/dx)²) dx
def curve_length(x):
dy_dx = 2*x # y = x² 的导数
return np.sqrt(1 + dy_dx**2)
length, error = integrate.quad(curve_length, 0, 2)
print(f"曲线 y = x² 从 x=0 到 x=2 的长度: {length:.4f}")
案例10:物理应用-功的计算
# 计算变力做功: F(x) = 10x², 从 x=0 到 x=3
def force(x):
return 10 * x**2
work, error = integrate.quad(force, 0, 3)
print(f"变力做功: {work:.2f} 焦耳")
数值积分方法对比
# 对比不同积分方法
import time
def test_function(x):
return np.sin(np.exp(x))
# 方法1:quad(自适应)
start = time.time()
result1, error1 = integrate.quad(test_function, 0, 2)
time1 = time.time() - start
# 方法2:Romberg积分
start = time.time()
result2 = integrate.romberg(test_function, 0, 2)
time2 = time.time() - start
print(f"quad: 结果={result1:.6f}, 误差={error1:.2e}, 时间={time1:.4f}s")
print(f"romberg: 结果={result2:.6f}, 时间={time2:.4f}s")
带奇异点的积分处理
# 处理带奇异点的积分
def integrand_with_singularity(x):
# 在x=0有奇点
return 1 / (np.sqrt(x) * (1 + x))
# 使用weight参数处理
result, error = integrate.quad(integrand_with_singularity,
0, 1,
points=[0]) # 指定奇点位置
print(f"带奇点积分结果: {result:.6f}")
常用技巧
# 1. 提高精度
result, error = integrate.quad(np.sin, 0, np.pi,
epsabs=1e-12, # 绝对误差
epsrel=1e-12) # 相对误差
# 2. 设置限制
result, error = integrate.quad(np.sin, 0, np.pi,
limit=1000) # 最大子区间数
# 3. 处理振荡函数
def oscillatory_func(x):
return np.sin(100*x) * np.exp(-x)
result, error = integrate.quad(oscillatory_func, 0, np.inf,
limit=1000)
这些案例涵盖了SciPy积分计算的主要应用场景,根据你的具体需求选择合适的方法:
quad: 一维积分dblquad/tplquad: 二/三重积分nquad: 任意维积分romberg: Romberg积分法fixed_quad: 固定高斯积分
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播