- mathmod - библиотека программ для численного моделирования
Пусть
Абсолютная погрешность:
Относительная погрешность:
Верная цифра - значащая цифра числа
Округление - замена числа
При округлении возникает погрешность округления.
Задача отыскания корней нелинейного уравнения с одним неизвестным вида:
Корень уравнения - значение
Для заданной точности
Пусть функция
Простой корень - корень уравнения
Кратный корень - корень уравнения
Этапы решения уравнения:
- Локализация корня;
- Вычисление корня с заданной точностью.
Отрезок локализации - отрезок
Сходящийся итерационный процесс - метод отыскания корня
Порядок сходимости:
Пусть в некоторой малой окрестности корня
, где
Порядок сходимости - скорость уменьшения погрешности между последовательными приближениями решения.
Одношаговый итерационный метод - метод, у которого очередное приближение
Многошаговый итерационный метод (
Интервал неопределенности - окрестность
- Быстрый итерационный метод для нахождения корня уравнения
$f(x) = 0$ . - Требует предоставления функции
$f(x)$ и её производной$f'(x)$ . -
Функция:
newton(f, df, x, epsilon=1e-6)
-
Описание параметров:
-
f
- Функция, корень которой нужно найти; -
df
- Производная функции; -
x
- Начальное приближение корня; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ).
-
from mathmod.nonlinear_equations import newton
x, iteration = newton(f, df, x, epsilon=1e-6)
Расчетная формула:
Сходимость метода: квадратичная (при выборе начального приближения из достаточно малой окрестности).
Критерий окончания:
- Упрощённая версия метода Ньютона, где производная функции вычисляется только один раз.
-
Функция:
simplified_newton(f, df, x0, epsilon=1e-6)
-
Описание параметров:
-
f
- Функция, корень которой нужно найти; -
df
- Производная функции; -
x
- Начальное приближение корня; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ).
-
from mathmod.nonlinear_equations import simplified_newton
x, iteration = simplified_newton(f, df, x0, epsilon=1e-6)
Расчетная формула:
Сходимость метода: скорость сходимости тем выше, чем ближе начальное приближение
Критерий окончания:
- Не требует аналитической производной функции.
- Использует приближённую производную.
-
Функция:
secant(f, x_minus_1, x_n, epsilon=1e-6)
-
Описание параметров:
-
f
- Функция, корень которой нужно найти; -
x_minus_1
- Первой начальное приближение; -
x
- Второе начальное приближение; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ).
-
from mathmod.nonlinear_equations import secant
x, iteration = secant(f, x_minus_1, x_n, epsilon=1e-6)
Расчетная формула:
Сходимость метода:
Критерий окончания:
-
Функция:
false_position(f, a, b, epsilon=1e-6)
- Описание параметров:
-
f
: Функция, корень которой нужно найти; -
a
: Левый конец начального отрезка локализации корня; -
b
: Правый конец начального отрезка локализации корня; -
epsilon
: Заданная точность (по умолчанию$10^{-6}$ ).
from mathmod.nonlinear_equations import false_position
x, iteration = false_position(f, a, b, epsilon=1e-6)
Расчетная формула:
, где
Сходимость метода: линейная. Для достижения заданной точности требуется тем меньше итераций, чем ближе к корню лежит точка
Критерий окончания:
- Работает на основе деления отрезка, учитывая значения функции.
- Требует, чтобы начальный отрезок
$[a, b]$ удовлетворял условию$f(a) * f(b) < 0$ . Функция:bisection(f, a, b, epsilon)
Описание параметров:
-
f
- Функция, корень которой нужно найти; -
a
- Левый конец начального отрезка локализации корня; -
b
- Правый конец начального отрезка локализации корня; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ).
from mathmod.nonlinear_equations import bisection
x, iteration = bisection(f, a, b, epsilon=1e-6)
Расчетная формула:
Сходимость метода: со скоростью геометрической прогрессии, знаменатель которой
Критерий окончания:
Тогда
Функция: simple_iteration_method(phi, x0, epsilon=1e-6)
Описание параметров:
-
phi
- Итерационная функция$\phi(x)$ , преобразующая исходное уравнение$f(x) = 0$ к виду$x = \phi(x)$ ; -
x0
- Начальное приближение корня; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ).
from mathmod.nonlinear_equations import simple_iteration_method
x, iteration = simple_iteration_method(phi, x0, epsilon=1e-6)
Расчетная формула:
Теорема о сходимости:
Если в окрестности корня функция
где
Тогда независимо от выбора начального приближения
Априорная оценка - показывет, что итерационный метод сходится
Чем меньше
Апостериорная оценка - критерий окончания итерационного процесса
Если это условие выполнено, то можно считать, что
Система уравнений в общем виде:
В матричной форме эта система принимает вид:
, где
Пусть
Тогда вектор
Задача:
Найти решение системы
Прямой метод - метод, который позволяет получить решение после выполнения конечного числа элементарных операций;
Итерационный метод - метод, который строит последовательность приближений к решению;
Норма - будем говорить, что в
-
Нормы векторов:
Свойства норм векторов:
-
Нормы матриц:
Свойства норм матриц:
-
Абсолютна и относительная погрешность векторов и матриц:
-
Погрешность векторов:
$\Delta x^{\ast} = ||\overline{x} - x^{\ast}||$ - абсолютная погрешность;$\delta x^{\ast} = \frac{\Delta x^{\ast}}{||x^{\ast}||}$ - относительная погрешность;
- Вектор невязки - вектор, показывающий насколько найденное решение СЛАУ отклоняется от точного решения.
Число обусловленности - коэффициент возможного возрастания относительной погрешности решения, вызванное погрешностью задания правой части.
Пусть
, где
Матрица плохо обусловлена, если
Прямой метод - метод, который позволяет получить решение после выполнения конечного числа элементарных операций.
-
Функция:
gauss_single_division(A, b)
-
A
- Матрица левой части; -
b
- Вектор правой части;
Трудоемкость метода -
- Прямой ход - матрица
$A$ преобразуется к треугольному виду ($m - 1$ - шагов). - Обратный ход - вычисляются значения неизвестных, начиная с последнего уравнения (
$m^{2}$ - шагов).
Условие применимости - схема единственного деления не может быть реализована, если один из главных элементов равен нулю.
Описание метода:
from mathmod.linear_systems import gauss_single_division
x = gauss_single_division(A, b)
Пример:
В матричной форме система записывается так:
Прямой ход
Шаг 1: Приведение первого столбца
Делим первую строку на ведущий элемент
Обнуляем элементы ниже ведущего элемента в первом столбце, используя формулу:
, где
Для второй строки:
Для третьей строки:
Получаем:
Шаг 2: Приведение второго столбца
Делим вторую строку на ведущий элемент
Обнуляем элементы ниже ведущего элемента во втором столбце:
Получаем:
Обратный ход
Решаем треугольную систему методом подстановки.
Шаг 1: Найдем
Шаг 2: Найдем
Шаг 3: Найдем
Решение системы:
- Функция:
gauss_partial_pivot(a, b)
Трудоемкость метода -
Описание метода:
Отличие от схемы единственного деления заключается в том, что на
Вычислительная устойчивость:
Гарантия ограниченности роста элементов матрицы делает схему частиного выбора вычислительно устойчивой. Становится справедлива оценка погрешности:
, где:
Далее исключение неизвестного
from mathmod.linear_systems import gauss_partial_pivot
x = gauss_partial_pivot(A,b)
Пример:
Рассмотрим систему:
- Для решения СЛАУ с симметрично положительно определённой матрицей.
- Функция:
cholecky(A, b)
Трудоемкость метода -
Условия применимости - требуется, чтобы диагональные элементы
Достоинства метода:
- Гарантированная устойчивость;
- Требует вдвое меньше вычислительных затрат по сравнению с методом Гаусса;
- Позволяет экономично использовать память ЭВМ при записи исходных данных и результато вычислений за счет симметричности матрицы A.
Описание метода:
, где
Отсюда:
Если разложение получено, то решение системы:
from mathmod.linear_systems import cholecky
x = cholecky(A, b)
Пример:
Рассмотрим систему:
Матрица
Решение состоит из 2-х шагов:
- Решаем
$Ly = b$ для$y$ методом прямой подстановки. - Решаем
$L^{T}x = y$ для$x$ методом обратной подстановки.
Решение:
- Прямой ход для
$y$ :
- Рассчитываем
$y$ :
- Решая, получаем:
- Обратный ход для
$x$ :
- Рассчитывем
$x$ :
- Решая, получаем:
- Функция:
lu(A, b)
Трудоемкость метода -
Теорема о возможности применения
, где
Описание метода:
from mathmod.linear_systems import lu_solve
x = lu_solve(A, b)
Пример:
Рассмотрим систмему:
Мы хотим представить её в виде произведения:
, где:
Шаг 1: Прямой ход (разложение)
- Выбираем первый элемент матрицы
$A$ как ведущий:
Элементы верхней матрицы
- Вычисляем коэффициенты для матрицы
$L$ :
- Обновляем элементы второй строки:
- Обновляем элементы третьей строки:
- Промежуточные результаты:
- Вычисляем
$\mu_{32}$ :
- Обновляем элементы третьей строки:
- Итоговые матрицы
Шаг 2: решение системы
Для решения системы
Решение состоит из 2-х шагов:
- Решаем
$Ly = b$ для$y$ методом прямой подстановки. - Решаем
$Ux = y$ для$x$ методом обратной подстановки.
Решение:
- Прямой ход для
$y$ :
- Рассчитывем
$y$ :
- Решая, получаем:
- Обратный ход для
$x$ :
- Рассчитывем
$x$ :
- Решая, получаем:
- Функция:
three_diag(A,b)
Трудоемкость метода -
Условие применимости - коэффициенты системы удовлетворяют условиям диагонального преобладания:
Тогда:
Описание метода:
- Прямой ход (прямая прогонка) - вычисление прогоночных коэффициентов
-
Обратная прогонка (обратная прогонка) - вычисление значения незвестных. Сначала
$x_m = \beta_m$ . Затем значения осталных неизветных по формуле:
from mathmod.linear_systems import three_diag
x = three_diag(A,b)
Пример:
Рассмотрим систмему:
Прямой ход
Обратный ход
Итак, получаем решение:
Итерационный метод - метод, который строит последовательность приближений к решению;
-
Функция:
jacobi(A, b, epsilon=1e-6, norma=1)
-
A
- Матрица коэффициентов (n x n); -
b
- Вектор правой части; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ); -
norma
- Норма, по которой считается критерий окончания (например, 1, 2, np.inf).
-
Теорема о сходимости:
Пусть выполнено условие:
Тогда решение системы
Апостериорная оценка:
Критерий окончания:
, где:
Более простой критерий окончания:
Описание метода:
from mathmod.linear_systems import jacobi
x, iteration_count = jacobi(A, b, epsilon=1e-6, norma=1)
Пример:
-
Итерационный метод для решения СЛАУ с диагонально преобладающей матрицей.
-
Функция:
gauss_zeydel(A, b, epsilon=1e-6, norma=1)
-
A
- Матрица коэффициентов (n x n); -
b
- Вектор правой части; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ); -
norma
- Норма, по которой считается критерий окончания (например, 1, 2, np.inf).
-
-
Функция:
relaxation_method(A, b, epsilon=1e-6, omega=1, norma=1)
-
A
- Матрица коэффициентов (n x n); -
b
- Вектор правой части; -
epsilon
- Заданная точность (по умолчанию$10^{-6}$ ); -
omega
- Параметр релаксации (по умолчанию 1.0 — метод Зейделя); -
norma
- Норма, по которой считается критерий окончания (например, 1, 2, np.inf).
-
from mathmod.linear_systems import relaxation_method
x, iteration_count = relaxation_method(A, b, epsilon=1e-6, omega=1, norma=1)
Известны значения некоторой функции
Для аппроксимации функций широко используются классы функций вида:
являющиеся линейными комбинациями фиксированного набора базисных функций
Функцию
Число
Существуют два основных подхода в аппроксимации функций:
-
Пусть точки
$f(x_i), i = 0,1,\ldots,n$ получены в результате достаточно точных измерений или вычислений, т.е. есть основания считать их лишенными ошибок. Тогда следует выбирать аппроксимирующую функцию$\phi(x)$ такой, чтобы она совпадала со значениями исходной функции в заданных точках. Геометрически это означает, что кривая$\phi(x)$ проходит через точки$(x_i, f(x_i))$ плоскости. Такой метод приближения называется интерполяцией. -
Если точки
$f(x_i), i = 0,1,\ldots,n$ содержат ошибки (данные экспериментов, статистические данные и т.п.), то функция$\phi(x)$ выбирается из условия минимума некоторого функционала, обеспечивающего сглаживание ошибок. Такой прием называется аппроксимацией функции «в среднем». Геометрически это будет означать, что кривая$\phi(x)$ будет занимать некоторое «среднее» положение, не обязательно совпадая с исходными точками$(x_i, f(x_i))$ плоскости.
Пусть в точках
Тогда задача итерполяции состоит в построении функции
Интерполяция - способ приближения функции
Экстраполяция - способ приближения функции
Теорема о существовании и единственности интерполяционного многочлена:
Если
, где:
Оценка погрешности:
или
Эта формула позволяет утвержать, что для достаточно гладкой функции
Итерполяция многочленом
Пример:
Пусть даны точки:
-
$x_0 = 0$ ,$y_0 = 1$ -
$x_1 = 1$ ,$y_1 = 2$ -
$x_2 = 2$ ,$y_2 = 4$
Построим интерполяционный многочлен Лагранжа:
Подставляя значения:
Пусть интерполируемая функция задана таблицей с постоянными шагом
Постановка задачи
Пусть даны точки
была минимальной
Нормальная система:
Для использования библиотеки склонируйте репозиторий и установите необходимые зависимости:
git clone https://github.com/BaranovSerV/mathmod.git
cd mathmod
pip install -r requirements.txt