Мне нужно решить следующую задачу для моего задания.
"Напишите подпрограмму, которая пытается определить и приблизить максимальные и минимальные значения произвольной функции в заданном диапазоне за определенное количество шагов. Оцениваемая функция должна быть передана подпрограмме в качестве вызывающего аргумента. Используйте основную программу, чтобы передать функцию ? (?) = 5 * Sin (? ^ 2) + ln (? + 2) −? ^ 3 в подпрограммуа затем выполните поиск минимума и максимума в 200 шагах в диапазоне 0≤?≤ 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, но я не получаю никакого результата.