将函数传递给子例程

时间:2019-11-03 02:42:20

标签: function fortran max min subroutine

我需要为我的分配解决以下问题。

“编写一个子例程,尝试以一定数量的步长查找并近似给定范围内任意函数的最大值和最小值。所求值的函数应作为调用参数传递给子例程。使用主程序将函数?(?)= 5 * Sin(?^ 2)+ ln(?+ 2)-?^ 3传递给子例程,然后在0≤?范围内以200步搜索最小值和最大值≤2。子例程应具有以下输出参数:最小值,最小值的位置,最大值和最大值的位置。”

我正在尝试以下代码:

program a2q4
    implicit none
    real::f
    Call Max_Min(f)
end program

function f(x)
    implicit none
    real::f,x
    f=5*sin(x**2)+log(x+2)-x**3
end function f

subroutine Max_Min(g)
    implicit none
    integer::a,b,stp,i
    real::g,ma,mi,malc,milc,h
    open(unit=241,file='in_a2q4.txt')
    open(unit=240,file='ot_a2q4.txt')
    read(241,*)a,b,stp
    h=(b-a)/200.0
    ma=0.0
    malc=0.0
    mi=0.0
    milc=0.0
    do i=a,b,h
        if(g(i)>ma)then
            ma=g(i)
            malc=i
        else
        end if
        if(g(i)<mi)then
            mi=g(i)
            milc=i
        else
        end if
    end do
    write(240,'(a,F8.4,a,F4.2)')"Minimum value=",mi," for x=",milc
    write(240,'(a,F8.4,a,F4.2)')"Maximum value=",ma," for x=",malc
end subroutine

输入文件中包含0 2 200,但没有任何结果。

0 个答案:

没有答案