- 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.
Метод простой итерации для решения систем линейных уравнений
Решение систем линейных уравнений приближёнными методами. Метод итераций
Добрый день всем, произошла проблема в решении данной задачи, не понимаю как это сделать, помогите.
Нужно написать программу для решения систем 4-х линейных алгебраических уравнений с 4-мя неизвестными
Нужно написать программу для решения систем 4-х линейных алгебраических уравнений с 4-мя.
Метод простой итерации для решения системы линейных уравнений
Здравствуйте. Помогите пожалуйста разобраться в методе простых итераций решения системы нелинейных.
Метод итерации решения систем линейных уравнений с использованием прикладного пакета MathCad
Добрый день, друзья. Подскажите или помогите с решением примеров по этой теме. Курсовую пишу, а с.
Метод простых итерации для систем не линейных уравнений
Пишу программу вот ее код disp(‘Метод простых итерации для ‘) x(1)=1; y(1)=1; for i=1:100 .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
import numpy as np def sort_diag_arr(a) : n = len(a) a = np.array(a) for i in range(n): ind = np.abs(a[i:, i:n]).argmax() row = ind // (n - i) + i col = ind % (n - i) + i a[:,[i, col]] = a[:,[col, i]] a[[i, row], :] = a[[row, i], :] return a A = [ [1.7,2.8,1.9], [2.1,3.4,1.8], [4.2,-1.7,1.3]] B = [0.7,1.1,2.8] eps = 1e-3 a = np.array(A) a = sort_diag_arr(a) print(a) diag = (1/np.diag(a)).reshape(-1,1) a[np.diag_indices_from(a)] = 0. a = np.hstack((-a, np.array(B).reshape(-1, 1))) * diag x = a[:,-1].ravel() x = np.append(x, 1) tmp = x.copy() + eps cnt = 0 while abs(x-tmp).sum() > eps: tmp = x.copy() x = a.dot(x) x = np.append(x, 1) cnt += 1 print(x[:-1].round(), cnt)
Сообщение было отмечено Shket как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
import numpy as np def sort_diag_arr(a,b) : n = len(a) a = np.array(a) b = np.array(b) for i in range(n): ind = np.abs(a[i:, i:n]).argmax() row = ind // (n - i) + i col = ind % (n - i) + i a[:,[i, col]] = a[:,[col, i]] a[[i, row], :] = a[[row, i], :] b[i], b[row] = b[row], b[i] return a, b A = [ [1.7,2.8,1.9], [2.1,3.4,1.8], [4.2,-1.7,1.3]] B = [0.7,1.1,2.8] eps = 1e-3 a, b = sort_diag_arr(A,B) diag = (1/np.diag(a)).reshape(-1,1) a[np.diag_indices_from(a)] = 0. a = np.hstack((-a, b.reshape(-1, 1))) * diag x = a[:,-1].ravel() x = np.append(x, 1) tmp = x.copy() + eps cnt = 0 while abs(x-tmp).sum() > eps: tmp = x.copy() x = a.dot(x) x = np.append(x, 1) cnt += 1 print(x[:-1].round(3), cnt)
Добавлено через 1 минуту
Shket, Вот без numpy. Но и без сортировки по убыванию по диагонали:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
A = [[4.2, -1.7, 1.3], [ 2.1, 3.4, 1.8], [ 1.7, 2.8, 1.9]] B = [2.8,1.1,0.7] # точность итераций eps = .001 x = [] n = len(A) for j in range(n): k = A[j][j] for i in range(n): A[j][i] /= -k A[j][j] = 0 B[j] /= k # r - счетчик итераций r = 0 x = B.copy() tmp = sum(x) + 2*eps while abs(sum(x)-tmp) > eps: tmp = sum(x) t = [0]*n for i in range(n): t[i] = sum(x[j]*A[i][j] for j in range(n)) + B[i] r += 1 x = t.copy() print(x) print(*(round(elem,3) for elem in x)) print(r)
Метод простых итераций на Python
Метод простых итераций – это итерационный метод для решения систем линейных уравнений, который заключается в последовательном приближении к решению исходной системы путем повторения одного и того же алгоритма.
Алгоритм метода простых итераций для системы линейных уравнений AX=B следующий:
- Преобразовать систему уравнений AX=B к виду X=BX+C, где B – матрица перехода, а C – вектор сдвига.
- Выбрать начальное приближение X0.
- Найти новое приближение X1=BX0+C.
- Повторять шаг 3 до тех пор, пока не будет достигнута требуемая точность или не будет выполнено максимальное количество итераций.
Когда необходимо применять метод итераций?
Метод итераций обычно применяется в случаях, когда матрица системы является разреженной или имеет специальную структуру, например, когда матрица является диагонально преобладающей или симметричной. В таких случаях метод итераций может оказаться более эффективным, чем, например, метод Гаусса.
Однако, следует учитывать, что метод итераций может быть медленным и требовать большое количество итераций для достижения требуемой точности, особенно если матрица системы имеет плохую обусловленность. Также, метод итераций может быть неустойчивым при некоторых условиях, и в таких случаях следует использовать другие методы решения СЛАУ.
Решение СЛАУ методом простых итераций по шагам
- Для решения данной задачи мы используем библиотеку numpy , которая позволит упросить код и сконцентрироваться на главном.
- Далее мы зададим начальные значения переменным, которые дальше будем использовать. Мы обозначим коэффициенты системы уравнений и столбец свободных членов, а также максимальное количество итераций и желаемую точность решения СЛАУ.
A = np.array([[10, 2, 0], [1, 5, 1], [2, 3, 10]]) b = np.array([7, -8, 6]) max_iterations = 100 tolerance = 1e-6
- Далее зададим начальное приложение согласно формуле, используя библиотеку numpy и её функцию zeros .
- Затем мы начинаем итерации. Каждая итерация состоит из цикла по всем элементам вектора решения. В этом цикле мы сначала вычисляем сумму всех элементов строки, кроме текущего, затем вычитаем эту сумму из соответствующего свободного члена и делим на диагональный элемент. Это дает новое приближение для соответствующего элемента вектора решения.
for i in range(max_iterations): x1 = np.zeros(len(b)) for j in range(len(b)): s = 0 for k in range(len(b)): if k != j: s += A[j,k] * x0[k] x1[j] = (b[j] - s) / A[j,j] if np.allclose(x0, x1, rtol=tolerance): break x0 = x1
Метод простых итераций, готовый код
import numpy as np # задаем коэффициенты системы уравнений A = np.array([[10, 2, 0], [1, 5, 1], [2, 3, 10]]) b = np.array([7, -8, 6]) # задаем начальное приближение x0 x0 = np.zeros(len(b)) # задаем максимальное число итераций и желаемую точность решения max_iterations = 100 tolerance = 1e-6 # выполняем итерации for i in range(max_iterations): x1 = np.zeros(len(b)) for j in range(len(b)): s = 0 for k in range(len(b)): if k != j: s += A[j,k] * x0[k] x1[j] = (b[j] - s) / A[j,j] if np.allclose(x0, x1, rtol=tolerance): break x0 = x1 # выводим решение print("Solution:", x1)
Выделение отдельной функции метода простых итераций
В теории, это код может потребоваться вам в абсолютно разных ситуациях и было бы лучше, если бы у вас сразу была готовая функция, в которую нужно было бы передавать аргументы.
import numpy as np def iteration_method(A, b, x0, max_iterations, tolerance): x0 = np.zeros(len(b)) for i in range(max_iterations): x1 = np.zeros(len(b)) for j in range(len(b)): s = 0 for k in range(len(b)): if k != j: s += A[j,k] * x0[k] x1[j] = (b[j] - s) / A[j,j] if np.allclose(x0, x1, rtol=tolerance): break x0 = x1 return x1 A = np.array([[10, 2, 0], [1, 5, 1], [2, 3, 10]]) b = np.array([7, -8, 6]) max_iterations = 100 tolerance = 1e-6 x = iteration_method(A, B, max_iterations, tolerance) print("Solution:", x)
Метод простых итераций на Python
Метод простых итераций (или метод последовательных приближений) – это численный метод для решения нелинейных уравнений. Он основан на преобразовании уравнения к эквивалентному виду, который имеет фиксированную точку, т.е. решение уравнения является неподвижной точкой этого преобразования.
Алгоритм метода простых итераций
Пусть дано нелинейное уравнение вида f(x) = 0, где f(x) – некоторая функция. Метод простых итераций заключается в следующих шагах:
- Преобразовать уравнение f(x) = 0 к виду x = g(x), где g(x) – некоторая функция.
- Выбрать начальное приближение x0.
- Построить последовательность приближений x1, x2, x3, …, используя формулу x_ = g(x_n).
- Повторять шаг 3 до тех пор, пока разность между двумя последовательными приближениями не станет меньше заданной точности.
- Приближенное решение уравнения f(x) = 0 равно пределу последовательности x_n.
Решение уравнения методом простой итераций по шагам
x0 = 1 max_iter = 100 accuracy = 1e-6
for i in range(max_iter): x1 = g(x0) if abs(x1 - x0) < accuracy: # Проверяем, достигнута ли требуемая точность break x0 = x1
Метод простых итераций на Python, готовый код
# Импортируем математическую библиотеку import math # Задаем уравнение, которое мы будем решать def f(x): return math.sin(x) # Задаем функцию, которую мы будем использовать для простых итераций def g(x): return math.cos(x) # Задаем начальное приближение и максимальное число итераций x0 = 1 max_iter = 100 accuracy = 1e-6 # Итерационный процесс for i in range(max_iter): x1 = g(x0) if abs(x1 - x0) < accuracy: # Проверяем, достигнута ли требуемая точность break x0 = x1 # Выводим результат print("Корень уравнения: ", x0)
Результат выполнения в консоли:
Как мы видим, программа получилась довольно простой и решение нелинейных уравнений с помощью метода простых итераций не так сложно.