XMU《计算方法》实验三 龙贝格算法
实验三 龙贝格算法 实验报告
一、代码
clear; fun = inline(input('请输入函数:f(x) = ', 's')); a = input('请输入下界 a = '); b = input('请输入上界 b = '); e = input('请输入误差限 e = '); h = b - a; k = 1; N = 1; T(1, 1) = h / 2 * (fun(a) + fun(b)); while true sum = 0; for i = 1:N sum = sum + fun(a + (i - 1/2) * h); end T(k + 1, 1) = T(k, 1) / 2 + h / 2 * sum; for m = 1:k T(k - m + 1, m + 1) = (4^m * T(k + 1 - m + 1, m - 1 + 1) - T(k - m + 1, m - 1 + 1)) / (4^m - 1); end if abs(T(1, k + 1) - T(1, k - 1 + 1)) <= e break end h = h / 2; k = k + 1; N = N * 2; end format long; disp('积分结果:') I = T(1, k + 1) disp('龙贝格矩阵 T:') for i = 0:k for j = 0:i fprintf('%.15f ', T(i-j+1, j+1)) end fprintf('\n'); end
二、程序运行截图
三、算法说明
龙贝格算法主要是运用理查德外推加速法来计算积分。
公式为:
计算流程如下:
-
令 \(h = b-a, k=1\),计算 \(T_{0, 0} = \frac h2 [f(a) + f(b)]\)。
-
对于第 \(k\) 行,计算边界 \(T_{k, 0} = \frac 12[T_{k-1, 0} + h\sum\limits_{i=1}^{2^{k-1}} f(a + (i - \frac 12)h)]\)。
-
枚举 \(m = 1, 2, \dots, k\),计算
\[T_{k-m, m} = \frac{4^mT_{k+1-m, m-1} - T_{k-m,m-1}}{4^m-1} \] -
若 \(|T_{0, k} - T_{0, k-1}|\leq \varepsilon\),则说明达到误差限,停止计算,答案为 \(T_{0, k}\)。
-
否则,令 \(k = k+1, h = \frac h2\),从第 2 步再次计算。
四、心得体会
龙贝格求积算法是一种数值积分方法,可以有效地计算定积分的近似值。在本次实验中,我使用 Matlab 编写了龙贝格求积算法,并对其进行了测试和优化。
通过编写和测试龙贝格求积算法,我深刻认识到了数值积分方法的重要性。在实际应用中,我们经常需要对复杂函数进行积分,但往往难以找到解析解。此时,数值积分方法可以有效地解决这个问题,为实际问题的求解提供了很大的便利。
通过实验,我进一步加深了对龙贝格求积算法的理解。龙贝格求积算法是一种自适应方法,通过不断加细网格、计算更高阶的近似值,从而提高积分的精度。这种方法的优点是可以自动适应函数的特性,精度相对较高,但计算复杂度也相应较高。
通过对龙贝格求积算法进行优化,我发现在实际应用中,合理选择步长和网格数量是提高算法效率和精度的关键。同时,在处理一些特殊函数时,如存在间断点或振荡的函数,需要采用适当的技巧来处理,以确保算法的稳定性和收敛性。
通过本次实验,我不仅学会了一种新的数值积分方法,更加深了对数值计算的理解,并在实践中获得了不少经验和技巧。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步