我需要为我的分配解决以下问题。
“编写一个子例程,尝试以一定数量的步长查找并近似给定范围内任意函数的最大值和最小值。所求值的函数应作为调用参数传递给子例程。使用主程序将函数?(?)= 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,但没有任何结果。