Вопрос №31. VBA-программа для решения нелинейных алгебраических уравнений методом хорд. Привести пример.
1. Проводим хорду через точки М1 и М.
2. Находим значение в т. х.
3. Если f(a)•f(b) < 0, тогда корень принадлежит  [a; x]. Тогда отбрасываем [x, b], т.е. b=x. (Или всё наоборот соответственно).
4. Снова проводим хорду. Находим х и т.д. см. п.3.
Один из концов жёстко закреплён!
Итерационный процесс продолжается до тех пор, пока |f(x)| < eps.
Чему равен х? х – 1ое приближение к корню.
(x-a) / (-f(a)) = (b-x) / f(b)
f(b)*x – f(b)*a = -f(a)*b + f(a)*x
f(b)*x – f(a)*x  = f(b)*a – f(a)*b
x = (f(b)*a-f(a)*b) / (f(b)-f(a)) – формула при жёстко закреплённом конце b.
(Если конец а жёстко закрёплён, то
f(a) / (x – a) = -f(b) / (b – x)
x = (f(a)*b – f(b)*a) / (f(a) – f(b)))
Достоинство метода: метод широко распространён и сходится очень быстро. Этим методом всегда можно найти корень.
Const eps = 1E-4
Function F (x As Double) As Double
F = x – 2 + Sin (1 / x)
End Function
Sub Horda (a As Double, b As Double, x As Double)
Do
   x = (f(b)*a-f(a)*b) / (f(b)-f(a))
   If F(a)*F(x) < 0 Then
    b =x
Else a = x
End If
Loop Until Abs(f(x)) < eps
End Sub
Sub My_Pr()
Dim a As Double, b As Double, x As Double
a = 1.2
b = 2
‘Вызов процедуры
Horda a, b, x
Cells(20, 1) = “корень =”& Format (x, “0.0000”)
End Sub