Fortran experiment_5 实验报告

2017-05-04  本文已影响0人  tobbby

5.1 ex0501.f90

代码:

program ex0501

implicit none

real (kind=4) :: a, b, res, h, temp, sum0
integer ::  n, i
    a = -2.0
    b = 2.0
    sum0 = 0.0
read(*,*) n

do i=1, n
    h = (b-a)/n
    temp = (a+i*h)**2+sin(a+i*h)
    sum0 = sum0 + temp
end do

res = 0.5*h*(a**2+sin(a)+b**2+sin(b)+2*sum0)
write (*,*) 'The answer is',res

end

结果:

分析:

运行程序,选择n=10,100,100000等等,结果如图所示。可以看到,当n很小的时候不精确,n增大时结果越来越精确。但是当n继续增大的时候,由于变量里面使用的是单精度浮点数,造成运算过程中误差积累,又使结果变得不精确了。以上是个人的猜想,为了检查是否是精度的问题,把代码中的浮点数由单精度改为了双精度,再次运行程序所得结果如图二所示。这里把real (kind=4) :: a, b, res, h, temp, sum0 改为 real (kind=8) :: a, b, res, h, temp, sum0

综上所述,该实验成功的算出了积分,并且验证了了不同的精度对实验结果的影响。n太小时实验精度不够,n太大时由于本身使用的单精度浮点数,这样的精度累计起来的误差也要考虑在内。因此,选择一个合适的精度和n的值是很重要的。

上一篇下一篇

猜你喜欢

热点阅读