Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41148
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 95
  • 用 户 组: 普通用户
  • 注册时间: 2015-10-18 15:21
文章分类

全部博文(10)

文章存档

2015年(10)

我的朋友

分类: C/C++

2015-10-24 16:56:06

1.2 数值计算求面积
  (1)梯形法
  (2)Simpson法
  两种方法,分段数目N均为偶数。
  (3)Simpson的3/8公式:N必须是3的倍数
  (4)Bode公式:N必须是4的倍数
chap1b例子:

  下面是梯形法计算程序,

点击(此处)折叠或打开

  1. !ccccccccccccccccccccccccccccccccccccccccccccccccccc!
  2. ! chap1b.f90
  3. ! Numerical quadrature,trapezoidal rule
  4. program main
  5. !ccccccccccccccccccccccccccccccccccccccccccccccccccc!
  6. ! variables:
  7.   implicit none
  8.   real :: h ! step
  9.   integer :: N=10
  10.   real :: x,funx,trap,total
  11.   integer :: counter ! using in do loop
  12.   real :: exact,diff
  13.   exact=exp(1.0)-1.0
  14.   funx=exp(x)
  15.   h=1.0/real(2*N)
  16.   x=h
  17.   total=0.0
  18.   write(*,*)"h=",h

  19.   do counter=1,N,1  !这里多用了一次循环,因为最后一次赋值的x值没有使用,最后一次循环完成后x=21*h
  20.     write(*,*)"x=",x
  21.     trap=h/2.0*(exp(x-h)+2.0*exp(x)+exp(x+h))
  22.     total=total+trap
  23.     x=x+2.0*h
  24.   end do
  25. !
  26.   diff=exact-total
  27.   write(*,*)"exact:",exact,"total:",total,"diff:",diff
  28. !
  29.   stop
  30. !
  31. end program main
  计算结果为:exact:   1.71828175     total:   1.71863997     diff:  -3.58223915E-04
  使用项数更多的公式,例如Bode公式,可能会出现振荡现象。保险的做法还是使用项数少的,梯形法
和Simpson法,只要使得h值足够小便可以保证精度了。
阅读(684) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~