计算物理实验报告 数值求积

  • 格式:docx
  • 大小:126.54 KB
  • 文档页数:5

数值求积
一、实验目的
1. 掌握基本数学运算,学会利用梯形法则、Simpson法则等求积方法,包括了解这些公式
得到的结果的精度和误差
2. 熟练运用fortran来解决实际问题
3. 比较梯形法则和Simpson法则的精度
二、实验问题
写一个程序,用梯形法则和Simpson法则求积分

并且考察它对不同h值的精度
三、实验方法
1. 梯形法则
梯形法则是采用梯形来估计曲线下方面积,这等同将被积函数近似为直线函数,被积的部分
近似为梯形,要求得较准确的数值,可以将要求积的区间分成多个小区间。

2. Simpson法则
用过三点f-1,f0,f1的抛物线逼近f(x),对f(x)作泰勒展开
11
3/21/33200(1)33dxttdtxxx





3. 变量代换
令1/31xt,则积分形式作以下变换

四、实验程序
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的精度要更高。