我正在尝试为Newton Raphson应用功能块而且有点迷失。我的脚本假设要求用户输入初始X,因为我已经对方程进行了硬编码。我的输出文件似乎只是声明零而不是正确的输出列出它的收敛。我假设我的写作陈述错误或过早?任何帮助表示赞赏。
旁注...是否可以像其他语言一样询问用户方程式和初始值?
program main
implicit none
real :: x0, xn, err
write(*,*) "Please enter an initial guess X0."
read(*,*) x0
write(*,*) "x = ", xn, " error = ", err
end program main
real function f(x0)
real :: x0, xn,
do
xn = x0 - ( (x0**3 - (x0) - 1) / ( ( 3*(x0**2) )-1) )
err = 100*abs( (xn-x0)/x0 )
x0 = xn
if (err < 0.000001)exit
return
end do
end function
答案 0 :(得分:1)
在您的代码中,您永远不会调用函数f,那么您希望程序如何工作?
即使您调用了f,在函数f中声明和设置的变量xn和err也是该函数的本地变量,并且它们不会更改主程序中x0和xn的值。使用子例程将多个值传递回主程序。
答案 1 :(得分:0)
正如@Fortranner所说,你需要调用该函数。如果将子程序和函数放在模块中,并且use
来自调用程序的模块,您将发现Fortran编程更容易。有关此组织的示例,请参阅Computing the cross product of two vectors in Fortran 90。
Re“是否可以向用户询问方程式和初始值”?这是一个非常普遍的问题。如果等式总是多项式,则可以轻松地向用户询问系数的值。或者你可以有一个方程列表供选择。但是在运行时输入一个完全随意的等式就像要求在Fortran中编写脚本语言 - 这绝对是非平凡的。
我建议在开发一个程序时使用所有可用的警告并检查编译器的选项。例如,使用此类选项gfortran指出您没有在函数f
中定义f
的返回值。这暗示主程序和功能之间的通信存在问题。