Рішення Слау і матриці в 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 для вирішення СЛАР.
Поділитися посиланням:
Спочатку знайдемо 4 визначника матриць, складених таким чином:
A = [4 1 -1; 1 -1 1; 2 -3 -3]; % Матриця коеф
A1 = [6 1 -1; 4 -1 1; 4 -3 -3]; % Заміна 1 стовпчика на стовпець вільних членів
A2 = [4 6 -1; 1 4 1, 2 4 -3]; % Заміна 2 стовпці
A3 = [4 1 6; 1 -1 4; 2 -3 4]; % Заміна 3 стовпці
d = det (A); % Висновок: 30
d1 = det (A1); % Висновок: 60
d2 = det (A2); % Висновок: -30
d3 = det (A3); % Висновок: 30
Потім знайдемо коефіцієнти:
a = d1 / d; % Висновок: 2
b = d2 / d; % Висновок: -1
c = d3 / d; % Висновок: 1
Відповідь отримано вірно.
Метод Жордана-Гаусса, який також називається метод виключення Гаусса, вирішується в MATLAB таким чином:
>> A = [4 1 -1; 1 -1 1; 2 -3 -3]; b = [6; 4; 4]
>> C = rref ([A b])% приведення розширеної матриці до трикутного вигляду
>> x = C (1: 3,4: 4)% виділення останнього стовпчика з матриці - це рішення системи рівнянь
>> A * x% перевірка