在Fortran-Newton-Raphson中使用函数块

在Fortran-Newton-Raphson中使用函数块,fortran,Fortran,我正在尝试为Newton Raphson应用功能块,我有点迷路了。假设我的脚本要求用户输入一个初始的X,因为我已经硬编码了这个等式。我的输出文件似乎只是声明了零,而不是正确的输出,列出了它的收敛性。我认为我的书面陈述是错误的还是太早了?感谢您的帮助 另一方面,是否可以像在其他语言中一样向用户询问等式和初始值 program main implicit none real :: x0, xn, err write(*,*) "Please enter an initial gues

我正在尝试为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

在您的代码中,您从不调用函数f,那么您希望您的程序如何工作呢


即使调用了f,在函数f中声明和设置的变量xn和err也是该函数的局部变量,它们不会更改主程序中x0和xn的值。使用子例程将多个值传递回主程序。

正如@Fortranner所述,您需要调用该函数。如果将子程序和函数放在一个模块中,并从调用程序中使用该模块,您将发现Fortran编程更容易。有关此组织的示例,请参见

Re是否也可以向用户询问方程式和初始值?这是一个非常普遍的问题。如果你的方程总是多项式,你可以很容易地向用户询问系数的值。或者你可以有一个方程式列表来选择。但是,在运行时输入一个完全任意的等式就像要求用Fortran编写脚本语言一样——这绝对不是小事

我建议在开发程序时,使用编译器的所有可用警告和检查选项。例如,使用这些选项gfortran指出,您没有在函数f中定义f的返回值。这表明主程序和函数之间的通信存在问题