数值分析第四章实验(数值积分)
第一题
实现龙贝格积分算法,取 利用梯形公式,辛普森公式,龙贝格公式计算该积分,并与精确解进行比较
复制import numpy as np
import pandas as pd
from scipy.integrate import quadrature
龙贝格公式
复制def romberg(x_min, x_max, f, tol=1e-6): # 龙贝格公式
h = (x_max - x_min)
x = np.linspace(x_min, x_max, 2)
y = f(x)
data = [[(f(x_min) + f(x_max)) / 2], []]
data[0].append(data[0][0] / 2 + h * f((x_min + x_max) / 2) / 2)
data[1].append((4 * data[0][1] - data[0][0]) / 3)
h /= 2
x = np.linspace(x_min, x_max, 3)
i = 2
while (np.abs(data[i - 1][0] - data[i - 2][0]) > tol):
pow_2_i = 4
x_new = (x[:-1] + x[1:]) / 2
y_new = f(x_new)
h /= 2
x = np.linspace(x_min, x_max, pow_2_i + 1)
data[0].append(data[0][i - 1] / 2 + h * np.sum(y_new))
data.append([])
pow_4_j = 4
for j in range(i):
data[j + 1].append(
pow_4_j * data[j][i - j] / (pow_4_j - 1) - data[j][i - j - 1] / (pow_4_j - 1))
pow_4_j <<= 2
i += 1
pow_2_i <<= 1
return data[-1][0], data
梯形公式
复制def trapezium(x_min, x_max, f, n): # 梯形公式
x = np.linspace(x_min, x_max, n + 1)
y = f(x)
return (x_max - x_min) * (np.sum(y) - (y[0] + y[-1]) / 2) / n
辛普森公式
复制def simpson(x_min, x_max, f, n): # 辛普森公式
w = np.array([4 if i % 2 else 2 for i in range(n + 1)])
w[0] = w[-1] = 1
x = np.linspace(x_min, x_max, n + 1)
y = f(x)
return np.sum(w * y) * (x_max - x_min) / (3 * n)
计算
复制def fun(x):
if type(x) == np.ndarray :
return np.array([fun(t) for t in x])
else:
return np.sin(x) / x if x != 0 else 1
n = [8, 16, 32, 64, 128]
I, _ = romberg(-0.5, 0.5, fun)
I_gauss = quadrature(fun, -0.5, 0.5)[0]
trapezium_values = [trapezium(-0.5, 0.5, fun, t) for t in n]
simpson_values = [simpson(-0.5, 0.5, fun, t) for t in n]
df = pd.DataFrame(data={"梯形公式": trapezium_values, "辛普森公式": simpson_values, "龙贝格公式": [I for t in n],
"自适应高斯": [I_gauss for t in n]})
df
梯形公式 | 辛普森公式 | 龙贝格公式 | 自适应高斯 | |
---|---|---|---|---|
参考
- 李庆扬,王能超,易大义. 数值分析(第5版). 北京: 清华大学出版社, 2008.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!