Метод Рыбакова

Автор: | 30.01.2017

Программа представлена в книге В. П. Дьяконова “Справочник по алгоритмам и программам на языке Бэйсик для персональных ЭВМ” на стр.88. Эта программа позволяет найти все корни заданного уравнения на заданном отрезке. В алгоритме осуществляется итерационный метод подсчета значения функции при последовательном увеличении X и нахождения разности между соседними вычислениями. Если разность  2-х последовательных значений мала, то корень считается найденным с заданной точностью.

Метод Рыбакова также можно рассматривать как модификацию метода Ньютона при замене  производной F'(xn) некоторым числом M>=F’(g), где g — значение X на отрезке [a, b], при котором F’(X) максимальна. При M>>F’(g) сходимость не нарушается, но замедляется. Метод Рыбакова удобен для поиска всех корней уравнения (4.4) на отрезке[а,b] с помощью следующего алгоритма  [24].

  1. Задаем начальные значения X = X0 = a.
  2. Для каждой   n-й   итерации   (n = 0,   1, 2, …) вычисляем

Xn+1=Xn+Abs(F(Xn))/M   (4.10)

и проверяем условие Xn+1<b.(4.11)

Если (4.11) не выполняется, значит, найдены все корни. В противном случае проверяем выполнение условия (Xn+1-Xn)> е. Если оно выполняется, повторяем цикл вычислений по формуле (4.10). Если это условие не выполнено, значит, Xn+1 есть один из корней и значение Xn+1 выводится на печать. После этого переходим к выполнению следующего пункта.

  1. Задаем начальное приближение к очередному корню Х0 = Xn+1+e и, если Х0<b, идем к выполнению п. 2. Если X0>>b, вычисления считаем законченными.

Число итераций при реализации метода Рыбакова N=(b – а) *М/е. Функция F(х) на отрезке [а, b] может иметь производную с разрывами первого рода.

 

10 PRINT ‘НАХОЖДЕНИЕ ВСЕХ КОРНЕЙ УРАВНЕНИЯ F(X)=0’

15 PRINT ‘В ИНТЕРВАЛЕ ОТ А ДО В МЕТОДОМ РЫБАКОВА’

20 INPUT ‘ВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА А,В’ А,В

25 INPUT ‘ЗАДАЙТЕ ПОГРЕШНОСТЬ НАХОЖДЕНИЯ КОРНЯ Е=‘ Е

30 INPUT ‘ЗАДАЙТЕ ЧИСЛО M=‘M:LETX=A:LETT=0:LETI=0

40 G0SUB 120:LETZ=X+ABS(F)/M

50 IF Z>=B G0T0 115

60 IF Z-X>=E G0T0 90

70 IF T=0 THEN LETW=Z

80 LETX=Z+E:LETV=Z:LETT=l:GOT0 40

90 IF T<>1 THEN 110

100 LETI=I+l:PRINT!2.0!’X’I’=’!F1.9!(Y+W)/2:LETT=0

110 LETX=Z:GOTO 40

115 PRINT’КОНЕЦ ВЫЧИСЛЕНИЙ’: STOP

120 LETF=X^4-13*X^2+36

138 RETURN: END
Пример реализации программы методом Рыбакова в Excel
Метод Ньютона
Метод деления пополам

Попробуем перевести представленной в одной из версий Бейсик в программу на VBA Excel, не меняя практически ничего.

 

Sub Rybakov()

Dim a As Single

Dim b As Single

Dim e As Single

Dim m As Integer

Dim t As Integer

 

MsgBox “НАХОЖДЕНИЕ ВСЕХ КОРНЕЙ УРАВНЕНИЯ F(X)=0″ + vbCr + _

” В ИНТЕРВАЛЕ ОТ А ДО В МЕТОДОМ РЫБАКОВА”

‘A = val(InputBox(“ВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА А “, , -4))

‘B = val(InputBox(“ВВЕДИТЕ ГРАНИЦЫ ИНТЕРВАЛА B”, , 4))

‘E = val(InputBox(“ЗАДАЙТЕ ПОГРЕШНОСТЬ НАХОЖДЕНИЯ КОРНЯ Е “, , 0.001))

‘M =val( InputBox(“ЗАДАЙТЕ ЧИСЛО M “, , 100))

a = -4: b = 4: e = 0.0001: m = 100

x = a: t = 0: i = 0

40  GoTo 120

45  z = x + Abs(F) / m

‘MsgBox z

If z >= b Then GoTo 115

If z – x >= e Then GoTo 90

If t = 0 Then w = z

x = z + e: y = z: t = 1: GoTo 40

90  If  t <> 1 Then GoTo 110

100 i = i + 1: MsgBox “X(” + CStr(i) + “)=” + CStr((y + w) / 2)

t = 0

110 x = z: GoTo 120

115 MsgBox “КОНЕЦ ВЫЧИСЛЕНИЙ”

Exit Sub

120  F = x * x * x * x – 13 * x * x + 36: GoTo 45

End Sub

Пример реализации программы в Excel