用fortran编写程序,要求用子程序写出给出范围[a, b]内任意函数f(x) 的最大值 和最小值。要计算的函数应该当做参数传递给子程序,输入参数包括: x范围最小值a, 最大值b, 总数目nstep(x等间距取值),及函数名func。 输出参数包括:最小值f(xmin)和对应的xmin, 最大值f(xmax)和对应的 xmax。 (1) [a, b]=[-1, 3] nstep=50 f(x)=x3-5x 2+5x+2 (2) [a, b]=[-2, 2] nstep=100 f(x)=x3+x2-2x+1。提示:使用内置函数maxval()求数组最大值,使用内置函数maxloc()求数组最大值位置
时间: 2023-07-16 07:12:23 浏览: 168
下面是用Fortran语言编写的程序,实现了给出范围内任意函数的最大值和最小值的计算:
```
PROGRAM find_min_max
IMPLICIT NONE
INTEGER :: nstep, i
REAL :: a, b, xmin, xmax, fmin, fmax, x, dx
REAL, DIMENSION(:), ALLOCATABLE :: x_array, f_array
INTERFACE
REAL FUNCTION func(x)
REAL, INTENT(IN) :: x
END FUNCTION func
END INTERFACE
! 输入参数
WRITE(*,*) "请输入x范围最小值a: "
READ(*,*) a
WRITE(*,*) "请输入x范围最大值b: "
READ(*,*) b
WRITE(*,*) "请输入x的总数目nstep: "
READ(*,*) nstep
! 计算步长
dx = (b - a) / REAL(nstep - 1)
! 分配数组空间
ALLOCATE(x_array(nstep))
ALLOCATE(f_array(nstep))
! 计算x和f(x)的值
DO i = 1, nstep
x_array(i) = a + dx * REAL(i - 1)
f_array(i) = func(x_array(i))
END DO
! 计算最小值和最小值位置
fmin = MAXVAL(f_array)
xmin = x_array(MAXLOC(f_array))
! 计算最大值和最大值位置
fmax = MINVAL(f_array)
xmax = x_array(MINLOC(f_array))
! 输出结果
WRITE(*,*) "最小值为: ", fmin, ",对应的x值为: ", xmin
WRITE(*,*) "最大值为: ", fmax, ",对应的x值为: ", xmax
! 释放数组空间
DEALLOCATE(x_array)
DEALLOCATE(f_array)
END PROGRAM find_min_max
! 定义函数
REAL FUNCTION func(x)
REAL, INTENT(IN) :: x
func = x**3 - 5.0*x**2 + 5.0*x + 2.0
END FUNCTION func
```
上述程序中的func函数是用户自定义的函数,可以根据具体问题进行修改。在程序中,我们先输入x范围最小值a、最大值b和总数目nstep,然后计算出步长dx,根据步长计算x和f(x)的值,再使用内置函数MAXVAL和MAXLOC计算出f(x)的最大值和最大值位置,使用内置函数MINVAL和MINLOC计算出f(x)的最小值和最小值位置,最后输出结果。
阅读全文