Метод секущей

редактировать

Метод поиска корней Первые две итерации метода секанса. Красная кривая показывает функцию f, а синие линии - секущие. В этом конкретном случае метод секанса не будет сходиться к видимому корню.

В численном анализе метод секанса представляет собой алгоритм поиска корня который использует последовательность корней из секущих линий для лучшего приближения корня функции f. Метод секущей можно рассматривать как конечно-разностную аппроксимацию метода Ньютона. Однако этот метод был разработан независимо от метода Ньютона и предшествует ему более чем на 3000 лет.

Содержание
  • 1 Метод
  • 2 Вывод метода
  • 3 Сходимость
  • 4 Сравнение с другими корневыми методы поиска
  • 5 Обобщения
  • 6 Вычислительный пример
  • 7 Примечания
  • 8 См. также
  • 9 Ссылки
  • 10 Внешние ссылки
Метод

Метод секущей определяется рекуррентным соотношением

xn = xn - 1 - f (xn - 1) xn - 1 - xn - 2 f (xn - 1) - f (xn - 2) = xn - 2 f (xn - 1) - xn - 1 f (xn - 2) f (xn - 1) - f (xn - 2). {\ displaystyle x_ {n} = x_ {n-1} -f (x_ {n-1}) {\ frac {x_ {n-1} -x_ {n-2}} {f (x_ {n-1) }) - f (x_ {n-2})}} = {\ frac {x_ {n-2} f (x_ {n-1}) - x_ {n-1} f (x_ {n-2}) } {f (x_ {n-1}) - f (x_ {n-2})}}.}{\ displaystyle x_ {n} = x_ {n-1} -f (x_ {n- 1}) {\ frac {x_ {n-1} -x_ {n-2}} {f (x_ {n-1}) - f (x_ {n-2})}} = {\ frac {x_ { n-2} f (x_ {n-1}) - x_ {n-1} f (x_ {n-2})} {f (x_ {n-1}) - f (x_ {n-2}) }}.}

Как видно из рекуррентного соотношения, секущий метод требует двух начальных значений, x 0 и x 1, которые в идеале следует выбирать так, чтобы они располагались близко к корню.

Вывод метода

Начиная с начальных значений x 0 и x 1, строим линию через точки (x 0, f (x 0)) и (x 1, f (x 1)), как показано на рисунке выше. В форме углового пересечения уравнение этой прямой имеет вид

y = f (x 1) - f (x 0) x 1 - x 0 (x - x 1) + f (x 1). {\ displaystyle y = {\ frac {f (x_ {1}) - f (x_ {0})} {x_ {1} -x_ {0}}} (x-x_ {1}) + f (x_ { 1}).}{\ displaystyle y = {\ frac {f (x_ {1}) - f (x_ {0})} {x_ {1} -x_ {0}} } (х-х_ {1}) + е (х_ {1}).}

Корень этой линейной функции, то есть значение x такое, что y = 0 равно

x = x 1 - f (x 1) x 1 - x 0 f (x 1) - f (x 0). {\ displaystyle x = x_ {1} -f (x_ {1}) {\ frac {x_ {1} -x_ {0}} {f (x_ {1}) - f (x_ {0})}}. }{\ displaystyle x = x_ {1} -f (x_ {1}) {\ frac {x_ {1} -x_ {0}} {f ( x_ {1}) - f (x_ {0})}}.}

Затем мы используем это новое значение x как x 2 и повторяем процесс, используя x 1 и x 2 вместо x 0 и x 1. Мы продолжаем этот процесс, решая для x 3, x 4 и т. Д., Пока не достигнем достаточно высокого уровня точности (достаточно малая разница между x n и x n − 1):

x 2 = x 1 - f (x 1) x 1 - x 0 f (x 1) - f (x 0), x 3 = x 2 - f (x 2) x 2 - x 1 f (x 2) - f (x 1), ⋮ xn = xn - 1 - f (xn - 1) xn - 1 - xn - 2 f (xn - 1) - f (xn - 2). {\ displaystyle {\ begin {align} x_ {2} = x_ {1} -f (x_ {1}) {\ frac {x_ {1} -x_ {0}} {f (x_ {1}) - f (x_ {0})}}, \\ [6pt] x_ {3} = x_ {2} -f (x_ {2}) {\ frac {x_ {2} -x_ {1}} {f ( x_ {2}) - f (x_ {1})}}, \\ [6pt] \, \, \, \ vdots \\ [6pt] x_ {n} = x_ {n-1} -f ( x_ {n-1}) {\ frac {x_ {n-1} -x_ {n-2}} {f (x_ {n-1}) - f (x_ {n-2})}}. \ end {align}}}{\ displaystyle {\ begin {align} x_ {2} = x_ {1} -f (x_ {1}) {\ frac {x_ {1} -x_ {0}} {f (x_ {1}) - f (x_ {0})}}, \\ [6pt] x_ {3} = x_ {2} -f (x_ {2}) {\ frac {x_ {2} -x_ {1}} {f (x_ {2}) - f (x_ {1})}}, \\ [6pt] \, \, \, \ vdots \\ [6pt] x_ {n} = x_ {n-1} -f (x_ {n-1}) {\ frac {x_ {n- 1} -x_ {n-2}} {f (x_ {n-1}) - f (x_ {n-2})}}. \ End {align}}}
Сходимость

Итерации xn {\ displaystyle x_ {n}}x_ {n} метода секущей сходятся к корню из f {\ displaystyle f}f , если исходные значения x 0 {\ displaystyle x_ {0}}x_ {0} и x 1 {\ displaystyle x_ {1}}x_ {1} достаточно близки к корню. Порядок сходимости равен φ, где

φ = 1 + 5 2 ≈ 1.618 {\ displaystyle \ varphi = {\ frac {1 + {\ sqrt {5}}} {2}} \ приблизительно 1,618}{\ displaystyle \ varphi = {\ frac {1 + {\ sqrt {5}}} {2}} \ приблизительно 1,618}

- это золотое сечение. В частности, сходимость суперлинейная, но не совсем квадратичная.

. Этот результат справедлив только при некоторых технических условиях, а именно, что f {\ displaystyle f}f дважды непрерывно дифференцируем и Рассматриваемый корень должен быть простым (т.е. с кратностью 1).

Если начальные значения недостаточно близки к корню, то нет гарантии, что метод секущей сходится. Не существует общего определения термина «достаточно близко», но критерий имеет отношение к тому, насколько «волнистой» функция находится на интервале [x 0, x 1] {\ displaystyle [x_ {0}, x_ {1] }]}[x_ {0}, x_ {1}] . Например, если f {\ displaystyle f}f дифференцируемо в этом интервале, и есть точка, где f ′ = 0 {\ displaystyle f '= 0}{\displaystyle f'=0}на интервале, то алгоритм может не сойтись.

Сравнение с другими методами поиска корня

Метод секанса не требует, чтобы корень оставался заключенным в квадратные скобки, как это делает метод деления пополам, и, следовательно, он не всегда сходится. Метод ложного положения (или regula falsi) использует ту же формулу, что и метод секущей. Однако формула не применяется к xn - 1 {\ displaystyle x_ {n-1}}x_ {n-1} и xn - 2 {\ displaystyle x_ {n-2}}x_ {n-2} , как метод секущей, но на xn - 1 {\ displaystyle x_ {n-1}}x_ {n-1} и на последней итерации xk {\ displaystyle x_ {k} }x_ {k } такие, что f (xk) {\ displaystyle f (x_ {k})}f (x_ {k}) и f (xn - 1) {\ displaystyle f (x_ { n-1})}f (x_ {n-1}) иметь другой знак. Это означает, что метод ложного положения всегда сходится.

Повторяющаяся формула метода секущих может быть получена из формулы для метода Ньютона

xn = xn - 1 - f (xn - 1) f ′ (xn - 1) {\ displaystyle x_ {n} = x_ {n-1} - {\ frac {f (x_ {n-1})} {f '(x_ {n-1})}}}{\displaystyle x_{n}=x_{n-1}-{\frac {f(x_{n-1})}{f'(x_{n-1})}}}

с помощью конечного -разность приближение

f ′ (xn - 1) ≈ f (xn - 1) - f (xn - 2) xn - 1 - xn - 2. {\ displaystyle f '(x_ {n-1}) \ приблизительно {\ frac {f (x_ {n-1}) - f (x_ {n-2})} {x_ {n-1} -x_ {n -2}}}.}{\displaystyle f'(x_{n-1})\approx {\frac {f(x_{n-1})-f(x_{n-2})}{x_{n-1}-x_{n-2}}}.}

Метод секущей можно интерпретировать как метод, в котором производная заменяется приближением и, таким образом, является квазиньютоновским методом.

Если мы сравним метод Ньютона с секущей, мы видим, что метод Ньютона сходится быстрее (порядок 2 против φ ≈ 1,6). Однако метод Ньютона требует оценки как f {\ displaystyle f}f , так и его производной f ′ {\ displaystyle f '}f'на каждом шаге, в то время как Метод секущей требует только оценки f {\ displaystyle f}f . Следовательно, на практике метод секущей иногда может быть быстрее. Например, если мы предположим, что вычисление f {\ displaystyle f}f занимает столько же времени, сколько и вычисление его производной, и мы пренебрегаем всеми другими затратами, мы можем выполнить два шага метода секущей (уменьшение логарифм ошибки с коэффициентом φ ≈ 2,6) за ту же стоимость, что и один шаг метода Ньютона (уменьшение логарифма ошибки в 2 раза), поэтому метод секущей работает быстрее. Если, однако, мы рассматриваем параллельную обработку для вычисления производной, метод Ньютона доказывает свою ценность, будучи более быстрым во времени, хотя при этом затрачивая больше шагов.

Обобщения

Метод Бройдена - это обобщение метода секущих более чем на одно измерение.

На следующем графике функция f показана красным цветом, а последняя секущая линия - жирным синим. На графике пересечение секущей линии по оси x кажется хорошим приближением к корню из f.

Результат примера кода метода секущей. svg
Вычислительный пример

Ниже метод секущей реализован на языке программирования Python.

Затем он применяется для нахождения корня функции f (x) = x - 612 с начальными точками x 0 = 10 {\ displaystyle x_ {0} = 10}{\ displaystyle x_ {0} = 10} и x 1 = 30 {\ displaystyle x_ {1} = 30}{\ displaystyle x_ {1} = 30}

def secant_method (f, x0, x1, iterations): "" "Возвращает корень, вычисленный с использованием метода секанса." "" для i в диапазоне (итераций): x2 = x1 - f (x1) * (x1 - x0) / float (f (x1) - f (x0)) x0, x1 = x1, x2 return x2 def f_example (x): return x ** 2 - 612 root = secant_method (f_example, 10, 30, 5) print ("Root: {}". format (root)) # Root: 24.738633748750722
Примечания
См. также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-07 07:54:38
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте