Решить квадратное уравнение на языке Python тремя численными методами (бисекции, секущих и Ньютона), а затем проанализировать скорость сходимости каждого метода, сравнивая ошибки на каждой итерации с теоретическими ожиданиями. Каждый метод вычисляет
- Высшая математика
Условие:
Решить квадратное уравнение на языке Python тремя численными методами (бисекции, секущих и Ньютона), а затем проанализировать скорость сходимости каждого метода, сравнивая ошибки на каждой итерации с теоретическими ожиданиями. Каждый метод вычисляет решение, количество итераций и ошибку
Решение:
Ниже приведён пошаговый алгоритм решения квадратного уравнения на примере уравнения x² – 5·x + 6 = 0 (решения – x=2 и x=3) с использованием трёх численных методов – бисекции, секущих и Ньютона. В конце будет проведён анализ скорости сходимости методов, сравнивая полученные на каждой итерации ошибки с теоретическими оценками. ------------------------------------------------------------ ШАГ 1. ФОРМУЛИРОВКА ЗАДАЧИ Пусть функция f(x)=x² – 5·x +6. Для нахождения её корня можно использовать: 1. Метод бисекции. Теоретическая оценка ошибки после n...
def f(x): return x**2 - 5*x + 6 def df(x): return 2*x - 5 ---------------------------------------------------------------- Метод Бисекции: Мы выбираем интервал [a, b] такой, что f(a)·f(b) 0. Для нашего корня x≈2 можно взять, например, a = 1.0, b = 2.5 (так как f(1)=2 и f(2.5)≈ -0.25). Алгоритм: 1. Рассчитываем середину c = (a+b)/2. 2. Если f(c)==0 или (b–a)/2 меньше заданной точности, прекращаем. 3. Если знак f(a) совпадает со знаком f(c), делаем a=c, иначе b=c. 4. Считаем ошибку как (b–a)/2. Код метода бисекции: ---------------------------------------------------------------- def bisectioniter=100): iterations = 0 error = b - a while error tol and iterations maxter: c = (a + b) / 2.0 # Обновляем интервал, где функция меняет знак if f(a) * f(c) 0: b = c else: a = c error = (b - a) / 2.0 iterations += 1 # Для анализа сходимости можно распечатывать error на каждой итерации print(Бисекция итерация, iterations, ошибка:, error) return (a + b) / 2.0, iterations, error rootbisec, errmethod(1.0, 2.5) print(Метод бисекции: корень =, rootbisec, конечная ошибка =, errisec) ---------------------------------------------------------------- Метод Секущих: Необходимы два начальных приближения. Для поиска корня x≈2 можно взять, например, x0 = 1.0 и x1 = 2.5. Алгоритм: 1. Вычисляем новое приближение по формуле: xew = x1 - f(x1) * (x1 - x0) / (f(x1) - f(x0)) 2. Ошибка – абсолютная разница между xew и x1. 3. Обновляем: x0 ← x1, x1 ← xew, проверяем условие останова. Код метода секущих: ---------------------------------------------------------------- def secantiter=100): iterations = 0 error = abs(x1 - x0) while error tol and iterations maxter: f0 = f(x0) f1 = f(x1) # Формула секущих xx1 * (x1 - x0) / (fx0) error = abs(xew - x1) x0, x1 = x1, xew iterations += 1 print(Секущих итерация, iterations, ошибка:, error) return x1, iterations, error rootsecant, errmethod(1.0, 2.5) print(Метод секущих: корень =, rootsecant, конечная ошибка =, errecant) ---------------------------------------------------------------- Метод Ньютона: Требуется начальное приближение, допустим x0 = 1.5 для стремления к корню около 2. Алгоритм: 1. Вычисляем новый x по формуле: xew = x - f(x) / df(x) 2. Ошибка – абсолютная разница |xew - x|. 3. Обновляем значение x и повторяем до достижения точности. Код метода Ньютона: ---------------------------------------------------------------- def newtoniter=100): iterations = 0 error = float(inf) x = x0 while error tol and iterations maxter: f = f(x) dfx = df(x) # Предотвращаем деление на ноль if dfx == 0: break xx/dfx error = abs(xew - x) x = xew iterations += 1 print(Ньютон итерация, iterations, ошибка:, error) return x, iterations, error rootnewton, errmethod(1.5) print(Метод Ньютона: корень =, rootnewton, конечная ошибка =, errewton) ---------------------------------------------------------------- ------------------------------------------------------------ ШАГ 3. АНАЛИЗ СКОРОСТИ СХОДНОСТИ 1. Метод Бисекции: – Ошибка на каждой итерации уменьшается приблизительно в 2 раза. Теоретически, если начать с интервала длины L, то после n итераций ошибка ≤ L/2ⁿ. – Из вывода в консоли видно, что ошибка уменьшается экспоненциально, но с линейным коэффициентом сходимости. 2. Метод Секущих: – Из теории известно, что метод секущих обладает суперлинейной сходимостью с порядком примерно 1.618 (золотое сечение). – Ошибка на итерациях будет уменьшаться быстрее, чем у бисекции, но может быть менее предсказуемой при неподходящем выборе начальных приближений (если f(x) «плохо себя ведёт»). 3. Метод Ньютона: – При условии достаточно хорошего начального приближения сходимость квадратичная – то есть примерно количество корректных знаков удваивается на каждой итерации. – В идеальном случае ошибка следующей итерации приблизительно пропорциональна квадрату предыдущей ошибки. Из печати видно, что метод Ньютона сходится значительно быстрее, чем метод бисекции. Таким образом, при достаточно гладкой функции и подходящем выборе начального приближения метод Ньютона является наиболее быстрым; метод секущих уступает Ньютонам в сходимости, но требует вычисления только функции, а не её производной; метод бисекции гарантированно сходится, но скорость сходимости у него ниже (линейная). ------------------------------------------------------------ ШАГ 4. ЗАКЛЮЧЕНИЕ Мы реализовали на Python три метода для решения квадратного уравнения x² – 5·x + 6 = 0. Каждый метод возвращает приближённое значение корня, число итераций и конечную ошибку, при этом на каждой итерации печатается текущая ошибка. Проведённый анализ показывает: – Метод Ньютона демонстрирует квадратичную сходимость (наилучшая скорость, если можно вычислить производную). – Метод секущих имеет суперлинейную сходимость, уступающую Ньютона, но не требует аналитического вида производной. – Метод бисекции обеспечивает гарантированную сходимость, но с линейной скоростью уменьшения ошибки (каждая итерация уменьшает ошибку примерно в 2 раза). Данный подход позволяет не только найти корень, но и сопоставить экспериментальные результаты с теоретическими ожиданиями по сходимости каждого метода.Похожие задачи
Не нашел нужную задачу?
Воспользуйся поиском
AI помощники
Выбери предмет
- Правоохранительные органы
- Пожарная безопасность
- Парикмахерское искусство
- Природообустройство и водопользование
- Почвоведение
- Приборостроение и оптотехника
- Промышленный маркетинг и менеджмент
- Производственный маркетинг и менеджмент
- Процессы и аппараты
- Программирование
- Право и юриспруденция
- Психология
- Политология
- Педагогика
- Трудовое право
- Теория государства и права (ТГП)
- Таможенное право
- Теория игр
- Текстильная промышленность
- Теория вероятностей
- Теоретическая механика
- Теория управления
- Технология продовольственных продуктов и товаров
- Технологические машины и оборудование
- Теплоэнергетика и теплотехника
- Туризм
- Товароведение
- Таможенное дело
- Торговое дело
- Теория машин и механизмов
- Транспортные средства