Матлаб решение системы линейных уравнений – MATLAB
Доброго времени суток, читатели! Сегодня мы поговорим о матрицах в Matlab, об их применении в решении систем линейных алгебраических уравнений. Подробно разберем методы решения, и для этого необходимо знание нескольких базовых алгоритмов.
Также стоит отметить, что у каждого алгоритма, которым мы будем искать решение СЛАУ в Matlab, своя скорость нахождения этого решения, наличие или отсутствие условия выполнения алгоритма и т.д.
В традициях нашего сайта разберём на примере:
Решить систему линейных уравнений:
4*a + b — c = 6
a — b + c = 4
2*a — 3*b — 3*c = 4
Метод обратной матрицы в Matlab
Начнем с достаточно распространенного метода. Его суть состоит в том, что сначала необходимо выписать коэффициенты при a, b и c (то есть те коэффициенты, которые находятся слева) в одну матрицу, а свободный член (то есть то, что справа) в другую.
В итоге у нас получится 2 матрицы:
A=[4 1 -1; 1 -1 1; 2 -3 -3]; % коэффициенты B=[6; 4; 4];
Для реализации этого метода (и следующих методов тоже) требуется одно условие: чтобы определитель матрицы, составленной из коэффициентов левой части не был равен нулю. Проверка на определитель:
det(A) Вывод: 30
После проверки условия можем перейти к следующему шагу: нахождение обратной матрицы. В Matlab для этого используется оператор inv .
А само решение СЛАУ в Matlab находится как перемножение найденной обратной матрицы на матрицу свободных членов:
x=inv(A)*B Вывод: 2 -1 1
Мы получили 3 значения, которые и соответствуют нашим коэффициентам: то есть a = 2, b = -1, c = 1 . Можете проверить, подставив полученные ответы в исходную систему, и убедиться, что мы решили СЛАУ правильно.
Также следует отметить, что матрицы нужно перемножать именно, как сделали мы, то есть слева обратная матрица, справа матрица свободных членов.
Если вы не все поняли, то советую вам почитать нашу статью по основам Matlab.
Метод Гаусса
Метод Гаусса в Matlab реализуется достаточно просто: для этого нам нужно всего лишь изучить один новый оператор.
(\) — левое деление.
При следующей записи:
x = A\B Вывод: 2 -1 1
Мы получим ответы на нашу исходную систему. Только заметьте, мы решили СЛАУ стандартным набором функций в Matlab, и желательно этот оператор использовать когда матрица коэффициентов квадратная, так как оператор приводит эту матрицу к треугольному виду. В других случаях могут возникнуть ошибки.
Метод разложения матрицы
Теперь поговорим о разложении матрицы. Нахождение решения через разложение матрицы очень эффективно. Эффективность обусловлена скоростью нахождения решения для данного вида систем и точностью полученных результатов.
Возможны следующие разложения:
- разложение Холецкого
- LU разложение
- QR разложение
Разберём решение через LU и QR разложение, так как в задачах чаще всего встречается задание на решение именно через такие разложения.
Основное отличие этих двух разложений: LU разложение применимо только для квадратных матриц, QR — возможно и для прямоугольных.
LU разложение
Решим выше предложенную задачу через LU разложение:
[L, U] = lu(A); Вывод: L = 1 0 0 0.25 1 0 0.5 2.8 1 U = 4 1 -1 0 -1.25 1.25 0 0 -5 Затем: y = L\B; x = U\y Вывод: 2 -1 1
QR разложение
И через QR разложение соответственно:
[Q, R] = qr(A); x = R\(Q'*B) Вывод: 2.0000 -1.0000 1.0000
Отметим, что апостроф ( ‘ ) после Q означает транспонирование.
Стандартные функции Matlab
Так же Matlab предлагает функцию linsolve , с помощью которой возможно решить систему линейных алгебраических уравнений. Выглядит это так:
x = linsolve(A,B) Вывод: 2 -1 1
Как видите, ничего сложного тут нет, на то они и стандартные функции Matlab.
Повторение
Итак, сегодня мы с вами изучили несколько методов для решения СЛАУ в Matlab, как с помощью матриц, так и с помощью стандартных функций. Давайте их повторим на другом примере:
Решить систему линейных уравнений:
6*a — b — c = 0
a — 2*b + 3*d = 0
3*a — 4*b — 4*c = -1
A=[6 -1 -1; 1 -2 3; 3 -4 -4]; B=[0; 0; -1];
- Методом обратной матрицы:
x=inv(A)*B Вывод: 0.0476 0.1810 0.1048
x = A\B Вывод: 0.0476 0.1810 0.1048
[L, U] = lu(A); y = L\B; x = U\y Вывод: 0.0476 0.1810 0.1048
[Q, R] = qr(A); x = R\(Q'*B) Вывод: 0.0476 0.1810 0.1048
На этом я с вами попрощаюсь, надеюсь, вы научились применять матрицы в Matlab для решения СЛАУ.
Поделиться ссылкой:
Похожее
3.6. Решение систем линейных уравнений средствами пакета matlab
Для решения систем линейных уравнений и связанных с ними матричных операций применяются операторы: сложения (+), вычитания (), умножения (
*), деления справа (/), деления слева (\), возведения в степень (^), транспонирования (), действие которых определяется правилами линейной алгебры.
Пусть задана система n линейных алгебраических уравнений с n неизвестными:
. (3.61)
Система уравнений (1) в матричной форме представляется следующим образом:
где А – квадратная матрица коэффициентов, размером n n строк и столбцов;
Х – вектор-столбец неизвестных;
В – вектор-столбец правых частей.
Систему уравнений (2) можно решить различными методами. Один из наиболее простых и эффективных методов является метод исключения Гаусса и его модификации. Алгоритм метода основан на приведении матрицы А к треугольному виду (прямой ход) и последовательном вычислении неизвестных (обратный ход). Эти процедуры можно выполнять над невырожденными матрицами, в противном случае метод Гаусса неприменим.
Недостатком метода является накапливание погрешностей в процессе округления, поэтому метод Гаусса без выбора главных элементов используется обычно для решения сравнительно небольших (n100) систем уравнений с плотно заполненной матрицей и не близким к нулю определителем. Если матрица А сильно разрежена, а ее определитель не близок к нулю, то метод Гаусса не пригоден для решения больших систем уравнений.
В MATLAB имеется обширный арсенал методов решения систем уравнений (2). Для этого применяются следующие операторы
возведение в степень –1;
inv(A)
обращение матрицы А.
Выражения
Х=В’/A’
Х=В’* (А^ 1)’
Х=В’* inv(A’)
Х=A\В
дают решения ряда систем линейных уравнений АХ = В, где А – матрица размером m n, В – матрица размером m к. Более сложные случаи решения систем уравнений (2) с плохо обусловленной матрицей А требуют применения специальных методов решения.
Для решения системы линейных уравнений вида
Ax=b,
где A матрица коэффициентов при неизвестных, x вектор-столбец неизвестных, b вектор-столбец свободных членов, в пакете MATLAB достаточно выполнить следующую команду:
Решить систему 4-х линейных уравнений:
Протокол программы (в скрипт-файле)
a= [1.1161 0.1397 0.1254 0.1490 ;
0.1582 0.1768 1.1675 0.1871 ;
0.1968 1.2168 0.2071 0.2271 ;
0.2368 0.2568 0.2471 1.2671] ;
b= [1.5471 ; 1.6471 ; 1.7471 ; 1.8471] ;
Х4 = а \ b
Рис.1 Скрипт-файл решения СЛАУ с помощью оператора Х=A\В
в окне редактора-отладчика
Эта программа выдает решение заданной системы с помощью четвертого оператора в виде матрицы – столбца
X3 = b’*inv(a’)
1.0406 0.9351 0.9870 0.8813
1.0406 0.9351 0.9870 0.8813
1.0406 0.9351 0.9870 0.8813
Отметим, что сравнение скорости решения системы линейных уравнений с помощью средств матричной алгебры пакета MATLAB и функции Zeidel( ), листинг которой приведен в предыдущем разделе свидетельствует о неоспоримом преимуществе первых.
Данное обстоятельство обусловлено тем, что в пакете MATLAB, который изначально разрабатывался для проведения матричных вычислений, используются специальные быстрые алгоритмы для выполнения арифметических операций с матрицами. Поэтому при решении каких-либо прикладных задач, в ходе которого возникает необходимость решения систем линейных уравнений, целесообразнее использовать встроенные возможности пакета MATLAB.
Решение систем линейных алгебраических уравнений в пакете MATLAB
Решение систем линейных алгебраических уравнений в пакете MATLAB
Ранее » Возможности MATLAB ‣ левостороннее деление › x = Ab ‣ обратная матрица › x = inv(A)*b 2/13/2018 2
Небольшие системы уравнений » Небольшая система содержит, как привило, не более трех уравнений » Решение, чаще всего, может не требовать компьютера » Методы ‣ графический ‣ Крамера ‣ исключения неизвестных 2/13/2018 3
Графический метод » 2/13/2018 4
Сложные случаи решений » Три случая 1. 2. 3. Параллельные линии › нет решения Совпадающие линии › множество решений Близкие линии › трудно определить точку пересечения » Системы в 1 и 2 случае называются – вырожденными (особыми, сингулярными) » Случай 3 соответствует плохо обусловленной системе ‣ существуют сложности при численном решении 2/13/2018 5
Метод Крамера » 2/13/2018 6
Метод Крамера » 2/13/2018 7
Исключение неизвестных » 2/13/2018 8
Исключение неизвестных » 2/13/2018 9
Метод Гаусса » 2/13/2018 10
Метод Гаусса – Прямой ход » 2/13/2018 11
Метод Гаусса – Прямой ход » 2/13/2018 12
Метод Гаусса – Прямой ход » 2/13/2018 13
Метод Гаусса – Прямой ход » 2/13/2018 14
Метод Гаусса – Обратный ход » 2/13/2018 15
Пример 2/13/2018 16
Метод Гаусса с обратной подстановкой » В рассмотренном варианте метода Гаусса могут возникнуть ситуации когда решение не может быть найдено или иметь существенную погрешность ‣ например, в случае если главный элемент равен 0, при нормализации возникает деление на 0 ‣ также существенно меньшее значение главного элемента по сравнению с остальными может привести к увеличению погрешности вычислений » Решение – выбор главного элемента ‣ частный › выбор максимального значения главного элемента с последующей перестановкой строк ‣ полный (применяется редко) › выбор максимального значения главного элемента с последующей перестановкой строк и столбцов 2/13/2018 17
Пример – Частный выбор главного элемента » 2/13/2018 18
Пример – Частный выбор главного элемента Разряды х2 х1 Ошибка х1, % 3 0, 667 -3, 33 1099 4 0, 6667 0, 0000 100 5 0, 66667 0, 30000 10 6 0, 666667 0, 330000 1 7 0, 6666667 0, 3330000 0, 1 Разряды х2 х1 Ошибка х1, % 3 0, 667 0, 333 0, 1 4 0, 6667 0, 3333 0, 01 5 0, 66667 0, 33333 0, 001 6 0, 666667 0, 333333 0, 0001 7 0, 6666667 0, 3333333 0, 0000 » 2/13/2018 19
Пример – MATLAB 2/13/2018 20
Расчет определителя матрицы » 2/13/2018 21
Факторизация матриц » В математике факторизация или факторинг — это декомпозиция объекта (например, числа, полинома или матрицы) в произведение других объектов или факторов, которые, будучи перемноженными, дают исходный объект » Целью факторизации является приведение объекта к «основным строительным блокам» ‣ Матрица может также быть факторизована на произведение матриц специального вида для приложений, в которых эта форма удобна » Виды факторизации матриц ‣ LU ‣ Холецкого ‣ QR 2/13/2018 22
LU факторизация » 2/13/2018 23
LU факторизация » 2/13/2018 24
‣ факторизация › выполняется декомпозиция матрицы А на верхнюю U и нижнюю L треугольные матрицы ‣ подстановка › прямая подстановка определяет промежуточный вектор d › обратная подстановка определяет вектор неизвестных x 2/13/2018 прямая обратная 25 подстановка » Два основных шага решения системы факторизация LU факторизация
Метод Гаусса как LU факторизация » 2/13/2018 26
Метод Гаусса как LU факторизация » 2/13/2018 27
Метод Гаусса как LU факторизация » 2/13/2018 28
Метод Гаусса как LU факторизация » 2/13/2018 29
Пример — Проверка » 2/13/2018 30
Пример — Проверка » 2/13/2018 31
Метод Гаусса как LU факторизация » 2/13/2018 32
Пример » 2/13/2018 33
Пример » 2/13/2018 34
LU факторизация с выбором главного элемента » Аналогично методу Гаусса для обеспечения надежности решения при использовании LU факторизации необходимо применять частный выбор главного элемента ‣ одним из способов является использование матрицы перестановки › единичная матрица для взаимной замены строк и столбцов 2/13/2018 35
LU факторизация с выбором главного элемента » 2/13/2018 36
Пример » 2/13/2018 37
Пример » 2/13/2018 38
LU факторизация – MATLAB функции » lu ‣ [L, U] = lu(A) – возвращает верхнюю треугольную матрицу U и психологическую нижнюю матрицу L (то есть произведение нижней треугольной матрицы и матрицы перестановок), так что A=L*U ‣ [L, U, P] = lu(A) – возвращает верхнюю треугольную матрицу U, нижнюю треугольную матрицу L и сопряженную (эрмитову) матрицу матрицы перестановок P, так что L*U =P*A 2/13/2018 39
Пример 2/13/2018 40
Факторизация Холецкого » 2/13/2018 41
Пример » 2/13/2018 42
Пример » 2/13/2018 43
Факторизация Холецкого » 2/13/2018 44
Факторизация Холецкого – MATLAB функции » chol ‣ U = chol(A) – для квадратной матрицы A возвращает верхнюю треугольную матрицу U, так что U’*U=A › Разложение Холецкого возможно для действительных и комплексных эрмитовых матриц 2/13/2018 45
Пример 2/13/2018 46
Левостороннее деление MATLAB » При использовании левостороннего деления «» MATLAB выполняет оценку матрицы коэффициентов и применяет оптимальный метод для решения ‣ MATLAB проверяет вид матрицы коэффициентов при неизвестных для возможности нахождения решения без применения полного метода Гаусса › разреженная › треугольная › симметричная ‣ В противном случае применяется для квадратной матрицы применяется метод Гаусса с частным выбором главного элемента 2/13/2018 47
QR факторизация » 2/13/2018 48
QR факторизация – MATLAB функции » qr ‣ [Q, R] = qr(A) – вычисляет верхнюю треугольную матрицу R того же размера, как и у A, и унитарную матрицу Q, так что X=Q*R ‣ [Q, R, P] = qr(A) – вычисляет матрицу перестановок P, верхнюю треугольную матрицу R с убывающими по модулю диагональными элементами и унитарную матрицу Q, так что A*P=Q*R › Матрица перестановок P выбрана так, что abs(diag(R)) уменьшается ‣ [Q, R] = qr(A, 0) и [Q, R, P] = qr(A, 0) – вычисляют экономное разложение, в котором P – вектор перестановок, так что Q*R=A(: , P) › Матрица P выбрана так, что abs(diag(R)) уменьшается 2/13/2018 49
Пример 2/13/2018 50
Итерационные методы » Итерационные или аппроксимационные методы являются альтернативой ранее рассмотренным методам решения СЛАУ, основанным на исключении неизвестных » Можно выделить два основных этапа ‣ выбор начального приближения ‣ последующее систематическое уточнение » Методы ‣ ‣ ‣ 2/13/2018 Гаусса-Зейделя Якоби релаксации бисопряженных градиентов и др. 51
Метод Гаусса-Зейделя » 2/13/2018 52
Метод Гаусса-Зейделя » 2/13/2018 53
Пример » 2/13/2018 54
Пример » 2/13/2018 55
Пример » 2/13/2018 56
Метод Якоби » Метод Гаусса-Зейделя использует найденное значение х сразу же для нахождения следующего х из другого уравнения » Несколько альтернативный подход, называемый методом Якоби, заключается в расчете всех х на основании предыдущей итерации Гаусса-Зейдель 2/13/2018 Якоби 57
Сходимость и диагональное преобладание » 2/13/2018 58
Пример » 2/13/2018 59
Метод релаксации » 2/13/2018 60
Метод релаксации » 2/13/2018 61
Пример » 2/13/2018 62
Пример » 2/13/2018 63
Пример » 2/13/2018 64
1.11 Решение систем линейных уравнений
MATLAB позволяет работать с объектами линейной алгебры, т. е. векторами и матрицами, настолько просто, насколько это вообще возможно.
Яркий пример этому – решение систем линейных уравнений.
Пусть дана система линейных уравнений
Решить систему с применением оператора обратного деления матриц .
В матричной записи система имеет вид Ах = b, где
A = , b = , х =
– соответственно матрица из коэффициентов при незвестных, вектор-столбец из свободных членов и вектор-столбец из неизвестных.
Введем матрицу А и вектор-столбец свободных членов b:
>> А=[1 3 0;-2 -2 5;1 0 -5]
Известно, что система имеет единственное решение, если определитель матрицы А не равен нулю (│A│ = det(A) ≠ 0). Вычислим определитель матрицы А:
Определитель не равен нулю. Находим решение системы с помощью оператора обратного деления матриц :
Проверим полученное решение x1 = 1, x2 = -1, x3 = 2 подстановкой в систему уравнений:
В результате проверки получен вектор-столбец свободных членов. Значит, система решена верно.
Найдем теперь решение системы х = A -1 b с помощью обратной матрицы. Вначале вычислим обратную матрицу A -1 :
-2.0000 -3.0000 -3.0000
1.0000 1.0000 1.0000
-0.4000 -0.6000 -0.8000
Находим решение системы:
Отметим, что решение системы с помощью обратной матрицы требует больше времени и памяти, к тому же этот способ может дать большую погрешность решения. Поэтому для решения линейных систем рекомендуется применять оператор обратного деления .
Решить систему линейных уравнений
>> A=[1 3 0;-2 -2 5;1 0 5]
Решение СЛАУ и матрицы в Matlab
Доброго времени суток, читатели! Сегодня мы поговорим о матрицах в Matlab, об их применении в решении систем линейных алгебраических уравнений. Подробно разберем методы решения, и для этого необходимо знание нескольких базовых алгоритмов. Также стоит отметить, что у каждого алгоритма, которым мы будем искать решение СЛАУ в Matlab, своя скорость нахождения этого решения, наличие или отсутствие условия выполнения алгоритма и т.д. В традициях нашего сайта разберём на примере: Решить систему линейных уравнений: 4*a + b — c = 6
a — b + c = 4
2*a — 3*b — 3*c = 4
Метод обратной матрицы в Matlab
Начнем с достаточно распространенного метода. Его суть состоит в том, что сначала необходимо выписать коэффициенты при a, b и c (то есть те коэффициенты, которые находятся слева) в одну матрицу, а свободный член (то есть то, что справа) в другую. В итоге у нас получится 2 матрицы:
A=[4 1 -1; 1 -1 1; 2 -3 -3]; % коэффициенты B=[6; 4; 4];
Для реализации этого метода (и следующих методов тоже) требуется одно условие: чтобы определитель матрицы, составленной из коэффициентов левой части не был равен нулю. Проверка на определитель:
det(A) Вывод: 30
После проверки условия можем перейти к следующему шагу: нахождение обратной матрицы. В Matlab для этого используется оператор inv .
А само решение СЛАУ в Matlab находится как перемножение найденной обратной матрицы на матрицу свободных членов:
x=inv(A)*B Вывод: 2 -1 1
Мы получили 3 значения, которые и соответствуют нашим коэффициентам: то есть a = 2, b = -1, c = 1 . Можете проверить, подставив полученные ответы в исходную систему, и убедиться, что мы решили СЛАУ правильно. Также следует отметить, что матрицы нужно перемножать именно, как сделали мы, то есть слева обратная матрица, справа матрица свободных членов. Если вы не все поняли, то советую вам почитать нашу статью по основам Matlab.
Метод Гаусса
Метод Гаусса в Matlab реализуется достаточно просто: для этого нам нужно всего лишь изучить один новый оператор.
(\) — левое деление.
При следующей записи:
x = A\B Вывод: 2 -1 1
Мы получим ответы на нашу исходную систему. Только заметьте, мы решили СЛАУ стандартным набором функций в Matlab, и желательно этот оператор использовать когда матрица коэффициентов квадратная, так как оператор приводит эту матрицу к треугольному виду. В других случаях могут возникнуть ошибки.
Метод разложения матрицы
- разложение Холецкого
- LU разложение
- QR разложение
Разберём решение через LU и QR разложение, так как в задачах чаще всего встречается задание на решение именно через такие разложения.
Основное отличие этих двух разложений: LU разложение применимо только для квадратных матриц, QR — возможно и для прямоугольных.
LU разложение
Решим выше предложенную задачу через LU разложение:
[L, U] = lu(A); Вывод: L = 1 0 0 0.25 1 0 0.5 2.8 1 U = 4 1 -1 0 -1.25 1.25 0 0 -5 Затем: y = L\B; x = U\y Вывод: 2 -1 1
QR разложение
И через QR разложение соответственно:
[Q, R] = qr(A); x = R\(Q'*B) Вывод: 2.0000 -1.0000 1.0000
Отметим, что апостроф ( ‘ ) после Q означает транспонирование.
Стандартные функции Matlab
Так же Matlab предлагает функцию linsolve , с помощью которой возможно решить систему линейных алгебраических уравнений. Выглядит это так:
x = linsolve(A,B) Вывод: 2 -1 1
Как видите, ничего сложного тут нет, на то они и стандартные функции Matlab.
Повторение
Итак, сегодня мы с вами изучили несколько методов для решения СЛАУ в Matlab, как с помощью матриц, так и с помощью стандартных функций. Давайте их повторим на другом примере:
Решить систему линейных уравнений:
6*a — b — c = 0
a — 2*b + 3*d = 0
3*a — 4*b — 4*c = -1
A=[6 -1 -1; 1 -2 3; 3 -4 -4]; B=[0; 0; -1];
- Методом обратной матрицы:
x=inv(A)*B Вывод: 0.0476 0.1810 0.1048
x = A\B Вывод: 0.0476 0.1810 0.1048
[L, U] = lu(A); y = L\B; x = U\y Вывод: 0.0476 0.1810 0.1048
[Q, R] = qr(A); x = R\(Q'*B) Вывод: 0.0476 0.1810 0.1048
На этом я с вами попрощаюсь, надеюсь, вы научились применять матрицы в Matlab для решения СЛАУ.
Поделиться ссылкой:
Матлаб как решить систему уравнений
Доброго времени суток, читатели! Сегодня мы поговорим о матрицах в Matlab, об их применении в решении систем линейных алгебраических уравнений. Подробно разберем методы решения, и для этого необходимо знание нескольких базовых алгоритмов.
Также стоит отметить, что у каждого алгоритма, которым мы будем искать решение СЛАУ в Matlab, своя скорость нахождения этого решения, наличие или отсутствие условия выполнения алгоритма и т.д.
В традициях нашего сайта разберём на примере:
Решить систему линейных уравнений:
4*a + b — c = 6
a — b + c = 4
2*a — 3*b — 3*c = 4
Метод обратной матрицы в Matlab
Начнем с достаточно распространенного метода. Его суть состоит в том, что сначала необходимо выписать коэффициенты при a, b и c (то есть те коэффициенты, которые находятся слева) в одну матрицу, а свободный член (то есть то, что справа) в другую.
В итоге у нас получится 2 матрицы:
Для реализации этого метода (и следующих методов тоже) требуется одно условие: чтобы определитель матрицы, составленной из коэффициентов левой части не был равен нулю. Проверка на определитель:
После проверки условия можем перейти к следующему шагу: нахождение обратной матрицы. В Matlab для этого используется оператор inv .
А само решение СЛАУ в Matlab находится как перемножение найденной обратной матрицы на матрицу свободных членов:
Мы получили 3 значения, которые и соответствуют нашим коэффициентам: то есть a = 2, b = -1, c = 1 . Можете проверить, подставив полученные ответы в исходную систему, и убедиться, что мы решили СЛАУ правильно.
Также следует отметить, что матрицы нужно перемножать именно, как сделали мы, то есть слева обратная матрица, справа матрица свободных членов.
Если вы не все поняли, то советую вам почитать нашу статью по основам Matlab.
Метод Гаусса
Метод Гаусса в Matlab реализуется достаточно просто: для этого нам нужно всего лишь изучить один новый оператор.
(\) — левое деление.
При следующей записи:
Мы получим ответы на нашу исходную систему. Только заметьте, мы решили СЛАУ стандартным набором функций в Matlab, и желательно этот оператор использовать когда матрица коэффициентов квадратная, так как оператор приводит эту матрицу к треугольному виду. В других случаях могут возникнуть ошибки.
Метод разложения матрицы
Теперь поговорим о разложении матрицы. Нахождение решения через разложение матрицы очень эффективно. Эффективность обусловлена скоростью нахождения решения для данного вида систем и точностью полученных результатов.
Возможны следующие разложения:
- разложение Холецкого
- LU разложение
- QR разложение
Разберём решение через LU и QR разложение, так как в задачах чаще всего встречается задание на решение именно через такие разложения.
Основное отличие этих двух разложений: LU разложение применимо только для квадратных матриц, QR — возможно и для прямоугольных.
LU разложение
Решим выше предложенную задачу через LU разложение:
QR разложение
И через QR разложение соответственно:
Отметим, что апостроф ( ‘ ) после Q означает транспонирование.
Стандартные функции Matlab
Так же Matlab предлагает функцию linsolve , с помощью которой возможно решить систему линейных алгебраических уравнений. Выглядит это так:
Как видите, ничего сложного тут нет, на то они и стандартные функции Matlab.
Повторение
Итак, сегодня мы с вами изучили несколько методов для решения СЛАУ в Matlab, как с помощью матриц, так и с помощью стандартных функций. Давайте их повторим на другом примере:
Решить систему линейных уравнений:
6*a — b — c = 0
a — 2*b + 3*d = 0
3*a — 4*b — 4*c = -1
- Методом обратной матрицы:
- Методом Гаусса:
- LU разложение:
- QR разложение:
На этом я с вами попрощаюсь, надеюсь, вы научились применять матрицы в Matlab для решения СЛАУ.
MATLAB — алгебра
До сих пор мы видели, что все примеры работают как в MATLAB, так и в его GNU, альтернативно называемом Octave. Но для решения основных алгебраических уравнений и MATLAB, и Octave немного отличаются, поэтому мы постараемся охватить MATLAB и Octave в отдельных разделах.
Мы также обсудим факторизацию и упрощение алгебраических выражений.
Решение основных алгебраических уравнений в MATLAB
Функция решения используется для решения алгебраических уравнений. В простейшем виде функция решения принимает в качестве аргумента уравнение, заключенное в кавычки.
Например, давайте решим для х в уравнении х-5 = 0
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Вы также можете вызвать функцию решения как —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Вы можете даже не включать правую часть уравнения —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Если в уравнение входит несколько символов, то по умолчанию MATLAB предполагает, что вы решаете для x, однако функция решения имеет другую форму —
где вы также можете упомянуть переменную.
Например, давайте решим уравнение v — u — 3t 2 = 0, для v. В этом случае мы должны написать —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Решение основных алгебраических уравнений в октаве
Функция корней используется для решения алгебраических уравнений в Octave, и вы можете написать приведенные выше примеры следующим образом:
Например, давайте решим для х в уравнении х-5 = 0
Octave выполнит приведенный выше оператор и вернет следующий результат —
Вы также можете вызвать функцию решения как —
Octave выполнит приведенный выше оператор и вернет следующий результат —
Решение квадратичных уравнений в MATLAB
Функция решения также может решать уравнения более высокого порядка. Он часто используется для решения квадратных уравнений. Функция возвращает корни уравнения в массиве.
В следующем примере решается квадратное уравнение x 2 -7x +12 = 0. Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Решение квадратичных уравнений в октаве
В следующем примере решается квадратное уравнение x 2 -7x +12 = 0 в октаве. Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Решение уравнений высшего порядка в MATLAB
Функция решения также может решать уравнения более высокого порядка. Например, давайте решим кубическое уравнение как (x-3) 2 (x-7) = 0
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
В случае уравнений более высокого порядка корни длинные, содержащие много членов. Вы можете получить числовое значение таких корней, преобразовав их в двойные. В следующем примере решается уравнение четвертого порядка x 4 — 7x 3 + 3x 2 — 5x + 9 = 0.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он возвращает следующий результат —
Обратите внимание, что последние два корня являются комплексными числами.
Решение уравнений высшего порядка в октаве
В следующем примере решается уравнение четвертого порядка x 4 — 7x 3 + 3x 2 — 5x + 9 = 0.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он возвращает следующий результат —
Решение системы уравнений в MATLAB
Функция решения также может быть использована для генерации решений систем уравнений, включающих более одной переменной. Давайте рассмотрим простой пример, чтобы продемонстрировать это использование.
Давайте решим уравнения —
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Таким же образом вы можете решать большие линейные системы. Рассмотрим следующую систему уравнений —
Решающая система уравнений в октаве
У нас есть немного другой подход к решению системы ‘n’ линейных уравнений с ‘n’ неизвестными. Давайте рассмотрим простой пример, чтобы продемонстрировать это использование.
Давайте решим уравнения —
Такая система линейных уравнений может быть записана в виде единого матричного уравнения Ax = b, где A — матрица коэффициентов, b — вектор столбцов, содержащий правую часть линейных уравнений, а x — вектор столбцов, представляющий решение как показано в программе ниже —
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Таким же образом, вы можете решить большие линейные системы, как указано ниже —
Разложение и сбор уравнений в MATLAB
Функция расширения и сбора расширяет и собирает уравнение соответственно. Следующий пример демонстрирует понятия —
Когда вы работаете со многими символическими функциями, вы должны объявить, что ваши переменные являются символическими.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Расширяя и собирая уравнения в октаве
Вам нужно иметь символьный пакет, который обеспечивает расширение и функцию сбора для расширения и сбора уравнения, соответственно. Следующий пример демонстрирует понятия —
Когда вы работаете со многими символическими функциями, вы должны объявить, что ваши переменные являются символическими, но у Octave другой подход к определению символических переменных. Обратите внимание на использование Sin и Cos , которые также определены в символической упаковке.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Факторизация и упрощение алгебраических выражений
Факторная функция разлагает выражение, а функция упрощения упрощает выражение. Следующий пример демонстрирует концепцию —
пример
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Матлаб как решить систему уравнений
Решение систем линейных уравнений
Метод обратной матрицы: для системы из n уравнений с n неизвестными , при условии что определитель матрицы не равен нулю, единственное решение можно представить в виде . Для того чтобы решить систему линейных уравнений методом обратной матрицы, необходимо выполнить следующие действия:
- сформировать матрицу коэффициентов и вектор свободных членов заданной системы;
- решить систему, представив вектор неизвестных как произведение матрицы, обратной к матрице системы, и вектора свободных членов.
Дана система уравнений:
Решаем на MATLAB :
A=[1 -2 1; 2 -5 -1; -7 0 1];
x=inv(A)*b % Решение системы x = A -1 b
Решение системы линейных уравнений при помощи метода Гаусса основывается на том, что от заданной системы, переходят к системе эквивалентной, которая решается проще, чем исходная.
Метод Гаусса состоит из двух этапов:
- Первый этап — это прямой ход, в результате которого расширенная матрица системы путем элементарных преобразований (перестановка уравнений системы, умножение уравнений на число, отличное от нуля, и сложение уравнений) приводится к ступенчатому виду.
- На втором этапе (обратный ход) ступенчатую матрицу преобразуют так, бы в первых n столбцах получилась единичная матрица. Последний, n +1 столбец этой матрицы содержит решение системы линейных уравнений.
Порядок решения задачи в MATLAB следующий:
- сформировать матрицу коэффициентов и вектор свободных членов заданной системы;
- сформировать расширенную матрицу системы, объединив и ;
- используя функцию rref, привести расширенную матрицу к ступенчатому виду;
- найти решение системы, выделив последний столбец матрицы, полученной в предыдущем пункте;
- выполнить вычисление ; если в результате получился нулевой вектор, задача решена верно.
A=[1 -2 1; 2 -5 -1; -7 0 1];
C=rref ([A b]); %Приведение расширенной матрицы к треугольному виду
x=C(1:3,4:4) %Выделение последнего столбца из матрицы
Документация
Одной из самых важных проблем в техническом вычислении является решение систем одновременных линейных уравнений.
В матричном обозначении общая проблема принимает следующую форму: Учитывая две матрицы A и b, действительно там существует уникальный матричный x, так, чтобы A x = b или x A = b?
Это поучительно, чтобы рассмотреть пример 1 на 1. Например, делает уравнение
имеет уникальное решение?
Ответ, конечно, является да. Уравнение имеет уникальное решение x = 3. Решение легко получено делением:
Решение обычно не получается путем вычисления инверсии 7, который равняется 7 –1 = 0.142857. и затем умножение 7 –1 21. Это было бы, больше работают и, если 7 –1 представлен конечному числу цифр, менее точных. Подобные факторы применяются к наборам линейных уравнений с больше чем одним неизвестным; MATLAB ® решает такие уравнения, не вычисляя инверсию матрицы.
Несмотря на то, что это не стандартное математическое обозначение, MATLAB использует терминологию деления, знакомую в скалярном случае, чтобы описать решение общей системы одновременных уравнений. Два символа деления, наклонная черта ,/, и обратная косая черта , \, соответствуют этим двум функциям MATLAB mrdivide и mldivide . Эти операторы используются для двух ситуаций, где неизвестная матрица появляется слева или право на матрицу коэффициентов:
Обозначает решение матричного уравнения xA = b, полученное использование mrdivide .
Обозначает решение матричного уравнения Ax = b, полученное использование mldivide .
Думайте о “делении” обеих сторон уравнения Ax = b или xA = b A. Матрица коэффициентов A всегда находится в “знаменателе”.
Условия совместимости размерности для x = A\b потребуйте этих двух матриц A и b иметь одинаковое число строк. Решение x затем имеет одинаковое число столбцов как b и его размерность строки равна размерности столбца A . Для x = b/A , ролями строк и столбцов обмениваются.
На практике линейные уравнения формы Ax = b происходят более часто, чем те из формы xA = b. Следовательно, обратная косая черта используется намного более часто, чем наклонная черта. Остаток от этого раздела концентрируется на операторе обратной косой черты; соответствующие свойства оператора наклонной черты могут быть выведены из идентичности:
(b/A)' = (A'\b').
Матрица коэффициентов A не должно быть квадратным. Если A имеет размер m-by-n, затем существует три случая:
Квадратная система. Ищите точное решение.
Сверхрешительная система, большим количеством уравнений, чем неизвестные. Найдите решение методом наименьших квадратов.
Недоопределенная система, меньшим количеством уравнений, чем неизвестные. Найдите основное решение с в большей части m ненулевые компоненты.
Mldivide Алгоритм
mldivide оператор использует другие решатели, чтобы обработать различные виды содействующих матриц. Различные случаи диагностированы автоматически путем исследования матрицы коэффициентов. Для получения дополнительной информации смотрите раздел “Algorithms” mldivide страница с описанием.
Общее решение
Общее решение системы линейных уравнений Ax = b описывает все возможные решения. Можно найти общее решение:
- Решение соответствующей гомогенной системы Ax = 0. Сделайте это использование null команда, путем ввода null(A) . Это возвращает базис для пробела решения к Ax = 0. Любое решение является линейной комбинацией базисных векторов.
- Нахождение конкретного решения неоднородной системы Ax =b.
Можно затем записать любое решение Ax = b как сумма конкретного решения Ax =b, от шага 2, плюс линейная комбинация базисных векторов от шага 1.
Остальная часть этого раздела описывает, как использовать MATLAB, чтобы найти конкретное решение Ax =b, как на шаге 2.
Квадратные системы
Наиболее распространенная ситуация включает квадратную матрицу коэффициентов A и один правый вектор-столбец стороны b .
Невырожденная матрица коэффициентов
Если матричный A несингулярно, затем решение, x = A\b , одного размера с b . Например:
A = pascal(3); u = [3; 1; 4]; x = A\u x = 10 -12 5
Можно проверить, что A*x точно равно u .
Если A и b являются квадратными и тот же размер, x= A\b также что размер:
b = magic(3); X = A\b X = 19 -3 -1 -17 4 13 6 0 -6
Можно проверить, что A*x точно равно b .
Оба из этих примеров имеют точные, целочисленные решения. Это вызвано тем, что матрица коэффициентов была выбрана, чтобы быть pascal(3) , который является (несингулярной) матрицей полного ранга.
Сингулярная матрица коэффициентов
A квадратной матрицы сингулярен, если он не имеет линейно независимых столбцов. Если A сингулярен, решение Ax = b или не существует или не уникален. Оператор обратной косой черты, A\b , выдает предупреждение если A почти сингулярно или если это обнаруживает точную сингулярность.
Если A сингулярен и Ax =, b имеет решение, можно найти конкретное решение, которое не уникально путем ввода
P = pinv(A)*b
pinv(A) псевдоинверсия A. Если Ax = b не имеет точного решения, то pinv(A) возвращает решение методом наименьших квадратов.
A = [ 1 3 7 -1 4 4 1 10 18 ]
сингулярно, когда можно проверить путем ввода
rank(A) ans = 2
Поскольку A не является полным рангом, он имеет некоторые равные нулю сингулярные значения.
Точные решения. Для b =[5;2;12] , уравнение Ax = b имеет точное решение, данное
pinv(A)*b ans = 0.3850 -0.1103 0.7066
Проверьте тот pinv(A)*b точное решение путем ввода
A*pinv(A)*b ans = 5.0000 2.0000 12.0000
Решения методом наименьших квадратов. Однако, если b = [3;6;0] , Ax = b не имеет точного решения. В этом случае, pinv(A)*b возвращает решение методом наименьших квадратов. Если вы вводите
A*pinv(A)*b ans = -1.0000 4.0000 2.0000
вы не возвращаете исходный вектор b .
Можно определить, имеет ли Ax =b точное решение путем нахождения, что строка уменьшала форму эшелона расширенной матрицы [A b] . Чтобы сделать так для этого примера, войти
rref([A b]) ans = 1.0000 0 2.2857 0 0 1.0000 1.5714 0 0 0 0 1.0000
Поскольку нижний ряд содержит все нули за исключением последней записи, уравнение не имеет решения. В этом случае, pinv(A) возвращает решение методом наименьших квадратов.
Сверхрешительные системы
В этом примере показано, как со сверхрешительными системами часто сталкиваются в различных видах аппроксимирования кривыми к экспериментальным данным.
Количество y измеряется в нескольких различных значениях времени t произвести следующие наблюдения. Можно ввести данные и просмотреть их в таблице со следующими операторами.
t = [0 .3 .8 1.1 1.6 2.3]'; y = [.82 .72 .63 .60 .55 .50]'; B = table(t,y)
B=6×2 table t y ___ ____ 0 0.82 0.3 0.72 0.8 0.63 1.1 0.6 1.6 0.55 2.3 0.5
Попытайтесь моделировать данные с затухающей показательной функцией
y ( t ) = c 1 + c 2 e — t .
Предыдущее уравнение говорит что векторный y должен быть аппроксимирован линейной комбинацией двух других векторов. Каждый — постоянный вектор, содержащий все единицы, и другой вектор с компонентами exp(-t) . Неизвестные коэффициенты, c 1 и c 2 , может быть вычислен путем выполнения метода наименьших квадратов, который минимизирует сумму квадратов отклонений данных из модели. Существует шесть уравнений в двух неизвестных, представленных 6 2 матрица.
E = [ones(size(t)) exp(-t)]
E = 6×2 1.0000 1.0000 1.0000 0.7408 1.0000 0.4493 1.0000 0.3329 1.0000 0.2019 1.0000 0.1003
Используйте оператор обратной косой черты, чтобы получить решение методом наименьших квадратов.
c = E\y
c = 2×1 0.4760 0.3413
Другими словами, метод наименьших квадратов к данным
y ( t ) = 0 . 4 7 6 0 + 0 . 3 4 1 3 e — t .
Следующие операторы оценивают модель в расположенном с равными интервалами шаге в t , и затем постройте результат вместе с исходными данными:
T = (0:0.1:2.5)'; Y = [ones(size(T)) exp(-T)]*c; plot(T,Y,'-',t,y,'o')
E*c не точно равно y , но различие может хорошо быть меньше погрешностей измерения в исходных данных.
Прямоугольный матричный A имеет неполный ранг, если это не имеет линейно независимых столбцов. Если A имеет неполный ранг, затем решение методом наименьших квадратов к AX = B не уникально. A\B выдает предупреждение если A имеет неполный ранг и производит решение методом наименьших квадратов. Можно использовать lsqminnorm найти решение X это имеет минимальную норму среди всех решений.
Недоопределенные системы
В этом примере показано, как решение недоопределенных систем не уникально. Недоопределенные линейные системы включают больше неизвестных, чем уравнения. Матричная операция левого деления в MATLAB находит основное решение методом наименьших квадратов, которое имеет в большей части m ненулевые компоненты для m — n матрица коэффициентов.
Вот небольшой, случайный пример:
R = [6 8 7 3; 3 5 4 1] rng(0); b = randi(8,2,1)
R = 6 8 7 3 3 5 4 1 b = 7 8
Линейная система Rp = b вовлекает два уравнения в четыре неизвестные. Поскольку матрица коэффициентов содержит маленькие целые числа, уместно использовать format команда, чтобы отобразить решение в рациональном формате. Конкретное решение получено с
format rat p = R\b
p = 0 17/7 0 -29/7
Одним из ненулевых компонентов является p(2) потому что R(:,2) столбец R с самой большой нормой. Другим ненулевым компонентом является p(4) потому что R(:,4) доминирует после R(:,2) устраняется.
Полное общее решение недоопределенной системы может быть охарактеризовано путем добавления p к произвольной линейной комбинации пустых векторов пробела, которые могут быть найдены с помощью null функция с опцией, запрашивающей рациональный базис.
Z = null(R,'r')
Z = -1/2 -7/6 -1/2 1/2 1 0 0 1
Можно проверить, что R*Z нуль и что остаточный R*x — b мал для любого векторного x , где
x = p + Z*q
Начиная со столбцов Z пустые векторы пробела, продукт Z*q линейная комбинация тех векторов:
Z q = ( x ⇀ 1 x ⇀ 2 ) ( u w ) = u x ⇀ 1 + w x ⇀ 2 .
Чтобы проиллюстрировать, выберите произвольный q и создайте x .
q = [-2; 1]; x = p + Z*q;
Вычислите норму невязки.
format short norm(R*x - b)
ans = 2.6645e-15
Когда бесконечно много решений доступны, решение с минимальной нормой особенно интересно. Можно использовать lsqminnorm вычислить решение методом наименьших квадратов минимальной нормы. Это решение имеет наименьшее значение для norm(p) .
p = lsqminnorm(R,b)
p = -207/137 365/137 79/137 -424/137
Решение для нескольких правых сторон
Некоторые проблемы касаются решения линейных систем, которые имеют ту же матрицу коэффициентов A , но различные правые стороны b . Когда различные значения b доступны одновременно, можно создать b как матрица с несколькими столбцами и решают все системы уравнений одновременно с помощью одной команды обратной косой черты: X = A\[b1 b2 b3 …] .
Однако иногда различные значения b не все доступны одновременно, что означает, что необходимо решить несколько систем уравнений последовательно. Когда вы решаете одну из этих систем уравнений с помощью наклонной черты (/) или обратная косая черта (\), оператор разлагает на множители матрицу коэффициентов A и использование это матричное разложение, чтобы вычислить решение. Однако в каждый последующий раз вы решаете аналогичную систему уравнений с различным b , оператор вычисляет то же разложение A , который является избыточным расчетом.
Решение этой проблемы состоит в том, чтобы предварительно вычислить разложение A , и затем снова используйте факторы, чтобы решить для различных значений b . На практике, однако, предварительное вычисление разложения этим способом может затруднить, поскольку необходимо знать, какое разложение вычислить (LU, LDL, Холесский, и так далее), а также как умножить факторы, чтобы решить задачу. Например, с LU-разложением необходимо решить две линейных системы, чтобы решить исходную систему Ax = b:
[L,U] = lu(A); x = U \ (L \ b);
Вместо этого рекомендуемый метод для решения линейных систем с несколькими последовательными правыми сторонами должен использовать decomposition объекты. Эти объекты позволяют вам усилить выигрыши в производительности предварительного вычисления матричного разложения, но они не требуют знания того, как использовать матричные факторы. Можно заменить предыдущее LU-разложение на:
dA = decomposition(A,'lu'); x = dA\b;
Если вы не уверены который разложение использовать, decomposition(A) выбирает правильный тип на основе свойств A , похожий на то, что делает обратная косая черта.
Вот простой тест возможных выигрышей в производительности этого подхода. Тест решает ту же разреженную линейную систему 100 раз с помощью и обратной косой черты (\) и decomposition .
n = 1e3; A = sprand(n,n,0.2) + speye(n); b = ones(n,1); % Backslash solution tic for k = 1:100 x = A\b; end toc
Elapsed time is 9.006156 seconds.
% decomposition solution tic dA = decomposition(A); for k = 1:100 x = dA\b; end toc
Elapsed time is 0.374347 seconds.
Для этой проблемы, decomposition решение намного быстрее, чем использование одной только обратной косой черты, все же синтаксис остается простым.
Итеративные методы
Если матрица коэффициентов A является большой и разреженной, методы факторизации обычно не эффективны. Iterative methods генерирует серию приближенных решений. MATLAB обеспечивает несколько итерационных методов, чтобы обработать большие, разреженные входные матрицы.
Предобусловленный метод сопряженных градиентов. Этот метод подходит для Эрмитовой положительной определенной матрицы коэффициентов A.
Метод градиентов BiConjugate
Градиенты BiConjugate стабилизированный метод
BiCGStab (l) метод
Методы сопряженных градиентов придали методу квадратную форму
Обобщенный метод минимальных невязок
Метод минимальных невязок. Этот метод подходит для Эрмитовой матрицы коэффициентов A.
Метод квази-минимальных невязок
Симметричный метод LQ
Метод QMR без транспонирования
Многопоточное вычисление
MATLAB поддерживает многопоточный расчет во многой линейной алгебре и поэлементных числовых функциях. Эти функции автоматически выполняются на нескольких потоках. Для функции или выражения, чтобы выполниться быстрее на нескольких центральных процессорах, много условий должны быть верными:
- Функция выполняет операции, что легко раздел в разделы, которые выполняются одновременно. Эти разделы должны смочь выполниться с небольшой связью между процессами. Они должны потребовать немногих последовательных операций.
- Размер данных является достаточно большим так, чтобы любые преимущества параллельного выполнения перевесили время, требуемое разделить данные и управлять отдельными потоками выполнения. Например, большинство функций убыстряется только, когда массив содержит несколько тысяч элементов или больше.
- Операция не ограничена памятью; время вычислений не во власти времени доступа к памяти. Как правило сложные функции ускоряют больше, чем простые функции.
inv , lscov , linsolve , и mldivide покажите значительное увеличение скорости на больших массивах с двойной точностью (порядка 10 000 элементов или больше), когда многопоточность будет включена.
Смотрите также
Похожие темы
- Матрицы в среде MATLAB
- Факторизации
- Собственные значения
- Сингулярные значения
Открытый пример
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?