Python实现切比雪夫求积法计算e^(-x²)积分结果偏差求助
切比雪夫求积法代码错误分析与修正
你的代码存在三个核心问题,导致结果偏离正确值:
- 节点计算逻辑错误:你通过对称复制生成节点,且用
cos(arcsin(l/r))*r计算的实际是sqrt(r² - l²),完全不符合切比雪夫求积的节点定义。切比雪夫节点应基于余弦函数的特定角度值生成,再映射到目标区间。 - 权重应用错误:切比雪夫求积的权重不是简单的
(b-a)/n,而是需要结合π和区间长度的特定系数。 - 节点重复计算:循环中
i>n/2时的对称处理导致节点被重复累加,直接拉高了结果。
修正后的代码
import numpy as np def f(x): return np.exp(-x**2) def chebyshev(a, b, n): # 生成[-1,1]区间的切比雪夫节点(n个) k = np.arange(1, n+1) x_cheb = np.cos((2*k - 1) * np.pi / (2*n)) # 将节点映射到[a, b]区间 t = (a + b)/2 + (b - a)/2 * x_cheb # 计算积分近似值,应用切比雪夫求积的标准权重 integral = (np.pi * (b - a) / (2*n)) * np.sum(f(t)) return integral print(chebyshev(0, 1, 1000))
关键说明
- 节点生成:切比雪夫求积的节点公式为
cos((2k-1)π/(2n))(k从1到n),这是[-1,1]区间上的标准切比雪夫第一类节点,能最大化积分精度。 - 区间映射:通过线性变换将[-1,1]的节点转换到目标区间[a,b],保证节点分布符合切比雪夫的最优特性。
- 权重计算:积分结果的权重系数为
π*(b-a)/(2n),这是切比雪夫求积法针对区间[a,b]的标准权重,替代了你代码中错误的h权重。
运行修正后的代码,n=1000时结果约为0.74682413,与正确值一致。
内容的提问来源于stack exchange,提问作者Fredrik Spalder
相关产品推荐
相关产品推荐

