黄金分割法fortran
时间: 2023-09-04 12:15:23 浏览: 188
以下是使用黄金分割法求解函数极值的 Fortran 代码示例:
```
program golden_ratio
implicit none
integer :: n, i, iter_max
real :: a, b, x1, x2, f1, f2, tol
real :: gr, inv_gr, d, f3, f4
! 输入参数
a = 0.0
b = 2.0
tol = 1e-6
iter_max = 100
! 黄金比例
gr = (sqrt(5.0) - 1.0) / 2.0
inv_gr = 1.0 - gr
! 初始化
x1 = a + inv_gr * (b - a)
x2 = a + gr * (b - a)
f1 = func(x1)
f2 = func(x2)
d = b - a
! 迭代求解
do i = 1, iter_max
if (f1 < f2) then
b = x2
x2 = x1
f2 = f1
x1 = a + inv_gr * (b - a)
f1 = func(x1)
else
a = x1
x1 = x2
f1 = f2
x2 = a + gr * (b - a)
f2 = func(x2)
end if
d = b - a
if (d < tol) exit
end do
! 输出结果
f3 = func((a + b) / 2.0 - tol)
f4 = func((a + b) / 2.0 + tol)
if (f3 < f4) then
n = 1
else
n = -1
end if
print *, "The minimum value is: ", func((a + b) / 2.0)
print *, "The optimal point is: ", (a + b) / 2.0 + n * tol
end program golden_ratio
! 待求解的函数
real function func(x)
real :: x
func = -x * sin(sqrt(abs(x)))
end function func
```
注意,上述代码中的 `func` 函数为需要求解极值的目标函数,需要根据实际问题进行修改。
阅读全文