数值积分计算方法:复合梯形公式、复合辛普森公式和龙贝格算法
1. 定义函数 fun41(x)
function y=fun41(x)
y=sqrt(x).*log(x);
该函数输入一个实数 x,输出 sqrt(x)*log(x) 的值。
2. 复合梯形公式和复合辛普森公式
clear;
clc;
h=0.001; %h为步长,可分别令h=1,0.1,0.01,0.001
n=1/h;
t=0;
for i=1:n-1
t=t+fun41(i*h);
end
T=h/2*(0+2*t+fun41(1));
T=vpa(T,10)
% 以上为复合梯形公式
% 以下为复合辛普森公式
s1=0;
s2=0;
for i=0:n-1
s1=s1+fun41(h/2+i*h);
end
for i=1:n-1
s2=s2+fun41(i*h);
end
S=h/6*(0+4*s1+2*s2+fun41(1));
S=vpa(S,10)
代码首先清空命令窗口和工作空间,然后定义步长 h 为 0.001,计算 n=1/h,t 初始值为 0。
接着进行 for 循环,从 1 到 n-1,每次计算 fun41(i*h),并加到 t 上。
最后根据复合梯形公式计算数值积分 T,并使用 vpa 函数保留 10 位有效数字。
接下来采用复合辛普森公式计算数值积分 S,其中 s1 和 s2 为累加和,依次计算,最后计算 S,并使用 vpa 函数保留 10 位有效数字。
3. 龙贝格算法
clear;
clc;
m=16;
h=1;
T(1)=(0+fun41(1))*h/2
for i=2:m
h=h/2;
n=1/h;
t=0;
for j=1:2:n-1
t=t+fun41(j*h);
end
T(i)=T(i-1)/2+h*t;%梯形公式
end
for i=1:m-1
for j=m:i+1
T(j)=4^i/(4^i-1)*T(j)-1/(4^i-1)*T(j-1);
%通过不断的迭代求得T(j),即T表的对角线上的元素。
end
end
vpa(T(m),10)
代码首先清空命令窗口和工作空间,然后定义 m=16,h=1,T(1)=(0+fun41(1))*h/2。
接下来进行 for 循环,从 2 到 m,每次将 h 除以 2,计算 n=1/h,t 初始值为 0。
接着进行 for 循环,从 1 到 n-1,每次计算 fun41(j*h),并加到 t 上。
最后根据梯形公式计算 T(i)。
接下来进行另一个 for 循环,从 1 到 m-1,每次进行嵌套循环,从 j=m 到 i+1,每次计算 T(j) 的值,并不断迭代求得 T(j)。
最后使用 vpa 函数保留 10 位有效数字,输出 T(m) 的值。这是使用龙贝格算法计算数值积分的过程。
注意:
- 代码中的
vpa(T, 10)和vpa(S, 10)使用了 MATLAB 的vpa函数来计算数值积分结果的 10 位有效数字。 - 代码中使用的
fun41函数可以根据需要进行修改,以计算其他函数的数值积分。 - 龙贝格算法的代码实现需要根据实际情况进行调整,例如 m 值的选择以及循环的范围。
原文地址: https://www.cveoy.top/t/topic/n1Lj 著作权归作者所有。请勿转载和采集!