Реализация некоторых численных методов
8.1.4 Модифицированный метод Ньютона (метод секущих)
В этом методе для вычисления производных на каждом шаге поиска используется численное дифференцирование по формуле:
![f'(x)= \frac{\Delta f(x)}{\Delta x}](/sites/default/files/tex_cache/65adf69ad48441bd4d05667005b726ce.png)
Тогда рекуррентная формула метода Ньютона приобретёт вид:
![x_{n+1}&=x_n-\frac{f(x_n)}{f'(x_n)}=x_n-\frac {f(x_n) \Delta x}{\Delta f(x_n)}=\\
&=x_n-\frac {f(x_n) \Delta x}{f(x_n+ \Delta x)-f(x_n)},](/sites/default/files/tex_cache/7946fca02abdb90518ecff1d1ad7d8c1.png)
![\Delta x \approx \varepsilon](/sites/default/files/tex_cache/04599c43da6d89faba3298b4a5f07dcb.png)
Реализация данного метода в Maxima представлено ниже:
(%i1) secant(f,sp,eps):=block([x0,x1,d,y,r], x0:sp[1],x1:sp[2], p:0, r:x1-x0, d:float(subst(x0,x,f)), while abs(r)>eps do ( p:p+1, y:float(subst(x1,x,f)), r:r/(d-y)*y, d:y, x1:x1+r ), x1)$ (%i2) f:exp(-x)-x$ eps:0.000001$ xrez:secant(f,[-2,2],eps)$ print("Решение ",xrez," Невязка ",subst(xrez,x,f))$
![Решение\quad 0.56714329040978\quad Невязка\quad -1.1102230246251565\,{10}^{-16}](/sites/default/files/tex_cache/2430fd30a4a2d0210ef4344571e378d9.png)
Особенности программирования для Maxima, использованные в этом примере, аналогичны приведённым выше в примере, касающемся метода половинного деления.
8.1.5 Метод хорд
Метод основан на замене функции на каждом шаге поиска хордой, пересечение которой с осью
дает приближение корня.
При этом в процессе поиска семейство хорд может строится:
- при фиксированном левом конце хорд, т.е.
, тогда начальная точка
;
- при фиксированном правом конце хорд, т.е.
, тогда начальная точка
.
В результате итерационный процесс схождения к корню реализуется рекуррентной формулой:
![x_{n+1}&=x_n - \frac{f(x_n)}{f(x_n)-f(a)} (x_n - a) \quad \text{для случая а)};
\\
x_{n+1}&=x_n - \frac{f(x_n)}{f(x_n)-f(b)} (x_n - b) \quad \text{для случая б)};](/sites/default/files/tex_cache/ad8de634880400ce184d2f4693437034.png)
Процесс поиска продолжается до тех пор, пока не выполнится условие
![\lvert x_{n+1}-x_n\rvert \le \varepsilon \text{ или } \lvert h\rvert \le
\varepsilon.](/sites/default/files/tex_cache/cabfe3499bd4334b384e43533da417dd.png)
Метод обеспечивает быструю сходимость, если , т.е. хорды фиксируются в том конце интервала
, где знаки функции
и ее кривизны
совпадают.