Метод гаусса в mathcad
Содержание
- 1 Краткие теоретические сведения
- 2 Mathcad- программа решения систем линейных алгебраических уравнений с комплексными коэффициентами
- 3 Краткие теоретические сведения
- 4 Системы линейных алгебраических уравнений
- 5 Функция lsolve
- 6 Функция augment
- 7 Функция submatrix
- 8 Решение СЛАУ методом Гаусса
- 9 Решение СЛАУ методом Крамера
БлогNot. Основные прямые и итерационные методы решения СЛАУ в MathCAD
Основные прямые и итерационные методы решения СЛАУ в MathCAD
Как известно, решение систем линейных алгебраических уравнений (СЛАУ) – весьма распространённый на практике тип задач. Теорию можно почитать по ссылке, а здесь приведём основные расчёты как для прямых (аналитических), так и для итерационных (приближённых) методов решения СЛАУ.
Начнём с прямых. Классический метод обратной матрицы в MathCAD легко реализовать с помощью стандартной функции lsolve или же посредством операции обращения матрицы, код приводить не будем из-за его тривиальности.
Уже двое спросили "а как всё же найти решение методом обратной матрицы?" 🙂
Введя данные, как на картинке ниже, под данными написать одну из формул x:=A -1 *b или x:=lsolve(A,b)
Затем ещё ниже сделать x=
А вот метод Крамера запрограммируем. Элемент вектора решения xi в нём получается в виде дроби, знаменателем которой является определитель матрицы системы, а числителем – определитель матрицы Ai , полученной из исходной заменой i-го столбца столбцом свободных членов b . Для удобства будем во всём документе нумеровать строки и столбцы матриц с единицы, то есть, установим значение системной переменной ORIGIN:=1 . Также определим общие для всех методов матрицу и вектор правой части системы:
Условием существования и единственности решения СЛАУ во всех случаях является условие det A≠0 , т.е., определитель матрицы A не равен нулю. Также имеет смысл сделать проверку полученного решения, посчитав значение невязки, равное норме разности векторов A*x ( x – найденное решение) и b . В идеале невязка должна быть равной нулю, но из-за неизбежного накопления погрешностей операций над вещественными числами она окажется равна малому числу ε , соответствующему погрешности метода. В MathCAD скалярный оператор "модуль" с панели инструментов калькулятора в применении к разности векторов даст как раз значение невязки, проверим это утверждение на небольшом тесте:
С учётом всего сказанного, реализуем метод Крамера и проверку полученного решения:
В теле функции det – не модуль, а похожая внешне кнопка "Определитель" с панели "Матрицы"!
Классический метод Гаусса с приведением матрицы к верхнему треугольному виду подробно изучается в базовом курсе высшей математики. Реализуем самую простую его разновидность, выбирающую ведущий элемент на главной диагонали матрицы, то есть, работающую в предположении, что значение A1,1,≠0 . Так как эта подпрограмма "нулевого" уровня, назовём её Gauss0 , а более сложную Gauss напишем отдельно.
Для удобства вектор правой части b записан как (n+1) -й столбец матрицы A , такую матрицу системы называют расширенной.
Реализация более "полноценного" метода Гаусса с выбором ведущего элемента (и перестановкой при необходимости строк матрицы) выполнена в приложенном к статье документе MathCAD, по крайней мере, систему с нулями на главной диагонали матрицы подпрограмма Gauss решила. Её дополнительный параметр – погрешность ε , начиная с которой значение |Ai,j| считается равным нулю. В случае ошибки (нет решения) подпрограмма возвращает вектор из n значений "бесконечность".
На практике нетрудно увидеть общие для всех прямых методов недостатки подхода – трудоёмкость вычислений, требующая брать обратные матрицы или считать определители, следующее из неё довольно быстрое накопление погрешности, наконец, невозможность найти решение с заранее заданной, а не заложенной в алгоритм точностью.
В определённой мере избежать этих недостатков позволяют итерационные методы, последовательно приближающие решение формулами вида xi (k+1) = f(xi (k) ) , где k=0,1. – номер шага, до тех пор, пока выбранная мера разности между двумя соседними векторами приближениямй |x (k+1) -x (k) | не станет меньше заданного малого значения ε . В простейшем случае решение СЛАУ с матрицей размерности 2*2 методом Якоби (он же – метод простых итераций) будет выглядеть так:
Все неизвестные значения xi присутствуют и в левой, и в правой частях новых уравнений. Выбрав некоторый вектор начального приближения x (0) , посчитаем по нему новое приближение x (1) , затем подставим его в правые части уравнений и посчитаем x (2) и т.д. до выполнения условия сходимости. А оно, кстати, довольно просто – метод Якоби сходится, если матрица системы имеет диагональное преобладание, то есть, на главной диагонали находятся наибольшие в своих строках элементы. Наша тестовая матрица уже имеет диагональное преобладание, а в большинстве других случаев этого можно добиться, выполняя преобразования над уравнениями системы, подобные тем, что делает расширенная процедура Gauss .
Выбор вектора начального приближения x (0) на практике также обычно прост, принимают x (0) =b , то есть, вектору правой части системы. Можно и просто "занулить" вектор x (0) .
Приходим к следующей процедуре решения:
Обратите внимание, что нам пришлось "схитрить" при расчёте сумм s1 и s2 – MathCAD просто не сможет вычислить сумму с нижним пределом суммирования =1 и верхним =0 (или нижним n и верхним n-1 ). По той же причине дополнительные проверки сделаны и в процедуре Gauss .
В основной "бесконечный" цикл подпрограммы имеет смысл добавить аварийный выход оператором break , например, по выполнении 10000 шагов.
Также, в этом и следующем методе в строчке с break точнее был бы критерий выхода |max(x1-x0)|≤ε , где | | – значок модуля числа с панели калькулятора.
Итерационный метод Гаусса-Зейделя отличается от метода простых итераций лишь тем, что для подсчета i –й компоненты (k+1) –го приближения к искомому вектору решения используются уже вычисленные на этом, т.е., (k+1) –м шаге новые значения первых i–1 компонент. а не просто берётся вектор x0 целиком с предыдущего шага. В нашей подпрограмме достаточно заменить x0 на x1 в операторе расчёта суммы s1 🙂 У меня точность решения на использованном тесте выросла при этом вчетверо.
Прямые и итерационные методы решения СЛАУ: скачать документ .xmcd Mathcad 14/15 в архиве .zip (56 Кб)
P.S. И ещё про прямые "гауссоподобные" методы решения СЛАУ. Если Вам нужно не пошаговое программирование, а достаточно применения стандартных функций, есть способ проще. С помощью стандартной функции augment можно получить расширенную матрицу системы (поставив "рядом" матрицу A и вектор b ), а с помощью rref привести матрицу к ступенчатому виду с единичным базисным минором. Потом останется извлечь решение с помощью метода submatrix (последний столбец матрицы, которую вернул метод rref ).
Норма вектора |A*x-b| , как и другие нормы в статье, берётся кнопкой |x| с Калькулятора, а не похожей на неё кнопкой с панели "Матрицы".
21.09.2013, 11:24; рейтинг: 39395
Краткие теоретические сведения
В системе Mathcad возможно решение систем линейных алгебраических уравнений с комплексными коэффициентами. Любое выражение, начинающееся с цифры, Mathcad интерпретирует как число. Большинство операций в среде Mathcad по умолчанию осуществляется над комплексными числами. В Mathcad комплексное число представляется в алгебраической форме. Чтобы ввести комплексное число следует в начале ввести действительную часть комплексного числа, затем знак + или – , коэффициент перед мнимой частью (это может быть любое действительное число), а затем символ . Для ввода мнимой единицы надо нажать клавиши ,. Комплексное число можно ввести в виде обычной суммы действительной и мнимой частей или в виде выражения, содержащего мнимое число. В Mathcadе используют две встроенные константы, обозначающие мнимую единицу .
Из курса линейной алгебры известно, система линейных алгебраических уравнений (СЛАУ) имеет единственное решение, если ее матрица коэффициентов является невырожденной. Самый простой способ решения таких систем – использование алгоритма Гаусса, реализованного во встроенной функции Lsolve.
Для применения этого способа необходимо, чтобы СЛАУ была записана в матричной форме.
Для обращения к функции нужно указать два аргумента: . В функции Lsolve запрограммирован численный метод LU-разложения, основанный на алгоритме последовательных исключений Гаусса. Суть его состоит в преобразовании матрицы коэффициентов к верхнему треугольному виду, т.е. к форме, когда все элементы ниже главной диагонали матрицы являются нулевыми. Результат, выдаваемый методом Гаусса, является точным.
Расширенная матрица коэффициентов принимает вид:
Mathcad- программа решения систем линейных алгебраических уравнений с комплексными коэффициентами
В результате получили , что значения контурных токов, найденные с помощью Excel программы совпадают со значения, найденными в Mathcad программе.
Краткие теоретические сведения
Численные методы решения обыкновенных дифференциальных уравнений используются для расчета переходных процессов в электроэнергетических системах. Рекомендуемый численный метод расчета переходного процесса – метод Рунге-Кутта. Все изложение ведется под реализацию этого метода.
В качестве исходных данных задачи имеем:
1. Систему обыкновенных дифференциальных уравнений 1-го порядка, описывающую переходный процесс в электроэнергетической системе.
2. Начальные условия Коши. Под начальными условиями Коши понимают значения искомых переменных при .
3. Интервал интегрирования системы обыкновенных дифференциальных уравнений. Переходные процессы в линейных электрических цепях обычно являются быстропротекающими, длительность их составляет десятые, сотые доли секунды.
Должен быть задан шаг интегрирования . В Mathcad имеется несколько встроенных функций, которые позволяют решать задачу Коши для систем обыкновенных дифференциальных уравнений 1-го порядка:
· – метод Рунге-Кутта с фиксированным шагом ;
· – метод Рунге-Кутта с переменным шагом ;
У этих функций следующие аргументы:
-вектор начальных значений в точке размерностью ,
– начальная точка расчета,
– конечная точка расчета,
– число шагов, на которых численный метод находит решение, эта переменная однозначно определяет шаг интегрирования, он равен длине отрезка интегрирования , деленному на число , чем больше число , тем точнее найденное решение,
– векторная функция размера двух аргументов – скалярного и векторного . При этом – искомая векторная функция аргумента того же
Постановка задач 3
Основная часть 3
Системы линейных алгебраических уравнений 3
Функция lsolve 4
Функция augment 5
Функция submatrix 6
Решение СЛАУ методом Гаусса 7
Решение СЛАУ методом Крамера 8
Список использованных источников 10
Научиться решать системы линейных уравнений средствами Mathcad.
Изучить материал по линейной алгебре, необходимый для
выполнения лабораторной работы;
Изучить свойство функций lsolve, augment и submatrix в программе
Научиться применять функции lsolve, augment и submatrix в
среде Mathcad для решения систем линейных алгебраических уравнений методами Гаусса и Крамера.
Системы линейных алгебраических уравнений
Центральным вопросом вычислительной линейной алгебры является решение систем линейных алгебраических уравнений (СЛАУ), т. е. систем уравнений вида
В матричной форме СЛАУ записывается в эквивалентном виде:
,
где А — матрица коэффициентов СЛАУ размерности mxn;
х — вектор-столбец неизвестных;
b— вектор-столбец свободных коэффициентов.
СЛАУ имеет единственное решение, если матрица А является невырожденной, т. е. ее определитель не равен нулю.
Для упрощения решений подобных систем уравнений была создана программа Mathcad, с набором различных встроенных функций, предназначенных для решения СЛАУ, некоторые из них, такие как lsolve, augment и submatrix, мы рассмотрим далее в работе.
Функция lsolve
В Mathcad СЛАУ можно решить в более удобной для записи форме (2), с помощью функции lsolve.
Lsolve(A,b) – это встроенная функция, которая возвращает вектор x для системы линейных уравнений при заданной матрице коэффициентов А и векторе свободных членов b.
Функцию lsolve применяют в работе с Mathcad следующим образом (скриншот 1):
создается в документе требуемая СЛАУ;
опираясь на заданную СЛАУ, создаем матрицу коэффициентов –
А необходимой размерности и матрицу свободных коэффициентов – b;
в панели инструментов выбираем необходимую нам функцию –
подставляем в выбранную функцию необходимые параметры А, b;
Скриншот 1 – применение функции lsolve в Mathcad
Функция augment
Функцию augment применяют для решения СЛАУ методами Крамера и Гаусса в программе Mathcad.
Аugment(A,B) – это встроенная функция, которая объединяет матрицы A и B в одну новую, при этом матрица B располагается справа от матрицы A, и обе матрицы должны иметь одинаковое число строк.
Функцию augment применяют в работе с Mathcad следующим образом (скриншот 2):
создается в документе требуемая СЛАУ;
опираясь на заданную СЛАУ, создаем матрицу коэффициентов –
А необходимой размерности и матрицу свободных коэффициентов – b, при этом матрица b должна располагаться справа от матрицы A;
в панели инструментов выбираем необходимую нам функцию –
подставляем в выбранную функцию необходимые параметры А, b;
получаем объединенную матрицу матриц A и b.
Скриншот 2 – применение функции augment в Mathcad
Функция submatrix
Функцию submatrix, также как и функцию augment и lsolve, применяют для решения СЛАУ в программе Mathcad.
Функция submatrix(А,_,_,_,_) – встроенная функция, с помощью которой можно выделить из заданной матрицы один столбец или строку.
Функцию submatrix применяют в работе с Mathcad следующим образом (скриншот 3):
создают матрицу, какой-либо размерности;
в панели инструментов выбираем необходимую нам функцию –
подставляем в выбранную функцию параметры, с помощью
значения которых мы хотим выделить столбцы или строки в новую матрицу;
Скриншот 3 – применение функции submatrix в Mathcad
Решение СЛАУ методом Гаусса
СЛАУ в программе Mathcad можно решать не только с помощью функции lsolve, но и с помощью рассмотренных выше функций augment и submatrix, используя следующий ход вычислений (скриншот 4):
создается в документе СЛАУ;
выбрав из встроенных функций функцию ORIGIN, присваиваем ей
значение равное единице (роль данной функции заключается в том, что в последующем решении системы, в матрицах первая строка, будет иметь первый коэффициент, равный единице);
опираясь на заданную СЛАУ, создаем матрицу коэффициентов –
А необходимой размерности и матрицу свободных коэффициентов – b;
с помощь функции augment, создаем объединенную матрицу;
выбираем из встроенных функций функцию rref, и присваиваем ей
параметр, соответствующий объединенной матрице (с помощью функции rref приводим матрицу к ступенчатому виду для дальнейшего решения);
используя функцию submatrix, находим неизвестные.
Скриншот 4 – решение СЛАУ в Mathcad методом Гаусса
Решение СЛАУ методом Крамера
СЛАУ можно решать не только методом Гаусса, но и методом Крамера. Для того чтобы произвести вычисления в программе Mathcad, достаточно двух, уже изученных нами функций: augment и submatrix.
Ход решения СЛАУ в Mathcad (скриншот 5):
создается в документе СЛАУ;
выбрав из встроенных функций функцию ORIGIN, присваиваем ей
значение равное единице;
опираясь на заданную СЛАУ, создаем матрицу коэффициентов –
А необходимой размерности и матрицу свободных коэффициентов – b;
вычисляем определитель матрицы А;
с помощью функций augment и submatrix создаем матрицы с
заменой необходимого нам столбца столбцом свободных коэффициентов – b;
вычисляем определители полученных матриц;
находим неизвестные СЛАУ по формуле Крамера:
подставляя в нее полученные значения определителей.
Скриншот 5 – решение СЛАУ в Mathcad методом Крамера
Программа Mathcad позволяет упростить решение СЛАУ с помощью встроенных в нее функций. Так, c помощью функции lsolve, система линейных уравнений решается в одно действие. СЛАУ методом Гаусса с помощью функций augment и submatrix решается гораздо быстрей и проще, нежели это было бы на бумаге. В данной работе были приведены решения простейших систем уравнений, которые вычислить и на бумаге не составит труда, но с помощью программы Mathcad можно решить сложнейшие системы в кротчайшее время, над решениями которых человек затратит много времени. В работе были рассмотрены всего лишь несколько функций из множества приведенных в Mathcad.
1 Плис, А. И. Mathcad: математический практикум для экономистов и инженеров: учеб. пособие/ А. И. Плис, Н. А. Сливина. – М., 1999. – 656с.
2 Панферов, А. И. Применение Mathcad в инженерных расчетах: учеб. пособие/ А. И. Панферов, А. В. Лопарев, В. К. Пономарев – М., 2004. – 88с.
3 Симонович, С. В. Информатика: базовый курс: учеб. для вузов/ С. В. Симонович – Питер, 2001. – 640с.
4 Шипачев, В. С. Высшая математика: учеб./ В. С. Шипачев – М., 1998. – 479с.
5 Черненко, В. Д. Высшая математика в примерах и задачах: учеб. пособие/ В. Д. Черненко – М., 2003. – 703с.