- mathmod - библиотека программ для численного моделирования
Пусть
Абсолютная погрешность:
Относительная погрешность:
Верная цифра - значащая цифра числа
Округление - замена числа
При округлении возникает погрешность округления.
Задача отыскания корней нелинейного уравнения с одним неизвестным вида:
Корень уравнения - значение
Для заданной точности
Пусть функция
Простой корень - корень уравнения
Кратный корень - корень уравнения
Этапы решения уравнения:
- Локализация корня;
- Вычисление корня с заданной точностью.
Отрезок локализации - отрезок
Сходящийся итерационный процесс - метод отыскания корня
Порядок сходимости:
Пусть в некоторой малой окрестности корня
, где
Порядок сходимости - скорость уменьшения погрешности между последовательными приближениями решения.
Одношаговый итерационный метод - метод, у которого очередное приближение
Многошаговый итерационный метод (
Интервал неопределенности - окрестность
- Быстрый итерационный метод для нахождения корня уравнения
. - Требует предоставления функции
и её производной . -
Функция:
newton(f, df, x, epsilon=1e-6)
-
Описание параметров:
-
f
- Функция, корень которой нужно найти; -
df
- Производная функции; -
x
- Начальное приближение корня; -
epsilon
- Заданная точность (по умолчанию).
-
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
- Заданная точность (по умолчанию).
-
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
- Заданная точность (по умолчанию).
-
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
: Заданная точность (по умолчанию).
from mathmod.nonlinear_equations import false_position
x, iteration = false_position(f, a, b, epsilon=1e-6)
Расчетная формула:
, где
Сходимость метода: линейная. Для достижения заданной точности требуется тем меньше итераций, чем ближе к корню лежит точка
Критерий окончания:
- Работает на основе деления отрезка, учитывая значения функции.
- Требует, чтобы начальный отрезок
удовлетворял условию . Функция: bisection(f, a, b, epsilon)
Описание параметров:
-
f
- Функция, корень которой нужно найти; -
a
- Левый конец начального отрезка локализации корня; -
b
- Правый конец начального отрезка локализации корня; -
epsilon
- Заданная точность (по умолчанию).
from mathmod.nonlinear_equations import bisection
x, iteration = bisection(f, a, b, epsilon=1e-6)
Расчетная формула:
Сходимость метода: со скоростью геометрической прогрессии, знаменатель которой
Критерий окончания:
Тогда
Функция: simple_iteration_method(phi, x0, epsilon=1e-6)
Описание параметров:
-
phi
- Итерационная функция, преобразующая исходное уравнение к виду ; -
x0
- Начальное приближение корня; -
epsilon
- Заданная точность (по умолчанию).
from mathmod.nonlinear_equations import simple_iteration_method
x, iteration = simple_iteration_method(phi, x0, epsilon=1e-6)
Расчетная формула:
Теорема о сходимости:
Если в окрестности корня функция
где
Тогда независимо от выбора начального приближения
Априорная оценка - показывет, что итерационный метод сходится
Чем меньше
Апостериорная оценка - критерий окончания итерационного процесса
Если это условие выполнено, то можно считать, что
Система уравнений в общем виде:
В матричной форме эта система принимает вид:
, где
Пусть
Тогда вектор
Задача:
Найти решение системы
Прямой метод - метод, который позволяет получить решение после выполнения конечного числа элементарных операций;
Итерационный метод - метод, который строит последовательность приближений к решению;
Норма - будем говорить, что в
-
Нормы векторов:
Свойства норм векторов:
-
Нормы матриц:
Свойства норм матриц:
-
Абсолютна и относительная погрешность векторов и матриц:
-
Погрешность векторов:
- абсолютная погрешность; - относительная погрешность;
- Вектор невязки - вектор, показывающий насколько найденное решение СЛАУ отклоняется от точного решения.
Число обусловленности - коэффициент возможного возрастания относительной погрешности решения, вызванное погрешностью задания правой части.
Пусть
, где
Матрица плохо обусловлена, если
Прямой метод - метод, который позволяет получить решение после выполнения конечного числа элементарных операций.
-
Функция:
gauss_single_division(A, b)
-
A
- Матрица левой части; -
b
- Вектор правой части;
Трудоемкость метода -
- Прямой ход - матрица
преобразуется к треугольному виду ( - шагов). - Обратный ход - вычисляются значения неизвестных, начиная с последнего уравнения (
- шагов).
Условие применимости - схема единственного деления не может быть реализована, если один из главных элементов равен нулю.
Описание метода:
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-х шагов:
- Решаем
для методом прямой подстановки. - Решаем
для методом обратной подстановки.
Решение:
- Прямой ход для
:
- Рассчитываем
:
- Решая, получаем:
- Обратный ход для
:
- Рассчитывем
:
- Решая, получаем:
- Функция:
lu(A, b)
Трудоемкость метода -
Теорема о возможности применения
, где
Описание метода:
from mathmod.linear_systems import lu_solve
x = lu_solve(A, b)
Пример:
Рассмотрим систмему:
Мы хотим представить её в виде произведения:
, где:
Шаг 1: Прямой ход (разложение)
- Выбираем первый элемент матрицы
как ведущий:
Элементы верхней матрицы
- Вычисляем коэффициенты для матрицы
:
- Обновляем элементы второй строки:
- Обновляем элементы третьей строки:
- Промежуточные результаты:
- Вычисляем
:
- Обновляем элементы третьей строки:
- Итоговые матрицы
Шаг 2: решение системы
Для решения системы
Решение состоит из 2-х шагов:
- Решаем
для методом прямой подстановки. - Решаем
для методом обратной подстановки.
Решение:
- Прямой ход для
:
- Рассчитывем
:
- Решая, получаем:
- Обратный ход для
:
- Рассчитывем
:
- Решая, получаем:
- Функция:
three_diag(A,b)
Трудоемкость метода -
Условие применимости - коэффициенты системы удовлетворяют условиям диагонального преобладания:
Тогда:
Описание метода:
- Прямой ход (прямая прогонка) - вычисление прогоночных коэффициентов
-
Обратная прогонка (обратная прогонка) - вычисление значения незвестных. Сначала
. Затем значения осталных неизветных по формуле:
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
- Заданная точность (по умолчанию); -
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
- Заданная точность (по умолчанию); -
norma
- Норма, по которой считается критерий окончания (например, 1, 2, np.inf).
-
-
Функция:
relaxation_method(A, b, epsilon=1e-6, omega=1, norma=1)
-
A
- Матрица коэффициентов (n x n); -
b
- Вектор правой части; -
epsilon
- Заданная точность (по умолчанию); -
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)
Известны значения некоторой функции
Для аппроксимации функций широко используются классы функций вида:
являющиеся линейными комбинациями фиксированного набора базисных функций
Функцию
Число
Существуют два основных подхода в аппроксимации функций:
-
Пусть точки
получены в результате достаточно точных измерений или вычислений, т.е. есть основания считать их лишенными ошибок. Тогда следует выбирать аппроксимирующую функцию такой, чтобы она совпадала со значениями исходной функции в заданных точках. Геометрически это означает, что кривая проходит через точки плоскости. Такой метод приближения называется интерполяцией. -
Если точки
содержат ошибки (данные экспериментов, статистические данные и т.п.), то функция выбирается из условия минимума некоторого функционала, обеспечивающего сглаживание ошибок. Такой прием называется аппроксимацией функции «в среднем». Геометрически это будет означать, что кривая будет занимать некоторое «среднее» положение, не обязательно совпадая с исходными точками плоскости.
Пусть в точках
Тогда задача итерполяции состоит в построении функции
Интерполяция - способ приближения функции
Экстраполяция - способ приближения функции
Теорема о существовании и единственности интерполяционного многочлена:
Если
, где:
Оценка погрешности:
или
Эта формула позволяет утвержать, что для достаточно гладкой функции
Итерполяция многочленом
Пример:
Пусть даны точки:
-
, -
, -
,
Построим интерполяционный многочлен Лагранжа:
Подставляя значения:
Пусть интерполируемая функция задана таблицей с постоянными шагом
Постановка задачи
Пусть даны точки
была минимальной
Нормальная система:
Для использования библиотеки склонируйте репозиторий и установите необходимые зависимости:
git clone https://github.com/BaranovSerV/mathmod.git
cd mathmod
pip install -r requirements.txt