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

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 , которые также определены в символической упаковке.

Создайте файл сценария и введите следующий код —

Когда вы запускаете файл, он показывает следующий результат —

Факторизация и упрощение алгебраических выражений

Факторная функция разлагает выражение, а функция упрощения упрощает выражение. Следующий пример демонстрирует концепцию —

пример

Создайте файл сценария и введите следующий код —

Когда вы запускаете файл, он показывает следующий результат —

Решение СЛАУ и матрицы в 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. Часть 1

В среде MATLAB можно решать системы диффуров с начальными условиями, краевые задачи, а также решать дифференциальные уравнения в частных производных с помощью инструмента PDE toolbox.

В данном обзоре речь пойдет лишь о системах дифференциальных уравнений с начальными условиями, то есть о задаче Коши. В англоязычной литературе это называется Initial Value Problem.

  • каким образом записывать системы диффуров
  • как задать начальные условия
  • временной интервал
  • какой получать результат решения для дальнего использования

Решать системы обыкновенных дифференциальных уравнений можно как в MATLAB, так и в Simulink.

В первую очередь, следует определиться, использовать для решения Matlab и его текстовый редактор, или Simulink, где те же системы дифференциальных уравнений могут быть записаны в виде функциональных блоков.

Выбор ваш должен зависеть от задачи. Если Вы, например, хотите смоделировать какой-либо объект управления, описываемый системой диффуров, то в данном случае имеет смысл использовать именно Simulink, так как Вам, впоследствии, понадобиться синтез, например, системы управления, и Simulink подойдет здесь как нельзя лучше.

А вот если у Вас, например, есть необходимость решать системы диффуров с большим количеством уравнений и неизвестных, или специфика Вашей задачи требует особой и специальной настройки численного метода, а также если вы хотите использовать решение диффура в составе других скриптов MATLAB, то Вам имеет смысл решать дифференциальные уравнения способом, о котором пойдёт речь в этом обзоре.

Рассмотрим синтаксис решателей matlab.В качестве аргументов следует подать правую часть системы в виде MATLAB-функции.

На рисунке показан требуемый вид системы, когда выражены старшие производные.

Системы, чей вид отличается от требуемого, следует преобразовать к таковому.

Если функция простая, то её можно записать прямо в поле аргумента, однако, когда речь идёт о системах уравнений, имеет смысл записывать систему уравнений в виде отдельной функции, в том числе и в виде отдельного м-файла. Об этом мы поговорим чуть позже и на конкретном примере.

Также подается интервал времени, на котором будет найдено решение. Интервал задаётся строкой из двух чисел: начальной величины независимого аргумента t и его конечного значения.

Далее задаются начальные условия. Значения всех неизвестных искомых переменных в начале расчёта задаются в виде столбца соответствующей размерности.

Далее, при необходимости, задаются опции. Вот тут и раскрываются широкие возможности MATLAB по настройке решателя. Помимо управления точностью и величиной шага, имеется возможность обрабатывать данные в процессе вычисления, а также выполнять скрипты по завершению вычисления. Но ещё более полезным является опция отслеживания событий по условию, более подробно поговорим об этом дальше. Также есть другие специальные опции, которые могут быть использованы при решении определённых типов систем.

Вы могли заметить, что название функции — odeXY – это обозначение для всех решателей, которых всего 8 штук. В данном ролике мы пользоваться решателем ode45, соответствующего численному по методу Дормана-Принса 4(5). Этого решателя достаточно для подавляющего большинства задач. Остальные решатели будут подробно рассмотрены в приложении к задачам соответствующих типов позже.

Перейдем к примерам.

Рассмотрим 2 примера:

  • решение дифференциального уравнения первого порядка.
  • решение системы двух дифференциальных уравнений второго порядка.

В качестве уравнение первого порядка рассмотрим логистическое уравнение Ферхюльста, которое описывает динамику численности популяции. Суть уравнения такова: скорость прироста населения y пропорциональна количеству населения, однако лимитирована максимальной численностью популяции.

Забавный факт: Ферхюльст назвал это уравнение логистическим, и никто до сих пор не знает почему, ибо сам Ферхюльст об этом никому не рассказал.

Решение этого дифференциального уравнения выглядит следующим образом.

Пишем функцию в явном виде, задаём интервал расчёта и записываем начальное условие. Пару слов о записи функции подобным образом. Знак собаки в матлабе является оператором создания функции соответствующих переменных. Вы задаёте аргументы функции и саму функцию через пробел, как показано на рисунке.

Перейдем в окно MATLABа и посмотрим, как это выглядит.

Так выглядит скрипт:

Так выглядит график решения дифференциального уравнения:

В качестве примера решения системы, состоящей из двух дифференциальных уравнений второго порядка, рассмотрим шарик, подвешенный на пружине, который ещё и тормозит о воздух.

Уравнения показаны на рисунке. Но вид системы отличается от требуемого, в том числе потому, что в нём присутствуют вторые производные. Для приведения системы в требуемый вид выполним 2 простых шага:

Первое: следует заменить переменные соответствующим образом. Теперь у нас 4 неизвестных. Далее следует преобразовать уравнение с учетом замены. Таким образом, мы имеем систему из четырёх дифференциальных уравнений первого порядка.

Настало время её записать.

Итак, мы имеем систему, параметры, интервал времени и начальные условия. Решим же эту задачу скорее.

В отличие от предыдущего примера, систему четырех уравнений проблематично записать в поле аргумента. Поэтому всю систему будем записывать в отдельную функцию.

Эту функцию можно располагать как в самом скрипте решения в самом его конце, так и в виде отдельного m-файла.

На выходе функция должна представлять собой вектор-столбец, который записывается перечислением компонент через точку запятой как показано на рисунке.

Теперь рассмотрим скрипт самого решения.

На этот раз запишем интервал и начальные условия в виде переменных MATLAB. Интервал, соответственно, в виде строки, а начальные условия – в виде столбца длинной 4.

Сообразно с уже разобранным ранее синтаксисом укажем функцию pendulum_np, интервал времени и начальные условия.

Перейдем теперь в окно MATLAB и посмотрим решение.

Так выглядит скрипт:

Запускаем скрипт и получаем графики:

Зачастую хочется, чтобы одну и ту же систему можно было бы решать с разными параметрами, и при этом не менять их в теле самой функции. И это можно, и даже нужно осуществлять.

На рисунке показана функция MATLAB, которая соответствует движению подвешенного на пружине шара, однако можно заметить, что эта функция теперь имеет на 5 аргументов больше.

Параметры задаются в скрипте, а при вызове функции мы обращаемся к уже известному оператору-собаке, которая превращает функцию семи переменных pendulum_n в функцию двух переменных t и X. Вот и всё.

Я вам очень рекомендую разобраться с тем, как работает оператор-собака. В хелпе он называется function-handle. Разобравшись с ним Вам будет работать в среде MATLAB ещё проще и ещё приятнее.

Вывод: не так страшно решать диффуры

Под конец стоит сказать какие вообще системы дифференциальных уравнений матлаб может решать, а может он решать системы практически любых типов.

Их можно, с одной стороны, разделить по степени жёсткости, а с другой стороны, по структуре самой системы.

Когда уравнения представляют поведение системы, которая содержит ряд быстрых и медленных реакций, то такую систему уравнения можно назвать жесткой. Для жестких задач явные численные методы работают плохо, или не работают вовсе. Примером жесткой задачи может являться протекание тока через клеточную мембрану. На самом деле, чёткого разделения между жесткими и нежёсткими системами не существует. Степень жесткости системы формально определяется через собственные значения матрицы Якоби, но давайте не будем закапываться.

Видеообзор по теме решения систем Д/У доступен по ссылке.


источники:

http://codetown.ru/matlab/slau-matricy/

http://hub.exponenta.ru/post/chislennoe-reshenie-differentsialnykh-uravneniy-v-srede-matlab-s-pomoshchyu-vstroennykh-instrumentov722