1、数值求积 一、 实验目的 1. 掌握基本数学运算,学会利用梯形法则、Simpson法则等求积方法,包括了解这些公式得到的结果的精度和误差 2. 熟练运用fortran来解决实际问题 3. 比较梯形法则和Simpson法则的精度 二、 实验问题 写一个程序,用梯形法则和Simpson法则求积分 并且考察它对不同h值的精度 三、 实验方法 1. 梯形法则 梯形法则是采用梯形来估计曲线下方面积,这等同将被积函数近似为直线函数,被积的部分近似为梯形,要求得较准确的数值,可以将要求积的区间分成多个小区间。 2. Sim
2、pson法则 用过三点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
3、 !取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)
4、 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)
5、 sum1=sum1+s+l !加上首尾两项系数为1的函数值 result1=sum1*h/2+f !得到从h到1的积分值,再加上从0到h的积分 diff1=result1-exact !算误差 write(*,*) result1,diff1 end program 2. Simpso
6、n法则 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)
7、 !将习题的积分进行变量替换,并得到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
8、 !得到标准值 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 !对除了首尾两
9、项的函数值部分,根据奇偶乘上对应的系数,再迭代求和 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
10、 !算误差 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
11、) 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
12、 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法则的误差较小。若我们所需要的值特别精确时,无
13、疑应选择Simpson,此时的n值应尽可能地大,h尽可能小。 六、 实验结论讨论 对于在h值较大时,Simpson法则所得误差较梯形法则大的原因,笔者认为有两点。 第一种可能是在x从0至h处的积分由于取的是近似的2hf(h),或许会有影响。但考虑到两种算法都是如此,其对误差的影响程度应是相同的。 第二种可能是在x趋于h处时,由于h很小,趋于0,这使得函数值较大,且计算机的计算本身便有误差。而在梯形法则和Simpson法则的计算过程中,在最终得到的结果里,f(x)的系数在Simpson的算法里大于在梯形法则的算法(4/3>1),这导致此时Simpson的误差略大。而随着h值的减小,该点所导致的误差在整个计算过程中的影响逐渐降低,逐渐体现出了Simpson的精度要更高。






