【急】fortran 运行结果出现NaN
一道fortran程序题,求解一个函数的解,但是结果一直是nan,但是从数学上看这个程序编得没有问题,换一种写法后结果可以出来,但是我很想知道为什么这样写会错(编译没有错...
一道fortran程序题,求解一个函数的解,但是结果一直是nan,但是从数学上看这个程序编得没有问题,换一种写法后结果可以出来,但是我很想知道为什么这样写会错(编译没有错误),望高手解答!源程序如下:
function f(x) result (s)
implicit none
real::x,un1,un2,un,s,eps=1e-10
integer::n
un=1.0
un2=1.0
un1=1.0
s=0.5*cos(3*x)
n=2
do while(abs(un)>eps)
un1=un1*(2*n-1)
un2=un2*(2*n)
un=un1/un2*cos((2*n+1)*x)
s=s+un
n=n+1
enddo
s=s+cos(x)
end function
program main
implicit none
real::x,f
integer::i
character(len=60)::fmt="('x=',f5.3,'f(x)=',f8.4)"
open(1,file='myf2.dat')
open(2,file='myf2.out')
do i=1,7
read(1,*)x
write(*,fmt)x,f(x)
write(2,fmt)x,f(x)
enddo
end
跪谢
我不明白一楼说的会出现无穷。
我在循环处设了范围界定,un的大小被限制住了,这样n也不可能无穷大啊,n不是无穷大,那un1=un1*(2*n-1)也就不应该会无穷啊 展开
function f(x) result (s)
implicit none
real::x,un1,un2,un,s,eps=1e-10
integer::n
un=1.0
un2=1.0
un1=1.0
s=0.5*cos(3*x)
n=2
do while(abs(un)>eps)
un1=un1*(2*n-1)
un2=un2*(2*n)
un=un1/un2*cos((2*n+1)*x)
s=s+un
n=n+1
enddo
s=s+cos(x)
end function
program main
implicit none
real::x,f
integer::i
character(len=60)::fmt="('x=',f5.3,'f(x)=',f8.4)"
open(1,file='myf2.dat')
open(2,file='myf2.out')
do i=1,7
read(1,*)x
write(*,fmt)x,f(x)
write(2,fmt)x,f(x)
enddo
end
跪谢
我不明白一楼说的会出现无穷。
我在循环处设了范围界定,un的大小被限制住了,这样n也不可能无穷大啊,n不是无穷大,那un1=un1*(2*n-1)也就不应该会无穷啊 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询