无法在此 Fortran 代码中的 f(x) 中输入值?

권태형*_*권태형 2 fortran

    program prob_1
    implicit real*8(a-h, o-z)
    f(x) = x**2-cos(x)
    df(x) = 2*x+sin(x)
    x0 = 0, x1 = 1
    do i = 1, 3
        if (f((x0+x1)/2) < 0)
            x0 = (x0+x1)/2
        else
            x1 = (x0+x1)/2
    end do
    print *,"x = ", x
end program
Run Code Online (Sandbox Code Playgroud)

我刚开始使用 Fortran 90。现在我使用的是 Code::blocks,但我不知道错误存在于哪一行。

我想问题是f((x0+x1)/2) < 0但实际上不知道真正的错误是什么。这里有什么问题?

kva*_*our 5

请注意,语句 functions,即 OP 使用的函数定义,已过时。

B.3.4 语句函数

  1. 语句函数受到许多非直观限制,并且是潜在的错误源,因为它们的语法很容易与赋值语句的语法混淆。
  2. 内部函数是语句函数的一种更通用的形式,并完全取代了它。

来源:F2018标准

此外REAL*8,这种形式的符号或任何内容从未成为任何 Fortran 标准的一部分(请参阅此处):

我建议将代码重写为:

program prob_1
    implicit none
    double precision :: x1,x0
    integer          :: i
    x0 = 0; x1 = 1
    do i = 1, 3
        if (f((x0+x1)/2.0D0) < 0) then
            x0 = (x0+x1)/2.0D0
        else
            x1 = (x0+x1)/2.0D0
        endif
    end do
    print *,"x = ", (x0+x1)/2.0D0
contains
    function f(x)
      double precision, intent(in) :: x
      double precision             :: f
      f = x**2-cos(x)
    end function f
   function df(x)
      double precision, intent(in) :: x
      double precision             :: df
      df = 2.0D0*x+sin(x)
    end function df
end program
Run Code Online (Sandbox Code Playgroud)