24小时热门版块排行榜    

查看: 318  |  回复: 3
当前主题已经存档。

jianchaoyv2651

铁虫 (初入文坛)

[交流] 【求助】fortran程序出错了

一个计算积分的程序如下:
program integral_1
integer,parameter::nmax=12
real*8,parameter::pio2=6.2831852
external Func
real*8::A=0.0,B=pio2,s
write(*,'(1x,a)') 'integral of Func with 2^(n-1) points'
write(*,'(1x,t7,a,t16,a)')'n','Approx.integral'
do i=1,nmax
   call TRAPZD(Func,A,B,s,i)
   write(*,'(1x,i6,f12.6)')i,s
end do
end program integral_1


Function Func(x)
real*8::x
real*8::Func
    Func=sin(x)**4/x**3
end function Func



subroutine TRAPZD(Func,a,b,s,n)
integer,parameter::k1=selected_int_kind(9)
integer(kind=k1)::tnm
real*8::del,sum,x,a,b,s
integer::n
if(n==1)then
  s=0.5*(b-a)*(Func(a)+Func(b))
  else
  tnm=2**(n-1)
  del=(b-a)/tnm
  x=a
  sum=0.0
  do j=2,tnm
    x=x+del
    sum=sum+Func(x)
  end do
   s=0.5*(Func(a)+Func(b)+2.0*sum)*del
end if
end subroutine TRAPZD
运行结果如下:
integral of Func with 2^(n-1) points
      n        Approx.integral
      1 NaN
      2 NaN
      3 NaN
      4 NaN
      5 NaN
      6 NaN
      7 NaN
      8 NaN
      9 NaN
     10 NaN
     11 NaN
     12 NaN
Press any key to continue
我感觉是计算范围越界,请高手指点!!
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老虎大王

木虫 (著名写手)


jianchaoyv2651(金币+1,VIP+0): 4-13 11:31
呵呵呵。小兄弟,明显的问题。在TRAPZD的最后,有 s=0.5*(Func(a)+Func(b)+2.0*sum)*del,但是a是0啊。    Func=sin(x)**4/x**3,这样,Func(a)就是无穷大喽。。。。

遇到输出NaN,而没有其它出错信息,首先要考虑是不是被零除了。
2楼2009-04-13 10:59:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jianchaoyv

金虫 (小有名气)

★ ★ ★ ★
jianchaoyv2651(金币+4,VIP+0): 4-13 11:31
怎样解决奇异点?
3楼2009-04-13 11:21:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

jianchaoyv2651

铁虫 (初入文坛)

知道了,算法中有反常积分。谢谢了!
4楼2009-04-13 11:32:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 jianchaoyv2651 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见