Вычислительные методы для инженеров
Вычислительные методы для инженеров
ОглавлениеПРЕДИСЛОВИЕГлава 1. МАТЕМАТИЧЕСКОЕ МОДЕЛИРОВАНИЕ И РЕШЕНИЕ ИНЖЕНЕРНЫХ ЗАДАЧ С ПРИМЕНЕНИЕМ ЭВМ § 1.2. Основные этапы решения инженерной задачи с применением ЭВМ § 1.3. Вычислительный эксперимент § 1.4. Дополнительные замечания Глава 2. ВВЕДЕНИЕ В ЭЛЕМЕНТАРНУЮ ТЕОРИЮ ПОГРЕШНОСТЕЙ § 2.1. Источники и классификация погрешностей результата численного решения задачи § 2.2. Приближенные числа. Абсолютная и относительная погрешности 2. Правила записи приближенных чисел. 3. Округление. § 2.4. Погрешность функции § 2.5. Особенности машинной арифметики 2. Представление целых чисел. 3. Представление вещественных чисел. 4. Арифметические операции над числами с плавающей точкой. 5. Удвоенная точность. 6. Вычисление машинного эпсилон. § 2.6. Дополнительные замечания Глава 3. ВЫЧИСЛИТЕЛЬНЫЕ ЗАДАЧИ, МЕТОДЫ И АЛГОРИТМЫ. ОСНОВНЫЕ ПОНЯТИЯ § 3.2. Обусловленность вычислительной задачи 2. Примеры плохо обусловленных задач. 3. Обусловленность задачи вычисления значения функции одной переменной. 5. Обусловленность задачи вычисления суммы ряда. § 3.3. Вычислительные методы § 3.4. Корректность вычислительных алгоритмов § 3.5. Чувствительность вычислительных алгоритмов к ошибкам округления § 3.6. Различные подходы к анализу ошибок § 3.7. Требования, предъявляемые к вычислительным алгоритмам § 3.8. Дополнительные замечания Глава 4. МЕТОДЫ ОТЫСКАНИЯ РЕШЕНИЙ НЕЛИНЕЙНЫХ УРАВНЕНИЙ § 4.2. Обусловленность задачи вычисления корня § 4.3. Метод бисекции § 4.4. Метод простой итерации § 4.5. Обусловленность метода простой итерации § 4.6. Метод Ньютона § 4.8. Дополнительные замечания Глава 5. ПРЯМЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ § 5.2. Нормы вектора и матрицы § 5.3. Типы используемых матриц § 5.4. Обусловленность задачи решения системы линейных алгебраических уравнений § 5.5 Метод Гаусса § 5.6. Метод Гаусса и решение систем уравнений с несколькими правыми частями, обращение матриц, вычисление определителей § 5.7. Метод Гаусса и разложение матрицы на множители. LU-разложение § 5.8. Метод Холецкого (метод квадратных корней) § 5.10. QR-разложение матрицы. Методы вращений и отражений § 5.11. Итерационное уточнение § 5.12. Дополнительные замечания Глава 6. ИТЕРАЦИОННЫЕ МЕТОДЫ РЕШЕНИЯ СИСТЕМ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ § 6.1. Метод простой итерации § 6.2. Метод Зейделя § 6.3. Метод релаксации § 6.4. Дополнительные замечания Глава 7. МЕТОДЫ ОТЫСКАНИЯ РЕШЕНИЙ СИСТЕМ НЕЛИНЕЙНЫХ УРАВНЕНИЙ § 7. 2. Метод простой итерации § 7.3. Метод Ньютона для решения систем нелинейных уравнений 7.4. Модификации метода Ньютона § 7.5. О некоторых подходах к решению задач локализации и отыскания решений систем нелинейных уравнений Глава 8. МЕТОДЫ РЕШЕНИЯ ПРОБЛЕМЫ СОБСТВЕННЫХ ЗНАЧЕНИЙ § 8.2. Степенной метод § 8.3. Метод обратных итераций § 8.4. QR-алгоритм § 8.5. Дополнительные замечания Глава 9. МЕТОДЫ ОДНОМЕРНОЙ МИНИМИЗАЦИИ § 9.2. Обусловленность задачи минимизации § 9.3. Методы прямого поиска. Оптимальный пассивный поиск. Метод деления отрезка пополам. Методы Фибоначчи и золотого сечения § 9.4. Метод Ньютона и другие методы минимизация гладких функций § 9.5. Дополнительные замечания Глава 10. МЕТОДЫ МНОГОМЕРНОЙ МИНИМИЗАЦИИ § 10.1. Задача безусловной минимизации функции многих переменных § 10.2. Понятие о методах спуска. Покоординатный спуск § 10.4. Метод Ньютона § 10. 5. Метод сопряженных градиентов § 10.6. Метода минимизации без вычисления производных § 10.7. Дополнительные замечания Глава 11. ПРИБЛИЖЕНИЕ ФУНКЦИЙ И СМЕЖНЫЕ ВОПРОСЫ § 11.2. Интерполяция обобщенными многочленами § 11.3. Полиномиальная интерполяция. Многочлен Лагранжа § 11.4. Погрешность интерполяции § 11.5. Интерполяция с кратными узлами § 11.6. Минимизация оценки погрешности интерполяции. Многочлены Чебышева § 11.7. Конечные разности § 11.8. Разделенные разности § 11.10. Обсуждение глобальной полиномиальной интерполяции. Понятие о кусочно-полиномиальной интерполяции § 11.11. Интерполяция сплайнами § 11.12. Понятие о дискретном преобразовании Фурье и тригонометрической интерполяции § 11.13. Метод наименьших квадратов § 11.14. Равномерное приближение функций § 11.15. Дробно-рациональные аппроксимации и вычисление элементарных функций § 11.16. Дополнительные замечания Глава 12. ЧИСЛЕННОЕ ДИФФЕРЕНЦИРОВАНИЕ § 12.1. Простейшие формулы численного дифференцирования § 12.3. Обусловленность формул численного дифференцирования § 12.4. Дополнительные замечания Глава 13. ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ 13.2. Квадратурные формулы интерполяционного типа § 13.3. Квадратурные формулы Гаусса § 13.4. Апостериорные оценки погрешности. Понятие об адаптивных процедурах численного интегрирования § 13.5. Вычисление интегралов в нерегулярных случаях § 13.6. Дополнительные замечания Глава 14. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ЗАДАЧИ КОШИ ДЛЯ ОБЫКНОВЕННЫХ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ § 14.1. Задача Коши для дифференциального уравнения первого порядка § 14.2. Численные методы решения задачи Коши. Основные понятия и определения § 14.4. Метод Эйлера § 14.5. Модификации метода Эйлера второго порядка точности § 14.6. Методы Рунге-Кутты § 14.7. Линейные многошаговые методы. Методы Адамса § 14.8. Устойчивость численных методов решения задачи Коши § 14.9. Неявный метод Эйлера § 14.10. Решение задачи Коши для систем обыкновенных дифференциальных уравнений и дифференциальных уравнений m-го порядка § 14.11. Жесткие задачи § 14.12. Дополнительные замечания Глава 15. РЕШЕНИЕ ДВУХТОЧЕЧНЫХ КРАЕВЫХ ЗАДАЧ § 15.1. Краевые задачи для одномерного стационарного уравнения теплопроводности § 15.3. Метод конечных разностей: аппроксимации специального вида § 15.4. Понятие о проекционных и проекционно-разностных методах. Методы Ритца и Гадеркина. Метод конечных элементов § 15.5. Метод пристрелки § 15.6. Дополнительные замечания |
python – Построить обратную матрицу методом Гаусса
У вас несколько ошибок в коде.
Вы конструируете правую часть как
np.matrix
, поэтому послеnp. hstack
вы получаете тоже объект типа
. Это очень специальный вид массивов. В частности, итератор np.matrixm
возвращает не одномерные строки чисел, а двумерные массивы формы(1,6)
. В результатеrow[nrow]
оказывается не числом, а одномерным массивом.В
numpy
есть специальная функция для построения единичной матрицы:np.eye(n)
строит единичную матрицу размеромn x n
. Поэтому вам лучше конструироватьm
какm = np.hstack((matrix_origin, np.eye(len(matrix_origin)))
Вы инициализировали
n
как число колонок вm
:m = m.shape[1]
. Но тогда вот эта строчка неверна:
– у вас нет строк с номерами 5,4,3. Еслиn
определяет число строк, то нужно присваивать вот так:n = m.shape[0]
Но в таком случае сломается ваш код выделения правой части
np. hsplit(m, n // 2)[1]
. Я предлагаю использовать индексирование вместо hsplit:m[:, n:].copy()
есть двумерный массив, каждая строка которого есть строка изm
начиная с элемента с номеромn
, то есть элементы №№ 3,4 и 5. Как раз правая часть матрицыm
. Методcopy()
вызывается для того, чтобы не держать указатель наm
, в противном случаеm
будет висеть в памяти до тех пор, пока “жив” указатель на результат функцииinverse_matrix
После исправления этих ошибок получится что-то вроде
def inverse_matrix(matrix_origin): """ Функция получает на вход матрицу, затем добавляет к ней единичную матрицу, проводит элементарные преобразования по строкам с первоначальной, добиваясь получения слева единичной матрицы. В этом случае справа окажется матрица, которая является обратной к заданнй первоначально """ # Склеиваем 2 матрицы: слева - первоначальная, справа - единичная n = matrix_origin. shape[0] m = np.hstack((matrix_origin, np.eye(n))) for nrow, row in enumerate(m): # nrow равен номеру строки # row содержит саму строку матрицы divider = row[nrow] # диагональный элемент # делим на диагональный элемент: row /= divider # теперь вычитаем приведённую строку из всех нижележащих строк: for lower_row in m[nrow+1:]: factor = lower_row[nrow] # элемент строки в колонке nrow lower_row -= factor*row # вычитаем, чтобы получить ноль в колонке nrow # обратный ход: for k in range(n - 1, 0, -1): for row_ in range(k - 1, -1, -1): if m[row_, k]: # 1) Все элементы выше главной диагонали делаем равными нулю m[row_, :] -= m[k, :] * m[row_, k] return m[:,n:].copy()
Результат инвертирования вашей матрицы
array([[ 0.04128819, 0.09805945, 0.08980182], [ 0.15689513, -0.08790039, -0.01401625], [ 0.1734104 , -0. 18025555, 0.206115 ]])
Я добавил jupyter notebook со своим вариантом, он быстрее на 10-15% за счёт выбора операций индексирования.
Mathwords: исключение Гаусса
Mathwords: исключение Гаусса
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|