# 导入numpy库,用于进行科学计算
import numpy as np
# 导入math库,用于数学函数的计算
import math
# 导入pandas库,用于数据处理和分析
import pandas as pd
# 导入scipy库,用于科学计算和工程技术
import scipy
# 导入sympy库,用于符号数学计算
import sympy as syp
# 导入matplotlib库,用于数据可视化
import matplotlib.pyplot as plt
对于一个函数求解其积分问题,最直接的方式即是采用Newton-Leibniz公式,即:
∫ a b f ( x ) d x = F ( b ) − F ( a ) \int_a^b f(x)dx=F(b) - F(a) ∫abf(x)dx=F(b)−F(a)
其中, F ( x ) F(x) F(x)为 f ( x ) f(x) f(x)的原函数
而在某些情况下原函数 F ( x ) F(x) F(x)很难求出,这时我们需要采用机械求积的方法来对函数进行积分求解
def f(x):
return np.exp(x).astype(np.float64)
a,b = -1,1
N = 101
x = np.linspace(a,b,N)
y = f(x)
plt.plot(x,y)
plt.legend(['f(x) = exp(x)'])
数值积分
概述
数值积分是数值分析领域的一个重要部分,它旨在近似计算函数在特定区间上的定积分。当被积函数没有显式积分形式或难以求解时,数值积分方法显得尤为重要。这些方法通过将积分区间分割成多个小区间,然后对每个小区间上的函数值进行某种形式的近似求和,从而得到整个区间上积分的近似值。
基本原理
对于某一个被积函数 f ( x ) f(x) f(x)而言,其在区间 [ a , b ] [a,b] [a,b]上的数值积分的的原理为:
∫ a b f ( x ) d x = ∑ i = 1 n A i f ( x i ) \int_{a}^{b} f(x)dx = \sum_{i=1}^{n} A_i f(x_i) ∫abf(x)dx=i=1∑nAif(xi),
即将 f ( x ) f(x) f(x)转换为某些个求积节点 { x 1 , ⋯ , x n } \{x_1,\cdots,x_n\} {
x1,⋯,xn}上的加权和,其中 A i A_i Ai为每个 x i x_i xi的求积权重,仅与求积节点的选取相关.
常用方法
- 中点矩形法(Midpoint Rule)
原理:在每个小区间中取中点的函数值作为该区间的代表值。
公式: ∫ a b f ( x ) d x ≈ Δ x ∑ i = 1 n f ( x i − 1 + x i 2 ) \int_{a}^{b} f(x)dx \approx \Delta x \sum_{i=1}^{n} f\left(\frac{x_{i-1}+x_i}{2}\right) ∫abf(x)dx≈Δxi=1∑nf(2xi−1+xi)
优点:通常比左右矩形法更准确。 - 梯形法则(Trapezoidal Rule)
原理:假设函数在每个小区间内线性变化,即用梯形的面积来近似区间下的面积。
公式: ∫ a b f ( x ) d x ≈ Δ x 2 ∑ i = 1 n [ f ( x i − 1 ) + f ( x i ) ] \int_{a}^{b} f(x)dx \approx \frac{\Delta x}{2} \sum_{i=1}^{n} [f(x_{i-1}) + f(x_{i})] ∫abf(x)dx≈2Δxi=1∑n[f(xi−1)+f(xi)]
优点:综合了左右端点信息,精度优于单一矩形法。 - 辛普森法则(Simpson’s Rule)
原理:适用于偶数个小区间的情况,假设函数在每个小区间内可由二次多项式近似。
公式: ∫ a b f ( x ) d x ≈ Δ x 3 ∑ i = 1 n / 2 [ f ( x 2 i − 2 ) + 4 f ( x 2 i − 1 ) + f ( x 2 i ) ] \int_{a}^{b} f(x)dx \approx \frac{\Delta x}{3} \sum_{i=1}^{n/2} [f(x_{2i-2}) + 4f(x_{2i-1}) + f(x_{2i})] ∫abf(x)dx≈3Δxi