- Saved searches
- Use saved searches to filter your results more quickly
- alwayswannasky/Numerical-methods
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Реализации алгоритмов/Метод прогонки
- Python [ править ]
- Метод прогонки в Python
- Теория
- Прямой ход
- Обратный ход
- Реализация на Python
- Пример использования
- Заключение
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Различные алгоритмы численных методов на языке Python.
alwayswannasky/Numerical-methods
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Различные алгоритмы численных методов на языке Python.
Решение СЛАУ. Собственные значения и векторы
- 1 — Метод Гаусса
- 2 — Метод Жордана–Гаусса
- 3 — Метод LU–разложения
- 4 — Метод квадратных корней (схема Холецкого)
- 5 — Метод ортогонализации
- 6 — Метод прогонки
- 7 — Метод простых итераций
- 8 — Метод Якоби
- 9 — Обратная матрица(методом Гаусса)
- 10 — Решение СЛАУ в комплексном пространстве
- 11 — Максимальное и минимальное по модулю собственные значения и соответствующие им собственные векторы
- 12 — Переопределенные СЛАУ с помощью методов ортогонализации и минимизацией отклонений
Решение нелинейных уравнений и систем
- 1 — Метод половинного деления
- 2 — Метод Ньютона–Рафсона (касательных)
- 3 — Метод секущих (хорд)
- 4 — Комбинированный метод
- 5 — Метод простых итераций
- 6 — Метод Ньютона
- 7 — Метод спуска
- 8 — Решение линейных уравнений с помощью системы Штурма
Теория приближения и аппроксимация функций
- 1 — Интерполяционный многочлен Лагранжа для функции, заданной таблично
- 2 — Интерполяционный многочлен Лагранжа для заданной функции 𝑓(𝑥) с заданными узлами. Погрешность интерполяции
- 3 — Интерполяционный многочлен Ньютона для функции, заданной таблично
- 4 — Интерполяционный многочлен Ньютона для заданной функции 𝑓(𝑥) с заданными узлами. Погрешность интерполяции
- 5 — Интерполяционный многочлен Эрмита
- 6 — Интерполяционный кубический сплайн для функции из 1)
- 7 — Интерполяционный кубический сплайн для функции из 2)
- 8 — Метод наименьших квадратов, прямая линейной регрессии, аппроксимирующаю функцию, заданную таблично
- 1 — Создание таблицы с приближенными значениями производной функции 𝑓′(𝑥), используя формулы первого порядка точности
- 2 — Создание таблицs с приближенными значениями первой производной функции 𝑓′(𝑥), используя формулы второго порядка точности
- 3 — Создание таблицы приближенных значений производных функции 𝑓′′(𝑥), вычисляемых по формулам второго порядка точности
- 4 — Производные первого и второго порядков, используя интерполяционный метод
- 5 — Вычисление производных первого и второго порядков при помощи сплайнов
- 1 — Формулы прямоугольников
- 2 — Формула трапеций
- 3 — Формула Симпсона
- 4 — Формулы интерполяционного типа
- 5 — Формула Гаусса
- 6 — Первый интеграл с помощью сплайнов
- 7 — Метод Рунге–Ромберга
- 8 — Несобственный интеграл
Численное решение задачи Коши
- 1 — Метод последовательных приближений
- 2 — Метод Эйлера, его модификации
- 3 — Метод Рунге-Кутта
- 4 — Метод Адамса
- 5 — Метод Рунге-Ромберга в правом конце отрезка
Нахождение точек пересечения куба с плоскостью.
About
Различные алгоритмы численных методов на языке Python.
Реализации алгоритмов/Метод прогонки
Данный код работает при предположении, что a[0] = 0, b[n-1] = 0.
/** * n - число уравнений (строк матрицы) * b - диагональ, лежащая над главной (нумеруется: [0;n-2]) * c - главная диагональ матрицы A (нумеруется: [0;n-1]) * a - диагональ, лежащая под главной (нумеруется: [1;n-1]) * f - правая часть (столбец) * x - решение, массив x будет содержать ответ */ void solveMatrix (int n, double *a, double *c, double *b, double *f, double *x) double m; for (int i = 1; i n; i++) m = a[i]/c[i-1]; c[i] = c[i] - m*b[i-1]; f[i] = f[i] - m*f[i-1]; > x[n-1] = f[n-1]/c[n-1]; for (int i = n - 2; i >= 0; i--) x[i]=(f[i]-b[i]*x[i+1])/c[i]; > >
Python [ править ]
def TDMA(a,b,c,f): a, b, c, f = tuple(map(lambda k_list: list(map(float, k_list)), (a, b, c, f))) alpha = [-b[0] / c[0]] beta = [f[0] / c[0]] n = len(f) x = [0]*n for i in range(1, n): alpha.append(-b[i]/(a[i]*alpha[i-1] + c[i])) beta.append((f[i] - a[i]*beta[i-1])/(a[i]*alpha[i-1] + c[i])) x[n-1] = beta[n - 1] for i in range(n-1, -1, -1): x[i - 1] = alpha[i - 1]*x[i] + beta[i - 1] return x
Метод прогонки в Python
Метод прогонки является одним из наиболее распространенных численных методов для решения систем линейных уравнений с трехдиагональными матрицами. В этой статье мы покажем, как реализовать метод прогонки с помощью Python.
Теория
Для системы линейных уравнений вида:
A[0,0]*x[0] + A[0,1]*x[1] = b[0] A[1,0]*x[0] + A[1,1]*x[1] + A[1,2]*x[2] = b[1] . A[n-1,n-3]*x[n-3] + A[n-1,n-2]*x[n-2] + A[n-1,n-1]*x[n-1] = b[n-1]
где A — трехдиагональная матрица размера nxn, x — вектор решений размера n и b — вектор правой части размера n. Метод прогонки состоит из двух этапов: прямой ход и обратный ход.
Прямой ход
Прямой ход инициируется следующими начальными значениями:
Далее, используя рекуррентные соотношения, вычисляются значения P и Q для i = 1, . n-1:
P[i] = -A[i,i+1] / (A[i,i] + A[i,i-1]*P[i-1]) Q[i] = (b[i] - A[i,i-1]*Q[i-1]) / (A[i,i] + A[i,i-1]*P[i-1])
Обратный ход
На обратном ходе вычисляется решение x[n-1]:
Реализация на Python
import numpy as np def tridiagonal_solver(A, b): n = len(A) P = np.zeros(n) Q = np.zeros(n) P[0] = -A[0, 1] / A[0, 0] Q[0] = b[0] / A[0, 0] for i in range(1, n): denominator = A[i, i] + A[i, i - 1] * P[i - 1] P[i] = -A[i, i + 1] / denominator Q[i] = (b[i] - A[i, i - 1] * Q[i - 1]) / denominator x = np.zeros(n) x[n - 1] = Q[n - 1] for i in range(n - 2, -1, -1): x[i] = P[i] * x[i + 1] + Q[i] return x
Функция tridiagonal_solver принимает на вход матрицу A и вектор правой части b , а возвращает вектор решений x .
Пример использования
A = np.array([ [2, -1, 0], [-1, 2, -1], [0, -1, 2] ]) b = np.array([1, 2, 3]) x = tridiagonal_solver(A, b) print(x)
Пример выше демонстрирует использование функции tridiagonal_solver для решения системы линейных уравнений с трехдиагональной матрицей.
Заключение
Метод прогонки является эффективным алгоритмом для решения систем линейных уравнений с трехдиагональными матрицами. В этой статье мы показали, как реализовать этот метод на языке программирования Python.