Function f(x As Double) As Double
f = x * x - x
End Function
Sub метод_Фибоначчи()
Const e = 0.00001
Dim x1 As Double, x2 As Double, x3 As Double, x4 As Double, _
n As Long, i As Long, f2 As Double
x1 = -1.1: x3 = 3.3: n = 1
ReDim ff(n + 1) As Double: ff(1) = 1: ff(2) = 2
Do
n = n + 1: ReDim Preserve ff(n + 1): ff(n + 1) = ff(n) + ff(n - 1)
Loop While ff(n + 1) < (x3 - x1) / e
x2 = x1 + (ff(n - 1) * (x3 - x1) + (-1) ^ n * e) / ff(n): f2 = f(x2): ReDim ff(0)
For i = 1 To n: x4 = x1 - x2 + x3: f4 = f(x4)
If f4 < f2 Then
If x4 < x2 Then x3 = x2 Else x1 = x2
x2 = x4: f2 = f4
Else
If x4 < x2 Then x1 = x4 Else x3 = x4
End If
Next i
Debug.Print x2, f(x2)
End Sub