Skip to content

Библиотека Python для численного моделирования

Notifications You must be signed in to change notification settings

BaranovSerV/mathmod

Folders and files

NameName
Last commit message
Last commit date

Latest commit

BaranovSerVBaranovSerV
BaranovSerV
and
BaranovSerV
Dec 10, 2024
88671a1 · Dec 10, 2024
Nov 25, 2024
Dec 10, 2024
Nov 25, 2024
Dec 10, 2024
Nov 19, 2024
Dec 10, 2024
Nov 25, 2024
Dec 10, 2024
Nov 25, 2024
Nov 20, 2024
Nov 21, 2024
Dec 10, 2024
Nov 25, 2024
Nov 21, 2024

Repository files navigation

Обложка

mathmod - библиотека программ для численного моделирования

Содержание


Теория погрешностей

Пусть a - точное решение. a - приближенное значение. Тогда абсолютная погрешность:

Абсолютная погрешность:

Δ ( a ) = | a a |

Относительная погрешность:

δ ( a ) = | a a | | a | = Δ ( a ) | a |

Верная цифра - значащая цифра числа a , абсолютная погрешность которой не превосходит единицы разряда, соответствующей этой цифре.

Округление - замена числа a его другим числом a с меньшим количеством значащих цифр.

При округлении возникает погрешность округления.

Решение нелинейных уравнений

Постановка задачи

Задача отыскания корней нелинейного уравнения с одним неизвестным вида:

f ( x ) = 0

Корень уравнения - значение x , при котором f ( x ) = 0 . Геометрически, x является абсциссой точки пересечения графика f ( x ) с осью O x .

Для заданной точности ϵ требуется найти приближенное значение корня x такое, что:

| x x | ϵ

Пусть функция f ( x ) дифференцируема m > 1 раз в точке x , тогда:

Простой корень - корень уравнения x называется простым, если f ( x ) 0 .

Кратный корень - корень уравнения x называется простым, если f ( x ) = 0 . Целое число m назовем кратностью корня x , если f ( k ) ( x ) = 0 , для k = 1 , 2 , . . . , m 1 и f ( m ) ( x ) 0 .

Этапы решения уравнения:

  1. Локализация корня;
  2. Вычисление корня с заданной точностью.

Отрезок локализации - отрезок [ a , b ] , который содержит 1 корень уравнения.

Основные вопросы

Сходящийся итерационный процесс - метод отыскания корня x , заключающийся в построении последовательности приближений к нему x ( 0 ) , x ( 1 ) , . . . , , x ( k ) , . . . такой, что:

lim k x ( k ) = x

Порядок сходимости:

Пусть в некоторой малой окрестности корня x уравнения f ( x ) = 0 итерационная поледовательность удовлетворяет неравенству:

| x x ( k ) | C | x x ( k 1 ) | p

, где С > 0 и p 1 - постоянные. Тогда p называется порядком сходимости.

Порядок сходимости - скорость уменьшения погрешности между последовательными приближениями решения.

Одношаговый итерационный метод - метод, у которого очередное приближение x ( k + 1 ) находится только через одно предыдущее x ( k ) . Для его работы нужно знать только одно начальное приближение x ( 0 ) . (Пример - метод Ньютона)

Многошаговый итерационный метод ( l - шаговый) - метод, у которого очередное приближение x ( k + 1 ) находится l предыдущих x ( k ) , x ( k 1 ) , . . . , x ( k l + 1 ) . Для него следует задать l начальных приближений x ( 0 ) , x ( 1 ) , . . . , x ( l 1 ) . (Пример - метод секщих)

Интервал неопределенности - окрестность ( x ϵ , x + ϵ ) внутри которой любую точку можно принять за приближение к корню.

Интерал неопределенности

1. Метод Ньютона

  • Быстрый итерационный метод для нахождения корня уравнения 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)

Расчетная формула:

x ( n + 1 ) = x ( n ) f ( x ( n ) ) f ( x ( n ) )

Сходимость метода: квадратичная (при выборе начального приближения из достаточно малой окрестности).

Критерий окончания:

| x ( n + 1 ) x ( n ) | < ε

Метод Ньютона

2. Упрощённый метод Ньютона

  • Упрощённая версия метода Ньютона, где производная функции вычисляется только один раз.
  • Функция: 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)

Расчетная формула:

x ( n + 1 ) = x ( n ) f ( x ( n ) ) f ( x ( 0 ) )

Сходимость метода: скорость сходимости тем выше, чем ближе начальное приближение x ( 0 ) к решению x .

Критерий окончания:

| x ( n + 1 ) x ( n ) | < ε

Упрощенный метод Ньютона

3. Метод секущих

  • Не требует аналитической производной функции.
  • Использует приближённую производную.
  • Функция: 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)

Расчетная формула:

x ( n + 1 ) = x ( n ) x ( n 1 ) x ( n ) f ( x ( n 1 ) ) f ( x ( n ) ) f ( x ( n ) )

Сходимость метода: p = 5 + 1 2 1.618 - сверхлинейная, если вычисляется простой корень. При неудачном выборе приближения, метод расходится. Поэтому требуется выбор двух близких к x начальных приближений x ( 0 ) и x ( 1 ) .

Критерий окончания:

| x ( n + 1 ) x ( n ) | < ε

Метод секущих Метод секущих

4. Метод ложного положения

  • Функция: 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)

Расчетная формула:

x ( n + 1 ) = x ( n ) c x ( n ) f ( c ) f ( x ( n ) ) f ( x ( n ) )

, где c - некторая точнка из окрестности корня.

Сходимость метода: линейная. Для достижения заданной точности требуется тем меньше итераций, чем ближе к корню лежит точка c .

Критерий окончания:

| x ( n + 1 ) x ( n ) | < ε

5. Метод бисекций

  • Работает на основе деления отрезка, учитывая значения функции.
  • Требует, чтобы начальный отрезок [ 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)

Расчетная формула:

c = a + b 2

Сходимость метода: со скоростью геометрической прогрессии, знаменатель которой q = 1 2 .

Критерий окончания:

b ( n ) a ( n ) < 2 ε

Тогда x ( n ) = a ( n ) + b ( n ) 2 является искомым приближением к корню с точностью ϵ .

Метод бисекций

6. Метод простой итерации

Функция: simple_iteration_method(phi, x0, epsilon=1e-6)

Описание параметров:

  • phi - Итерационная функция ϕ ( x ) , преобразующая исходное уравнение f ( x ) = 0 к виду x = ϕ ( x ) ;
  • x0 - Начальное приближение корня;
  • epsilon - Заданная точность (по умолчанию 10 6 ).
from mathmod.nonlinear_equations import simple_iteration_method

x, iteration = simple_iteration_method(phi, x0, epsilon=1e-6)

Расчетная формула:

x ( n + 1 ) = ϕ ( x ( n ) )

Теорема о сходимости:

Если в окрестности корня функция ϕ ( x ) непрерывно дифференцируема и удовлетворяет условию:

max x [ a , b ] | ϕ ( x ) | q

где 0 q < 1 - постоянная

Тогда независимо от выбора начального приближения x ( 0 ) из указанной окрестности корня итерационная последовательность не выходит из этой окрестности, метод сходится со скоростью геометрической прогресии и справедлива следующая оценка погрешности (априорная оценка):

Априорная оценка - показывет, что итерационный метод сходится

| x ( n ) x | q n | x ( 0 ) x |

Чем меньше q , тем выше скорость сходимости.

Апостериорная оценка - критерий окончания итерационного процесса

| x ( n ) x ( n 1 ) | 1 q q ϵ

Если это условие выполнено, то можно считать, что x ( n ) является приближением к x с точностью ϵ .

Метод простой итерации

Решение систем линейных алгебраических уравнений (СЛАУ)

Постановка задачи

Система уравнений в общем виде:

a 11 x 1 + a 12 x 2 + a 13 x 3 + + a 1 m x m = b 1 , a 21 x 1 + a 22 x 2 + a 23 x 3 + + a 2 m x m = b 2 , a 31 x 1 + a 32 x 2 + a 33 x 3 + + a 3 m x m = b 3 , a m 1 x 1 + a m 2 x 2 + a m 3 x 3 + + a m m x m = b m .

В матричной форме эта система принимает вид:

A x = b

, где

A = [ a 11 a 12 a 13 a 1 m a 21 a 22 a 23 a 2 m a 31 a 32 a 33 a 3 m a m 1 a m 2 a m 3 a m m ] , x = [ x 1 x 2 x 3 x m ] , b = [ b 1 b 2 b 3 b m ]

m - порядок матрицы;

A - невырожденная матрица ( Δ A 0 , т.е. единственное решение);

x - вектор неизвестных;

b - вектор свободных членов;

Пусть x - точное решение, x - приближенное решение.

x = [ x 1 x 2 x 3 x m ] x = [ x 1 x 2 x 3 x m ]

Тогда вектор ϵ = x x называется вектором погрешности.

Задача:

Найти решение системы A x = b с точностью ϵ . Это означает, что нужно найти вектор x такой, что | | x x | | ϵ , где | | | | - одна из норм (единичная, евклидова, бесконечности).

Основные вопросы

Прямой метод - метод, который позволяет получить решение после выполнения конечного числа элементарных операций;

Итерационный метод - метод, который строит последовательность приближений к решению;

Норма - будем говорить, что в R m введена норма, если каждому вектору x R m сопоставлено вещественное число, обозначаемое | | x | | .

  1. Нормы векторов:

    Нормы векторов

    Свойства норм векторов:

    Свойства норм векторов

  2. Нормы матриц:

    Нормы матриц

    Свойства норм матриц:

    Свойства норм матриц

  3. Абсолютна и относительная погрешность векторов и матриц:

  • Погрешность векторов:

    Δ x = | | x x | | - абсолютная погрешность;

    δ x = Δ x | | x | | - относительная погрешность;

  1. Вектор невязки - вектор, показывающий насколько найденное решение СЛАУ отклоняется от точного решения.

r = b A x

Число обусловленности - коэффициент возможного возрастания относительной погрешности решения, вызванное погрешностью задания правой части.

Пусть x - точное решение системы A x = b , а x - решение системы. Тогда верны следующие оценки:

δ ( x ) ν δ ( δ ( A ) + δ ( b ) )

, где

ν δ = | | A | | | | A 1 | | δ ( A ) = | | A A 1 | | | | A | | |

ν ( A ) = c o n d ( A ) = | | A 1 | | | | A | | - стандартное число обусловленности.

Матрица плохо обусловлена, если c o n d ( A ) >> 1 . Следовательно, тогда существует решение, обладающее черезвычайно высокой чувствительностью к малым погрешностям входного данного b .

Прямые методы

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

1. Метод Гаусса (схема единственного деления)

  • Функция: gauss_single_division(A, b)

  • A - Матрица левой части;

  • b - Вектор правой части;

Трудоемкость метода - 2 3 m 3

  • Прямой ход - матрица A преобразуется к треугольному виду ( m 1 - шагов).
  • Обратный ход - вычисляются значения неизвестных, начиная с последнего уравнения ( m 2 - шагов).

Условие применимости - схема единственного деления не может быть реализована, если один из главных элементов равен нулю.

Описание метода:

Метод Гаусса (схема единственного деления)

Метод Гаусса (схема единственного деления)

Метод Гаусса (схема единственного деления)

from mathmod.linear_systems import gauss_single_division

x = gauss_single_division(A, b)

Пример:

2 x 1 + x 2 x 3 = 1 , 4 x 1 + 3 x 2 x 3 = 7 , 8 x 1 + 7 x 2 + 3 x 3 = 25.

В матричной форме система записывается так:

[ 2 1 1 1 4 3 1 7 8 7 3 25 ]

Прямой ход

Шаг 1: Приведение первого столбца

Делим первую строку на ведущий элемент a 11 = 2 :

[ 1 0.5 0.5 0.5 4 3 1 7 8 7 3 25 ]

Обнуляем элементы ниже ведущего элемента в первом столбце, используя формулу:

a i j a i j μ i k a k j , b i b i μ i k b k ,

, где μ i k = a i k a k k

Для второй строки:

μ 21 = 4 , a 2 j a 2 j 4 a 1 j

Для третьей строки:

μ 31 = 8 , a 3 j a 3 j 8 a 1 j

Получаем:

[ 1 0.5 0.5 0.5 0 1 1 5 0 3 7 21 ]

Шаг 2: Приведение второго столбца

Делим вторую строку на ведущий элемент a 22 = 1 (он уже равен 1 ):

[ 1 0.5 0.5 0.5 0 1 1 5 0 3 7 21 ]

Обнуляем элементы ниже ведущего элемента во втором столбце:

μ 32 = 3 , a 3 j a 3 j 3 a 2 j

Получаем:

[ 1 0.5 0.5 0.5 0 1 1 5 0 0 4 6 ]

Обратный ход

Решаем треугольную систему методом подстановки.

Шаг 1: Найдем x 3 :

x 3 = 6 4 = 1.5

Шаг 2: Найдем x 2 :

x 2 = 5 1 x 3 = 5 1 1.5 = 3.5

Шаг 3: Найдем x 1 :

x 1 = 0.5 0.5 x 2 0.5 x 3 = 0.5 0.5 3.5 + 0.5 1.5 = 0.5

Решение системы:

x 1 = 0.5 , x 2 = 3.5 , x 3 = 1.5


2. Метод Гаусса (схема частичного выбора)

  • Функция: gauss_partial_pivot(a, b)

Трудоемкость метода - 2 3 m 3

Описание метода:

Метод Гаусса (схема частичного деления)

Отличие от схемы единственного деления заключается в том, что на k -м шаге исключение в качестве главного элемента выбирают максимальный по модулю коэффициент a i k k .

Вычислительная устойчивость:

Гарантия ограниченности роста элементов матрицы делает схему частиного выбора вычислительно устойчивой. Становится справедлива оценка погрешности:

δ ( x ) f ( m ) c o n d E ( A ) ϵ M

, где:

x - вычисленное ЭВМ решение системы. δ ( x ) = | | x x | | 2 | | x | | 2 - относительная погрешность;

c o n d E ( A ) = | | A | | E | | A 1 | | E - числро обусловленности;

ϵ M - машинный эпсилон;

f ( m ) = C ( m ) ϕ ( m ) , где C ( m ) - некоторая медленно растущая функция, зависящая от порядка стистемы;

ϕ ( m ) - коэффициент роста.

Далее исключение неизвестного x k производят, как в схеме единственного деления.

from mathmod.linear_systems import gauss_partial_pivot

x = gauss_partial_pivot(A,b)

Пример:

Рассмотрим систему:

A = [ 2 9 5 0 3.5 10 0 0.0001 3 ] b = [ 4 6.5 3.0001 ]

Метод Гаусса (схема частичного деления)


3. Метод Холецкого (LLT-разложение)

  • Для решения СЛАУ с симметрично положительно определённой матрицей.
  • Функция: cholecky(A, b)

Трудоемкость метода - 1 3 m 3

Условия применимости - требуется, чтобы диагональные элементы l i i матрицы L были положительными.

Достоинства метода:

  • Гарантированная устойчивость;
  • Требует вдвое меньше вычислительных затрат по сравнению с методом Гаусса;
  • Позволяет экономично использовать память ЭВМ при записи исходных данных и результато вычислений за счет симметричности матрицы A.

Описание метода:

A - симетрично положительно определенная матроица ( A = A T и x 0 скалярное произведение ( A x , x ) > 0 ).

L - нижнетреугольная матрица. L T - транспонированная.

A = L L T

, где

L L T = [ l 11 0 0 0 l 21 l 22 0 0 l 31 l 32 l 33 0 l m 1 l m 2 l m 3 l m m ] [ l 11 l 21 l 31 l m 1 0 l 22 l 23 l m 2 0 0 l 33 l m 3 0 0 0 l m m ] = [ a 11 a 12 a 13 a 1 m a 21 a 22 a 23 a 2 m a 31 a 32 a 33 a 3 m a m 1 a m 2 a m 3 a m m ]

Отсюда:

l k 1 2 + l k 2 2 + + l k k 2 = a k k

l k k = a k k j = 1 k 1 l k , j 2 k = 2 m

l i k = a i , k j 1 k 1 l i , j l l , k l k , k i = k + 1 , m

Если разложение получено, то решение системы:

L y = b L T x = y

from mathmod.linear_systems import cholecky

x = cholecky(A, b)

Пример:

Рассмотрим систему:

A = [ 6.25 1 0.5 1 5 2.12 0.5 2.12 3.6 ] b = [ 7.5 8.68 0.24 ]

l 11 = ( a 11 ) = 6.25 = 2.5 l 21 = a 21 l 11 = 1 2.5 = 0.4

l 31 = a 31 l 11 = 0.5 2.5 = 0.2 l 22 = a 22 l 21 2 = 5 0.16 = 2.2

l 32 = a 32 l 31 l 21 = ( 2.12 0.2 ( 0.4 ) 2.2 ) = 1

l 33 = a 22 l 31 2 l 32 2 = 3.6 0.2 2 1 2 = 1.6

Матрица L :

L = [ 2.25 0 0 0.4 2.2 0 0.2 1 1.6 ]

Решение состоит из 2-х шагов:

  1. Решаем L y = b для y методом прямой подстановки.
  2. Решаем L T x = y для x методом обратной подстановки.

Решение:

  1. Прямой ход для y :

L y = b

[ 2.5 0 0 0.4 2.2 0 0.2 1 1.6 ] [ y 1 y 2 y 3 ] = [ 7.5 8.68 0.24 ]

  • Рассчитываем y :

2.5 y 1 = 7.5 , 0.4 y 1 + 2.2 y 2 = 8.68 , 0.2 y 1 + y 2 + 1.6 y 3 = 0.24

  • Решая, получаем:

y 1 = 3 , y 2 = 3.4 , y 3 = 1.6

  1. Обратный ход для x :

L T x = y

[ 2.5 0.4 0.2 0 2.2 1 0 0 1.6 ] [ x 1 x 2 x 3 ] = [ 3 3.4 1.6 ]

  • Рассчитывем x :

2.5 x 1 0.4 x 2 + 0.2 x 3 = 3 , 2.2 x 2 + x 3 = 3.4 , 1.6 x 3 = 1.6 .

  • Решая, получаем:

x 1 = 0.8 , x 2 = 2 , x 3 = 1


4. Метод LU-разложения

  • Функция: lu(A, b)

Трудоемкость метода - 2 3 m 3 + m 2

Теорема о возможности применения L U - разложения - если все главные миноры матрицы A отличны от нуля, то существуют единственная нижняя треугольная матрица L и верхняя треугольная матрица U такие, что:

A = L U

, где

L = [ 1 0 0 0 μ 21 1 0 0 μ 31 μ 32 1 0 μ m 1 μ m 2 μ m 3 1 ]

Описание метода:

Метод LU - разложения

Метод LU - разложения

Метод LU - разложения

Метод LU - разложения

from mathmod.linear_systems import lu_solve

x = lu_solve(A, b)

Пример:

Рассмотрим систмему:

A = [ 2 1 2 4 6 3 4 2 8 ] b = [ 5 6 8 ]

Мы хотим представить её в виде произведения:

A = L U

, где:

L = [ 1 0 0 μ 21 1 0 μ 31 μ 32 1 ] , U = [ u 11 u 12 u 13 0 u 22 u 23 0 0 u 33 ] .

Шаг 1: Прямой ход (разложение)

  1. Выбираем первый элемент матрицы A как ведущий:

u 11 = 2

Элементы верхней матрицы U :

u 12 = 1 , u 13 = 2.

  1. Вычисляем коэффициенты для матрицы L :

μ 21 = a 21 u 11 = 4 2 = 2 , μ 31 = a 31 u 11 = 4 2 = 2.

  1. Обновляем элементы второй строки:

u 22 = a 22 μ 21 u 12 = 6 ( 2 ) ( 1 ) = 4 ,

u 23 = a 23 μ 21 u 13 = 3 ( 2 ) ( 2 ) = 1.

  1. Обновляем элементы третьей строки:

u 32 = a 32 μ 21 u 12 = 2 ( 2 ) ( 1 ) = 4

u 33 = a 33 μ 21 u 13 = 8 ( 2 ) ( 2 ) = 4

  1. Промежуточные результаты:

L = [ 1 0 0 2 1 0 2 μ 32 1 ] , U = [ 2 1 2 0 4 1 0 4 4 ] ,

  1. Вычисляем μ 32 :

μ 32 = u 32 u 22 = 1

  1. Обновляем элементы третьей строки:

u 33 = u 33 μ 32 u 23 = 4 ( 1 ) ( 1 ) = 3

  1. Итоговые матрицы

L = [ 1 0 0 2 1 0 2 1 1 ] , U = [ 2 1 2 0 4 1 0 0 3 ] .

Шаг 2: решение системы

Для решения системы A x = b , где:

A = L U ,

Решение состоит из 2-х шагов:

  1. Решаем L y = b для y методом прямой подстановки.
  2. Решаем U x = y для x методом обратной подстановки.

Решение:

  1. Прямой ход для y :

L y = b

[ 1 0 0 2 1 0 2 1 1 ] [ y 1 y 2 y 3 ] = [ 5 6 8 ]

  • Рассчитывем y :

y 1 = 5 , 2 y 1 + y 2 = 6 , 2 y 1 1 y 2 + y 3 = 8.

  • Решая, получаем:

y 1 = 5 , y 2 = 4 , y 3 = 6

  1. Обратный ход для x :

U x = y

[ 2 1 2 0 4 1 0 0 3 ] [ x 1 x 2 x 3 ] = [ 5 4 6 ]

  • Рассчитывем x :

2 x 1 x 2 2 x 3 = 5 , 4 x 2 x 3 = 4 , 3 x 3 = 6.

  • Решая, получаем:

x 1 = 5.25 , x 2 = 1.5 , x 3 = 2


5. Метод прогонки

  • Функция: three_diag(A,b)

Трудоемкость метода - 8 m

Условие применимости - коэффициенты системы удовлетворяют условиям диагонального преобладания:

| b k | | a k | + | c k | | b k | > | a k |

Тогда:

γ i = b i + a i α i 1 0 | α i | 1 i = 1 , 2 , m

Описание метода:

A - терхдиагональная матрица:

A = [ b 1 c 1 0 0 a 2 b 2 c 2 0 0 a 3 b 3 c 3 0 a m 1 b m 1 c m 1 0 0 0 a m b m ] b = [ d 1 d 2 d 3 b m 1 b m ]

  • Прямой ход (прямая прогонка) - вычисление прогоночных коэффициентов

α i = c i γ i β i = d i α i β i 1 γ i γ i = b i + a i α i 1

  • Обратная прогонка (обратная прогонка) - вычисление значения незвестных. Сначала x m = β m . Затем значения осталных неизветных по формуле:

x i = α i x i + 1 + β i i = m 1 , m 2 , , 1

from mathmod.linear_systems import three_diag

x = three_diag(A,b)

Пример:

Рассмотрим систмему:

A = [ 5 1 0 0 2 4.6 1 0 0 2 3.6 0.8 0 0 3 4.4 ] b = [ 2 3.3 2.6 7.2 ]

Прямой ход

γ 1 = b 1 = 5 , α 1 = c 1 / γ 1 = 0.2 , β 1 = d 1 / γ 1 = 2.0 / 5 = 0.4 ,

γ 2 = b 2 + a 2 α 1 = 4.6 + 2.0 0.2 = 5 , α 2 = c 2 / γ 2 = 1 / 5 = 0.2 ,

β 2 = ( d 2 a 2 β 1 ) / γ 2 = ( 3.3 2.0 0.4 ) / 5 = 0.5 ,

γ 3 = b 3 + a 3 α 2 = 3.6 + 2.0 0.2 = 4 , α 3 = c 3 / γ 3 = 0.8 / 4 = 0.2 ,

β 3 = ( d 3 a 3 β 2 ) / γ 3 = ( 2.6 2.0 0.5 ) / 4 = 0.4 ,

γ 4 = b 4 + a 4 α 3 = 4.4 + 3.0 0.2 = 5 , β 4 = ( d 4 a 4 β 3 ) / γ 4 = ( 7.2 3.0 0.4 ) / 5 = 1.2 .

Обратный ход

x 4 = β 4 = 1.2 ,

x 3 = α 3 z 4 + β 3 = 0.2 1.2 + 0.4 = 0.64 ,

x 2 = α 2 z 3 + β 2 = 0.2 0.64 + 0.5 = 0.628 ,

x 1 = α 1 z 2 + β 1 = 0.2 0.628 + 0.4 = 0.5256 .

Итак, получаем решение:

x 1 = 0.5256 , x 2 = 0.628 , x 3 = 0.64 , x 4 = 1.2 .


Итерационные методы

Итерационный метод - метод, который строит последовательность приближений к решению;

1. Метод Якоби

  • Функция: jacobi(A, b, epsilon=1e-6, norma=1)

    • A - Матрица коэффициентов (n x n);
    • b - Вектор правой части;
    • epsilon - Заданная точность (по умолчанию 10 6 );
    • norma - Норма, по которой считается критерий окончания (например, 1, 2, np.inf).

Теорема о сходимости:

Пусть выполнено условие:

| | B | | < 1

Тогда решение системы x существует и единственно при произволном приближении x ( 0 ) МПИ сходится и справедлива оценка погрешности (априорная оценка):

| | x ( n ) x | | | | B | | n | | x ( 0 ) x | |

Апостериорная оценка:

| | x ( n ) x | | | | B | | 1 | | B | | | | x ( n ) x ( n 1 ) | |

Критерий окончания:

| | x ( n ) x ( n 1 ) | | ϵ 1

, где:

ϵ 1 = | | B | | 1 | | B | | ϵ

Более простой критерий окончания:

| | x ( n ) x ( n 1 ) | | ϵ

Описание метода:

Метод простых итераций

Метод простых итераций

x 1 k + 1 = b 11 x 1 k + b 12 x 2 k + b 13 x 3 k + + b 1 m x m k + c 1 , x 2 k + 1 = b 21 x 1 k + b 22 x 2 k + b 23 x 3 k + + b 2 m x m k + c 2 , x 3 k + 1 = b 31 x 1 k + b 32 x 2 k + b 33 x 3 k + + b 3 m x m k + c 3 , x m k + 1 = b m 1 x 1 k + b m 2 x 2 k + b m 3 x 3 k + + b m m x m k + c m ,

from mathmod.linear_systems import jacobi

x, iteration_count = jacobi(A, b, epsilon=1e-6, norma=1)

Пример:

Метод простых итераций


2. Метод Гаусса-Зейделя

  • Итерационный метод для решения СЛАУ с диагонально преобладающей матрицей.

  • Функция: gauss_zeydel(A, b, epsilon=1e-6, norma=1)

    • A - Матрица коэффициентов (n x n);
    • b - Вектор правой части;
    • epsilon - Заданная точность (по умолчанию 10 6 );
    • norma - Норма, по которой считается критерий окончания (например, 1, 2, np.inf).

Метод Зейделя

3. Метод релаксации

  • Функция: 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 ) только на множестве дискретных точек x 0 , x 1 , , x n , но само аналитическое выражение для функции неизвестно. Заменим функцию f ( x ) некоторой известной и достаточно легко вычисляемой функцией Φ ( x ) такой, что Φ ( x ) f ( x ) . Подобный процесс замены неизвестной функции некоторой близкой функцией называется аппроксимацией, а функция Φ ( x ) называется аппроксимирующей функцией.

Для аппроксимации функций широко используются классы функций вида:

Φ m ( x ) = a 0 ϕ 0 ( x ) + a 1 ϕ 1 ( x ) + + a m ϕ m ( x ) ,

являющиеся линейными комбинациями фиксированного набора базисных функций ϕ 0 ( x ) , ϕ 1 ( x ) , , ϕ m ( x ) .

Функцию ϕ m ( x ) называют обобщенным многочленом по системе функций ϕ 0 ( x ) , ϕ 1 ( x ) , , ϕ m ( x )

Число m - степенью многочлена.

Существуют два основных подхода в аппроксимации функций:

  1. Пусть точки f ( x i ) , i = 0 , 1 , , n получены в результате достаточно точных измерений или вычислений, т.е. есть основания считать их лишенными ошибок. Тогда следует выбирать аппроксимирующую функцию ϕ ( x ) такой, чтобы она совпадала со значениями исходной функции в заданных точках. Геометрически это означает, что кривая ϕ ( x ) проходит через точки ( x i , f ( x i ) ) плоскости. Такой метод приближения называется интерполяцией.

  2. Если точки f ( x i ) , i = 0 , 1 , , n содержат ошибки (данные экспериментов, статистические данные и т.п.), то функция ϕ ( x ) выбирается из условия минимума некоторого функционала, обеспечивающего сглаживание ошибок. Такой прием называется аппроксимацией функции «в среднем». Геометрически это будет означать, что кривая ϕ ( x ) будет занимать некоторое «среднее» положение, не обязательно совпадая с исходными точками ( x i , f ( x i ) ) плоскости.

Постановка задачи интерполяции

Пусть в точках x 0 , x 1 , , x n , расположенных на отрезке [ a , b ] и попарно различных.

Тогда задача итерполяции состоит в построении функции g ( x ) , удовлетворяющей условию:

g ( x ) = y i ( i = 0 , 1 , , n )

Интерполяция - способ приближения функции f ( x ) путем построения функии g ( x ) , график которой проходит через точки ( x i , y i ) .

Экстраполяция - способ приближения функции f ( x ) в точке x < x m i n или x > x m a x .

[ x m i n , x m a x ] - минимальный и максимальный из узлов интерполяции.

Теорема о существовании и единственности интерполяционного многочлена:

Если m = n , то решение задачи интерполяции обобщенным многочленом ($\Phi_m(x) = a_0\phi_0(x) + a_1\phi_1(x) + \ldots + a_m\phi_m(x)$) существует и единственно при любом наборе данных y 0 , y 1 , , y n , тогда и только тогда, когда системы функций ϕ 0 ( x ) , ϕ 1 ( x ) , , ϕ n ( x ) являются линейно независимыми в точках x 0 , x 0 , , x n .

Полиномиальная интерполяция. Многочлен Лагранжа

L n ( x ) = i = 0 n y i l n j ( x )

, где:

l i j ( x ) = k = 1 k j n ( x x k ) ( x j x i ) = ( x x 0 ) ( x x 1 ) ( x x j 1 ) ( x x j + 1 ) ( x x n ) ( x j x 0 ) ( x j x 1 ) ( x j x j 1 ) ( x j x j + 1 ) ( x j x n )

Оценка погрешности:

max [ a , b ] | f ( x ) P n ( x ) | M n + 1 ( n + 1 ) ! max [ a , b ] | ω n + 1 ( x ) |

ω n + 1 ( x ) = ( x x 0 ) ( x x 1 ) ( x x n )

M n + 1 = max [ a , b ] | f n + 1 ( x ) |

или

max [ x 0 , x n ] | f ( x ) P n ( x ) | M n + 1 4 ( n + 1 ) h m a x n + 1

h m a x = max 1 i n h i

Эта формула позволяет утвержать, что для достаточно гладкой функции f при фиксированной степени интерполяционного многочлена погрешность интерполяции на отрезке [ x 0 , x n ] при h m a x 0 стрепится к нулю не медленее, чем некоторая величина, пропорциональная h m a x n + 1 .

Итерполяция многочленом n имеет ( n + 1 ) -й порядок точности относительно h m a x .


Пример:

Пусть даны точки:

  • x 0 = 0 , y 0 = 1
  • x 1 = 1 , y 1 = 2
  • x 2 = 2 , y 2 = 4

Построим интерполяционный многочлен Лагранжа:

L 2 ( x ) = y 0 ( x x 1 ) ( x x 2 ) ( x 0 x 1 ) ( x 0 x 2 ) + y 1 ( x x 0 ) ( x x 2 ) ( x 1 x 0 ) ( x 1 x 2 ) + y 2 ( x x 0 ) ( x x 1 ) ( x 2 x 0 ) ( x 2 x 1 )

Подставляя значения:

L 2 ( x ) = 1 ( x 1 ) ( x 2 ) ( 0 1 ) ( 0 2 ) + 2 ( x 0 ) ( x 2 ) ( 1 0 ) ( 1 2 ) + 4 ( x 0 ) ( x 1 ) ( 2 0 ) ( 2 1 )

L 2 ( x ) = 1 ( x 1 ) ( x 2 ) 2 2 x ( x 2 ) 1 + 2 x ( x 1 ) 2


Интерполяционный многочлен Ньютона с конечными разностями

Пусть интерполируемая функция задана таблицей с постоянными шагом h , т.е. x i = x 0 + i h , i = 0 , 1 n . Тогда введя безразмерную величину t = x x 0 h , можно записать многочлен Ньютона:

P n ( x ) = P n ( x + h t ) = y 0 + Δ y 0 1 ! t + Δ 2 y 0 2 ! t ( t 1 ) + Δ 3 y 0 3 ! t ( t 1 ) ( t 2 ) + + Δ n y 0 n ! t ( t 1 ) ( t 2 ) ( t n + 1 )


Метод наименьших квадратов

Постановка задачи

Пусть даны точки x 0 , x 1 , , x n , и известны значения исходной фукнции f i = f ( x i ) , i = 0 , 1 , n . Требуется найти многочлен P m заданной степени m ( m = n ) такой, чтобы величина среднеквадратического отклонения:

σ ( P m , f ) = 1 1 + n i = 0 n ( P m ( x i ) f i ) 2 = 1 1 + n i = 0 n ( j = 0 n a j x i j f i ) 2

была минимальной

Нормальная система:

j = 0 m a j i = 0 n x i k + j = i = 0 n f i x i k k = 0 , 1 , m

s k = i = 0 n x i k b k = i = 0 n f i x i k

( n + 1 ) a 0 + ( i = 0 n x i ) a 1 + ( i = 0 n x i 2 ) a 2 = i = 0 n y i , ( i = 0 n x i ) a 0 + ( i = 0 n x i 2 ) a 1 + ( i = 0 n x i 3 ) a 2 = i = 0 n y i x i , ( i = 0 n x i 2 ) a 0 + ( i = 0 n x i 3 ) a 1 + ( i = 0 n x i 4 ) a 2 = i = 0 n y i x i 2 ,


Установка

Для использования библиотеки склонируйте репозиторий и установите необходимые зависимости:

git clone https://github.com/BaranovSerV/mathmod.git
cd mathmod
pip install -r requirements.txt

Releases

No releases published

Packages

No packages published