Как решить систему уравнений в матлабе через solve

Решение СЛАУ и матрицы в 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 для решения СЛАУ.

Решение уравнений и их систем – команда solve

Дата добавления: 2015-06-12 ; просмотров: 5209 ; Нарушение авторских прав

Для решения систем уравнений и одиночных уравнений служит команда

solve(expr1, expr2. exprN, var1, var2. varN). Она возвращает значения переменных varI, при которых соблюдаются равенства, заданные выражениями exprI. Если в выражениях не используются знаки равенства, то полагается, что exprI = 0.

Результат может быть возвращен в следующих формах:

для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек;

при одинаковом числе уравнений и переменных решение возвращается в упорядоченном по именам переменных виде.

Команда solve позволяет найти не только вещественные, но и комплексные решения систем уравнений и одиночных уравнений. Справку по этой команде можно получить, введя команду doc solve.

Решить уравнение x 3 — 1 = 0.

В результате получены три разных значения корня x1 = 1, x2 = , x3 = , которые хранятся соответственно в элементах S(1), S(2), S(3) массива S.

С помощью subs (разд. 7.7) подставим найденные значения корней в выражение x 3 — 1:

Выражение x 3 — 1 принимает значение 0 при подстановке любого из найденных корней, поэтому x1, x2, x3 являются точными корнями уравнения x 3 — 1 = 0.

Команда roots (см. разд. 6.1) нашла бы только приближенные значения корней уравнения x 3 — 1 = 0. В общем случае полиномиальное уравнение степени выше 4 не может иметь точного решения, выраженного с помощью радикалов.

Команда solve позволяет решать уравнения, представленные в аналитическом виде.

Решить квадратное уравнение ax 2 +bx+c = 0.

Команда solve возвратила известные выражения корней x1,2 = квадратного уравнения ax 2 +bx+c = 0. Точно также можно выразить с помощью радикалов решения кубического уравнения ax 3 +bx 2 +cx+d = 0, хотя эти выражения достаточно сложные.

Решить трансцендентное уравнение x lnx +1 — 1 = 0.

В данном случае solve нашла точные значения корней x1 = 1, x2 = e −1 .

Решить трансцендентное уравнение lnx + 3 — x = 0.

Команда solve возвратила значения корней, выраженные через функцию Ламберта.

Команда vpa возвращает приближенные значения этих корней, вычисленные с 20 значащими цифрами:

Каждый из приближенных корней этого уравнения был найден по отдельности в разделе 6.2 с помощью команды fzero. Отметим, что команда solve нашла приближенные значения двух корней одновременно с высокой точностью. При этом не пришлось графически определять интервалы изоляции корней.

Решение любого трансцендентного уравнения, в том числе и тригонометрического (разд. 7.17), достаточно сложная и серьезная проблема. Иногда solve возвращает неверные решения.

Решить трансцендентное уравнение sinx lnsinx +x x — 2 = 0.

Найденное решение неверное, т. к. оно не прошло проверку подстановкой.

Команда solve может возвратить не все решения.

Решить трансцендентное уравнение sinx+lnx+e x — 1 = 0.

Возвратив приближенный комплексный корень уравнения x1 = -3,0553 — 1,7145i, solve не нашла вещественный корень. С помощью команды ezplot (разд. 7.16) графически определяем, что он находится вблизи значения 0,4 (рис. 7.2):

Вещественный корень со стартовым приближением 0,4 найдем с помощью команды fzero(разд. 6.2):

Итак, приближенное значение вещественного корня x2=0,4072.

Перейдем теперь к системам уравнений.

Решить систему уравнений

Результатом выполнения команды solve является структура S с полями x и y, каждое из которых содержит символьное представление решения:

Выведем в командное окно содержимое структуры:

Для проверки подставим в выражения Y1 = x+y — 3 и Y2 = xy 2 — 4 вначале первое решение, а затем второе:

>> disp(subs([Y1 Y2],[x y],[S.x(1) S.y(1)])

>> disp(subs([Y1 Y2],[x y],[S.x(2) S.y(2)])

Как видим, найдены точные решения, т. к. выражения Y1 и Y2 при их подстановке обратились в 0.

Команда solve допускает использование символьных переменных в качестве выходных аргументов. Эквивалентное обращение к solve в предыдущем примере имеет вид:

Команда solve позволяет решать системы уравнений, заданные в аналитическом виде.

Решить систему уравнений относительно x, y, z

Как решить систему уравнений в матлабе через solve

Решение систем линейных уравнений

Метод обратной матрицы: для системы из 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) %Выделение последнего столбца из матрицы


источники:

http://life-prog.ru/2_23009_reshenie-uravneniy-i-ih-sistem—komanda-solve.html

http://solidstate.petrsu.ru/p/tutorial/meth_calc/files/matlab2.shtml