这是我用于Newton-Raphson方法的Fortran 90程序。但是,它没有正确编译并在geany
中发出此警告newraph.f90:18.17:
real function f(x)
1
Warning: Unused dummy argument 'x' at (1)
newraph.f90:18.15:
real function f(x)
1
Warning: Return value of function 'f' at (1) not set
Compilation finished successfully.
program newton_raphson
implicit none
real,parameter::error=1e-4
integer::i
real::xo,x1,f,fd
read*,xo
i=1
10 x1=xo-(f(xo)/fd(xo))
if(abs((x1-xo)/x1)<error) then
print*,"root is", x1,"no. of iteration=",i
else
xo=x1
i=i+1
goto 10
endif
end
real function f(x)
real::x
end
real function fd(x)
real::x
fd=3*x**2-1
end
答案 0 :(得分:2)
你只有两个警告。两者都只是通知您函数f
什么都不做:
real function f(x)
real::x
end
更改它以返回有用的内容,警告将消失。
real function f(x)
real, intent(in) :: x
f = x**2
end function
然后更改fd
以返回f
的衍生产品,例如fd = 2*x
。
除此之外,尝试使用一些不错的编程风格。使用缩进,尽可能使用循环而不是go to
。使用垂直间距(空行)。另外,为了清晰起见,最好使用end function
,end subroutine
和end program
。