Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
непрмо_подготовка к экзую.docx
Скачиваний:
0
Добавлен:
24.01.2026
Размер:
6.31 Mб
Скачать

15. Метод обратной параболической интерполяции. Запрограммировать, показать работу на функциях.

Вопросы по общему принципу метода

  1. Что аппроксимирует парабола в этом методе? → В отличие от обычного Мюллера, аппроксимируется функция обратная к производной x=(f′)−1(y).

  2. Почему аппроксимация ведётся через обратную функцию производной? → Чтобы находить точку xn+1​ напрямую по формуле P(0), избегая квадратного корня и знаменателя как в Мюллере.

  3. Что даёт точка пересечения параболы P(y) с осью абсцисс? → Следующее приближение xn+1​ к корню производной, то есть критической точке функции.

Вопросы по формулам и вычислениям

  1. Что означает fn′,fn−1′,fn−2’ в формулах? → Значения производной f′(x)f'(x)f′(x) в трёх последних итерациях: xn,xn−1,xn−2.

  2. Что делают множители вида (y−fn−1′)(y−fn′)/((fn−2′−fn−1′)(fn−2′−fn′)) в полиноме Лагранжа? → Они строят интерполяционный полином Лагранжа через три точки для обратной функции.

  3. Почему на каждой итерации берут y=0 для вычисления xn+1​? → Потому что мы ищем корень производной f′(x)=0, а аппроксимирует обратную функцию x(y).

Вопросы по логике работы алгоритма

  1. Сколько предыдущих точек нужно для построения полинома? → Три точки: xn,xn−1,xn−2

  2. Что происходит, если одна из разделённых разностей равна нулю? → Могут возникнуть деления на ноль, шаг станет неопределённым → метод может “сломаться”.

  3. Почему метод называют «обратная параболическая интерполяция»? → Потому что строится парабола обратной функции x=(f′)−1(y)x = (f')^{-1}(y)x=(f′)−1(y), а не самой f(x)f(x)f(x).

  4. В чём отличие от обычного метода Мюллера?

    • Нет квадратного корня в знаменателе

    • Нет выбора между d+​ и d−​

    • Шаг вычисляется прямо через P(0)

Вопросы по сходимости и численным особенностям

  1. Какая сходимость у метода обратной параболической интерполяции по сравнению с обычным Мюллером? → Сходимость немного медленнее метода Ньютона, но стабильнее, так как нет риска комплексного шага.

  2. Что произойдёт, если шаг станет очень большим или отрицательным? → Итерации могут выйти за границы интервала, нужно контролировать шаг или ограничивать интервал поиска.

  3. Почему метод можно использовать для максимума и минимума? → Потому что он ищет корень производной; проверка второй производной определяет максимум или минимум.

  4. Какие преимущества у метода обратной параболической интерполяции?

    • Нет квадратного корня → устойчивее

    • Простая формула шага xn+1​=P(0)

    • Легко программировать

  5. Какие недостатки?

    • Нужно хранить три предыдущие точки

    • Деление на разности производных → возможны численные ошибки

    • Локальный метод → может сходиться к ближайшему критическому пункту

5️⃣ Вопросы для практического понимания

  1. Что хранить в массиве итераций для анализа сходимости? → Все xnx_nxn​ и соответствующие f(xn).

  2. Как адаптировать метод для многомодальной функции? → Запускать с разных интервалов и выбирать наибольший/наименьший f(xn).

  3. Можно ли использовать этот метод, если функция производной неявная? → Нет, нужна явная производная, иначе нельзя построить полином P(y).

import numpy as np

def f(x):

return x**2 - 10*np.cos(0.3*np.pi*x) - 20

def df(x):

return 2*x + 3*np.pi*np.sin(0.3*np.pi*x)

def inverse_parabolic_search(interval, tol):

k_max = 1000

neval = 0

coords = []

x0, x2 = interval

x1 = (x0 + x2) / 2

g0 = df(x0)

g1 = df(x1)

g2 = df(x2)

neval += 3

k = 0

while k < k_max:

k += 1

#защита от деления на ноль

if (g0 == g1) or (g0 == g2) or (g1 == g2):

break

#ОБРАТНАЯ ПАРАБОЛИЧЕСКАЯ ИНТЕРПОЛЯЦИЯ

x3 = (

g1 * g2 / ((g0 - g1) * (g0 - g2)) * x0

+ g0 * g2 / ((g1 - g0) * (g1 - g2)) * x1

+ g0 * g1 / ((g2 - g0) * (g2 - g1)) * x2

)

coords.append([x3, x0, x1, x2])

if abs(x3 - x2) <= tol:

xmin = x3

fmin = f(xmin)

neval += 1

return [xmin, fmin, neval, coords]

x0, x1, x2 = x1, x2, x3

g0, g1, g2 = g1, g2, df(x3)

neval += 1

xmin = x2

fmin = f(xmin)

neval += 1

return [xmin, fmin, neval, coords]

Как вычисляется новое приближение x3?

→ Через формулу обратной параболической интерполяции (полином Лагранжа), аппроксимирующей x=(f′)−1(y)x = (f')^{-1}(y)x=(f′)−1(y) и подставляющей y=0y = 0y=0.

Как адаптировать этот код для поиска максимума?

→ Минимизировать -f(x) вместо f(x) или проверять вторую производную f′′(x)<0f''(x) < 0f′′(x)<0.