资源描述
数值求积
一、 实验目的
1. 掌握基本数学运算,学会利用梯形法则、Simpson法则等求积方法,包括了解这些公式得到的结果的精度和误差
2. 熟练运用fortran来解决实际问题
3. 比较梯形法则和Simpson法则的精度
二、 实验问题
写一个程序,用梯形法则和Simpson法则求积分
并且考察它对不同h值的精度
三、 实验方法
1. 梯形法则
梯形法则是采用梯形来估计曲线下方面积,这等同将被积函数近似为直线函数,被积的部分近似为梯形,要求得较准确的数值,可以将要求积的区间分成多个小区间。
2. Simpson法则
用过三点f-1,f0,f1的抛物线逼近f(x),对f(x)作泰勒展开
3. 变量代换
令,则积分形式作以下变换
四、实验程序
1. 梯形法则
program tx1
implicit none
integer :: i
real(8):: h,d,s,f,result1
real(8)::sum1,p,n,l,exact,diff1 !准备基本的变量
n=10000000.0
h=1.0/n !取n值,确定格子间隔h
p=h
s=3/(p**3-3*p**2+3*p)**(1.0/3.0) !将习题的积分进行变量替换,并得到f(h)
l=s
sum1=0
f=2*h*s !得到从0到h的积分,2hf(h)
s=0
i=0
exact=2*3.1415926586/1.7320508 !得到标准值
do i=2,n-1
p=i*h
s=3/(p**3-3*p**2+3*p)**(1.0/3.0)
sum1=sum1+2*s !对除了首尾两项的函数值部分,迭代求和
end do
p=1
s=3/(p**3-3*p**2+3*p)**(1.0/3.0)
sum1=sum1+s+l !加上首尾两项系数为1的函数值
result1=sum1*h/2+f !得到从h到1的积分值,再加上从0到h的积分
diff1=result1-exact !算误差
write(*,*) result1,diff1
end program
2. Simpson法则
program Simpson
implicit none
integer :: i
real(8):: h,d,s,f,result1
real(8)::sum1,p,n,l,g,exact,diff1 !准备基本的变量
n=10000000.0
h=1.0/n !取n值,确定格子间隔h
p=h
s=3/(p**3-3*p**2+3*p)**(1.0/3.0) !将习题的积分进行变量替换,并得到f(h)
sum1=0
f=2*h*s !得到从0到h的积分2hf(h)
result1=0
l=s
sum1=0
s=0
i=0
g=(1.0-h)/n !重新划分h到1区间的h值,即是g
exact=2*3.1415926586/1.7320508 !得到标准值
do i=1,n-1
if(mod(i,2)==0) then
p=i*g+h
s=3/(p**3-3*p**2+3*p)**(1.0/3.0)
sum1=sum1+2*s
else if(mod(i,2)==1) then
p=i*g+h
s=3/(p**3-3*p**2+3*p)**(1.0/3.0)
sum1=sum1+4*s !对除了首尾两项的函数值部分,根据奇偶乘上对应的系数,再迭代求和
end if
end do
p=1
s=3/(p**3-3*p**2+3*p)**(1.0/3.0)
sum1=sum1+s+l !得到从h到1的积分值,再加上从0到h的积分
result1=sum1*h/3+f !得到从h到1的积分值,再加上从0到h的积分
diff1=result1-exact !算误差
write(*,*) result1,diff1
end program
四、实验结果
n
h
梯形法则
Simpson法则
梯形法则误差
Simpson法则误差
100
1*10^(-2)
3.67887965897144
3.71176008997882
5.128065*10^(-2)
8.4161089*10^(-2)
1000
1*10^(-3)
3.63856263141895
3.64166537458228
1.0963631*10^(-2)
1.4066373*10^(-2)
10000
1*10^(-4)
3.6299590420310
3.6302139869159
2.360041*10^(-3)
2.6149859*10^(-3)
100000
1*10^(-5)
3.6281072246129
3.6281203944057
5.082236*10^(-4)
5.2139347*10^(-4)
1000000
1*10^(-6)
3.6277083007578
3.6277069529862
1.092998*10^(-4)
1.0795205*10^(-4)
10000000
1*10^(-7)
3.6276223560345
3.6276216469433
2.335510*10^(-5)
2.2640125*10^(-5)
100000000
1*10^(-8)
3.6276038391810
3.6276036451579
4.838879*10^(-6)
4.6442271*10^(-6)
五、实验结果分析
利用梯形法则和Simpson法则,皆可以得到与标准值近似的值。对于误差的分析,我们可以看到在n值较小,h值较大时,梯形法则的误差较小;当n值较大,h值较小的时候,Simpson法则的误差较小。若我们所需要的值特别精确时,无疑应选择Simpson,此时的n值应尽可能地大,h尽可能小。
六、 实验结论讨论
对于在h值较大时,Simpson法则所得误差较梯形法则大的原因,笔者认为有两点。
第一种可能是在x从0至h处的积分由于取的是近似的2hf(h),或许会有影响。但考虑到两种算法都是如此,其对误差的影响程度应是相同的。
第二种可能是在x趋于h处时,由于h很小,趋于0,这使得函数值较大,且计算机的计算本身便有误差。而在梯形法则和Simpson法则的计算过程中,在最终得到的结果里,f(x)的系数在Simpson的算法里大于在梯形法则的算法(4/3>1),这导致此时Simpson的误差略大。而随着h值的减小,该点所导致的误差在整个计算过程中的影响逐渐降低,逐渐体现出了Simpson的精度要更高。
展开阅读全文