Доброго времени суток! В этой статье мы поговорим о решении систем нелинейных алгебраических уравнений в Matlab. Вслед за решением нелинейных уравнений, переходим к их системам, рассмотрим несколько методов реализации в Matlab.
- Общая информация
- Оператор Matlab для решения СНАУ
- Метод простых итераций в Matlab для решения СНАУ
- Метод Ньютона в Matlab для решения СНАУ
- Заключение
- 2. Графика matlab
- MATLAB — алгебра
- Решение основных алгебраических уравнений в MATLAB
- Решение основных алгебраических уравнений в октаве
- Решение квадратичных уравнений в MATLAB
- Решение квадратичных уравнений в октаве
- Решение уравнений высшего порядка в MATLAB
- Решение уравнений высшего порядка в октаве
- Решение системы уравнений в MATLAB
- Решающая система уравнений в октаве
- Разложение и сбор уравнений в MATLAB
- Расширяя и собирая уравнения в октаве
- Факторизация и упрощение алгебраических выражений
- пример
- 🎥 Видео
Общая информация
Итак, в прошлой статье мы рассмотрели нелинейные уравнения и теперь необходимо решить системы таких уравнений. Система представляет собой набор нелинейных уравнений (их может быть два или более), для которых иногда возможно найти решение, которое будет подходить ко всем уравнениям в системе.
В стандартном виде, количество неизвестных переменных равно количеству уравнений в системе. Необходимо найти набор неизвестных переменных, которые при подставлении в уравнения будут приближать значение уравнения к 0. Иногда таких наборов может быть несколько, даже бесконечно много, а иногда решений не существует.
Чтобы решить СНАУ, необходимо воспользоваться итеративными методами. Это методы, которые за определенное количество шагов получают решение с определенной точностью. Также очень важно при решении задать достаточно близкое начальное приближение, то есть такой набор переменных, которые близки к решению. Если решается система из 2 уравнений, то приближение находится с помощью построение графика двух функций.
Далее, мы рассмотрим стандартный оператор Matlab для решения систем нелинейных алгебраических уравнений, а также напишем метод простых итераций и метод Ньютона.
Оператор Matlab для решения СНАУ
В среде Matlab существует оператор fsolve, который позволяет решить систему нелинейных уравнений. Сразу рассмотрим задачу, которую, забегая вперед, решим и другими методами для проверки.
Решить систему нелинейных уравнений с точность 10 -2 :
cos(x-1) + y = 0.5
x-cos(y) = 3
Нам дана система из 2 нелинейных уравнений и сначала лучше всего построить график. Воспользуемся командой ezplot в Matlab, только не забудем преобразовать уравнения к стандартному виду, где правая часть равна 0:
Функция ezplot строит график, принимая символьную запись уравнения, а для задания цвета и толщины линии воспользуемся функцией set. Посмотрим на вывод:
Как видно из графика, есть одно пересечение функций — то есть одно единственное решение данной системы нелинейных уравнений. И, как было сказано, по графику найдем приближение. Возьмем его как (3.0, 1.0). Теперь найдем решение с его помощью:
Создадим функцию m-файлом fun.m и поместим туда следующий код:
Заметьте, что эта функция принимает вектор приближений и возвращает вектор значений функции. То есть, вместо x здесь x(1), а вместо y — x(2). Это необходимо, потому что fsolve работает с векторами, а не с отдельными переменными.
И наконец, допишем функцию fsolve к коду построения графика таким образом:
Таким образом у нас образуется два m-файла. Первый строит график и вызывает функцию fsolve, а второй необходим для расчета самих значений функций. Если вы что-то не поняли, то в конце статьи будут исходники.
И в конце, приведем результаты:
xr (это вектор решений) =
3.3559 1.2069
fr (это значения функций при таких xr, они должны быть близки к 0) =
1.0e-09 *
0.5420 0.6829
ex (параметр сходимости, если он равен 1, то все сошлось) =
1
И, как же без графика с ответом:
Метод простых итераций в Matlab для решения СНАУ
Теперь переходим к методам, которые запрограммируем сами. Первый из них — метод простых итераций. Он заключается в том, что итеративно приближается к решению, конечно же, с заданной точностью. Алгоритм метода достаточно прост:
- Если возможно, строим график.
- Из каждого уравнения выражаем неизвестную переменную след. образом: из 1 уравнения выражаем x1, из второго — x2, и т.д.
- Выбираем начальное приближение X0, например (3.0 1.0)
- Рассчитываем значение x1, x2. xn, которые получили на шаге 2, подставив значения из приближения X0.
- Проверяем условие сходимости, (X-X0) должно быть меньше точности
- Если 5 пункт не выполнился, то повторяем 4 пункт.
И перейдем к практике, тут станет все понятнее.
Решить систему нелинейных уравнений методом простых итераций с точность 10 -2 :
cos(x-1) + y = 0.5
x-cos(y) = 3
График мы уже строили в предыдущем пункте, поэтому переходим к преобразованию. Увидим, что x из первого уравнения выразить сложно, поэтому поменяем местами уравнения, это не повлияет на решение:
x-cos(y) = 3
cos(x-1) + y = 0.5
Далее приведем код в Matlab:
В этой части мы выразили x1 и x2 (у нас это ‘x’ и ‘y’) и задали точность.
В этой части в цикле выполняются пункты 4-6. То есть итеративно меняются значения x и y, пока отличия от предыдущего значения не станет меньше заданной точности.
k = 10
x = 3.3587
y = 1.2088
Как видно, результаты немного отличаются от предыдущего пункта. Это связано с заданной точностью, можете попробовать поменять точность и увидите, что результаты станут такими же, как и при решении стандартным методом Matlab.
Метод Ньютона в Matlab для решения СНАУ
Решение систем нелинейных уравнений в Matlab методом Ньютона является более эффективным, чем использование метода простых итераций. Сразу же представим алгоритм, а затем перейдем к реализации.
- Если возможно, строим график.
- Выбираем начальное приближение X0, например (3.0 1.0)
- Рассчитываем матрицу Якоби w, это матрица частных производных каждого уравнения, считаем ее определитель для X0.
- Находим вектор приращений, который рассчитывается как dx = -w -1 * f(X0)
- Находим вектор решения X = X0 + dx
- Проверяем условие сходимости, (X-X0) должно быть меньше точности
Далее, решим тот же пример, что и в предыдущих пунктах. Его график мы уже строили и начальное приближение останется таким же.
Решить систему нелинейных уравнений методом Ньютона с точность 10 -2 :
cos(x-1) + y = 0.5
x-cos(y) = 3
Перейдем к коду:
Сначала зададим начальное приближение. Затем необходимо просчитать матрицу Якоби, то есть частные производные по всем переменным. Воспользуемся символьным дифференцированием в Matlab, а именно командой diff с использованием символьных переменных.
Далее, сделаем первую итерацию метода, чтобы получить вектор выходных значений X, а потом уже сравнивать его с приближением в цикле.
В этой части кода выполняем первую итерацию, чтобы получить вектор решения и сравнивать его с вектором начального приближения. Отметим, чтобы посчитать значение символьной функции в Matlab, необходимо воспользоваться функцией subs. Эта функция заменяет переменную на числовое значение. Затем функция double рассчитает это числовое значение.
Все действия, которые были выполнены для расчета производных, на самом деле можно было не производить, а сразу же задать производные. Именно так мы и поступим в цикле.
В этой части кода выполняется цикл по расчету решения с заданной точностью. Еще раз отметим, что если в первой итерации до цикла были использованы функции diff, double и subs для вычисления производной в Matlab, то в самом цикле матрица якоби была явно задана этими частными производными. Это сделано, чтобы показать возможности среды Matlab.
За 3 итерации достигнут правильный результат. Также важно сказать, что иногда такие методы могут зацикливаться и не закончить расчеты. Чтобы такого не было, мы прописали проверку на количество итераций и запретили выполнение более 100 итераций.
Заключение
В этой статье мы познакомились с основными понятиями систем нелинейных алгебраических уравнений в Matlab. Рассмотрели несколько вариантов их решения, как стандартными операторами Matlab, так и запрограммированными методами простых итераций и Ньютона.
Видео:1 - Решение систем нелинейных уравнений в MatlabСкачать
2. Графика matlab
График даёт самую полную общую информацию о функции, поэтому в системах компьютерной математики большое внимание уделяется средствам построения графиков функций.
В MATLAB имеется три функции построения двумерных графиков: plot() , fplot( ) и ezplot( ).
Функция plot() строит графики кривых с массивами значений абсцисс и ординат и имеет следующий формат:
Строка s используется для задания параметров графика: типа, толщины и цвета рисуемой линии, а также формы и размера меток на графике. Строка s может отсутствовать, тогда MATLAB устанавливает параметры, действующие по умолчанию: все кривые выводятся сплошными линиями, окрашенными циклически в шесть различных цветов.
Переменная s представляет собой строку символов, и эту строку можно подготовить в отдельной команде или записать непосредственно в команде построения графика, например
Таблица кодировки типов линий при выводе графика функции
Таблица кодировки цвета линии графика функции
Таблица кодировки меток на графике
^ v > > x=0:0.01:3; y=exp(x).*sin(9*x); plot(x, y,’r-‘)
Для построения графиков используется специальный графический редактор, который строит на экране графическое окно и в нём рисует график. Вызывается графический редактор автоматически при выполнении графических функций. По умолчанию производится разметка осей координат и иногда выводится заголовок сверху графика. Графический редактор имеет свои средства модификации графика и нанесения на график различных надписей и символов. Например, заголовок создаёт функция titke(‘text’), причём в качестве параметра text можно использовать и формулу.
Пример. Построить график функции с заголовком.
Текст можно вывести в заданное координатами место графика функцией .
>> text(0.5, 15, ‘grafik y=exp(x)sin(9x)’)
Координаты вывода текста можно указать на графике мышью, если использовать функцию . Тогда после вывода графика и выполнения команды
нужно указать мышью место на графике и щёлкнуть.
На одном чертеже можно построить графики нескольких функций, для этого нужно попарно перечислить векторы, задающие абсциссы и ординаты. Для идентификации графиков можно использовать команду legend(), позволяющую связать с каждой кривой некоторую текстовую информацию.
Пример. Построить на одном чертеже графики функций и
>> x=0:0.02:pi; y=exp(x);z=sin(9*x);plot(x, y,x, z), legend(‘exp(x)’, ‘sin(9x)’)
Имеется другой способ размещения на одном чертеже графиков нескольких функций: сформировать матрицу, столбцы которой должны содержать нужные ординаты. Ординаты обычно удобно задавать строками, тогда для построения графиков строки необходимо транспонировать.
Пример. Построить на одном чертеже графики функций .
а) Построить график функции на промежутке с шагом . График рисовать сплошной линией красного цвета.
6) Построить график функции на промежутке с шагом . График рисовать пунктирной линией чёрного цвета с маркерами в виде пятиконечной звезды размера 5.
в) Построить на одном чертеже графики функций .
г) Построить на одном чертеже графики функций . Использовать функцию для идентификации графиков.
д) Построить на одном чертеже графики функций . Использовать функцию .
Функция ezplot() применяется для рисования графиков неявно заданных функции двух переменных и параметрически заданных функций. Эта функция рисует также графики функций одной переменной, причём, в огтличие от функции plot(), шаг и нужные массивы значений абсцисс и ординат соэдаются автоматически. Функция ezplot() автоматически выводит над графиками наименование функций.
Пример. Построить на промежутке график функции . Нанести на график сетку.
Пример. Построить на промежутке график неявной функции, заданной уравнением .
Функция ezplot() особенно удобна для определения начального приближения решения системы двух уравнений графическом методом Нужно построить на одном чертеже графики двух неявных функций и . Эту задачу решают две последовательно выполненные команды
В первой команде используется функция hold, чтобы сохранить рисунок для последующего наложения на него второго рисунка.
Пример. Найти начальное приближение решения системы
Рисунок показывает, что система имеет четыре решения, приближённые значения которых есть , , , .
Задача 8 . Найти графическим методом начальные приближения решений системы ( N−номер варианта):
2.3. Построение нескольких рисунков в одном графическом окне
В одном графическом окне можно разместить несколько рисунков, используя функцию subplot(N,M,K). Эта функция создаёт массив графиков, состоящий из N рисунков по вертикали и M рисунков по горизонтали. В результате выполнения функции subplot(N,M,K) активным становится рисунок с номером K. Нумерация ведётся слева направо и сверху вниз. Крайний слева рисунок из верхнего ряда считается первым, а крайний справа из нижнего ряда имеет номер N*M.
Пример. В одном графическом окне построить графики четырёх функций: на промежутке , на промежутке , на промежутке и на промежутке .
Решение. Выполним следующие команды, не закрывая графического окна:
>> subplot(2,2,1), ezplot(‘x^2’,[-5,5]), xlabel(»),grid
>> subplot(2,2,2), ezplot(‘exp(x)’,[-2,2]), xlabel(»),grid
>> subplot(2,2,3), ezplot(‘log(x)’,[0,5]), xlabel(»),grid
>> subplot(2,2,4), ezplot(‘sqrt(x)’,[0,10]), xlabel(»),grid
В командах вывода графиков использована функция xlabel(‘’) с аргументом в виде пустой строки, которая отменяет вывод обозначения горизонтальной оси. Если этого не сделать, то символ обозначения оси наложится на наименование функций нижних графиков.
Функция fplot(‘f(x)’, [xmin, xmax]), аналогично функции plot(), строит график функции f(x), однако при использовании функции fplot() не требуется задавать массив значений аргумента и вычислять массив
значений функции, всё это делается автоматически. График строится на промежутке изменения аргумента x от xmin до xmax.
Пример. Построить график функции на промежутке .
Решение. Используем функцию fplot():
2.5. Трёхмерная графика
Чтобы построить поверхность , нужно иметь массив значений функции , вычисленный на некоторой сетке. Для формирования двумерной прямоугольной сетки используется функция meshgrid(x,y), где x,y−одномерные массивы точек, задающие абсциссы и ординаты двумерной функции.
Пример. Построить поверхность .
>> x=0:0.2:8; y=0:0.2:4; [X, Y]=meshgrid(x, y); Z=2*cos(X+Y)+Y.*cos(X-Y); mesh(X, Y,Z)
Функция mesh() строит расцвеченную сетчатую поверхность, используя различную окраску вершин и рёбер.
Кроме функции mesh(), для изображения поверхности имеются и другие функции:
meshc()−строится сетчатая поверхность с линиями уровня;
meshz()−строится сетчатая поверхность и отсчётная плоскость;
surf()−строится расцвеченная поверхность;
surfc()−строится расцвеченная поверхность с линиями уровня;
surfl()−строится расцвеченная поверхность с подсветкой;
waterfall−строится поверхность без прорисовки ребер.
Пример. Построим поверхность этими функциями.
После построения рисунков для каждого рисунка можно выполнить масштабирование функцией axis([-Inf Inf —Inf Inf —Inf Inf]). Например, второй рисунок промасштабирует команда
При масштабировании определяются действительные интервалы изменения величин по всем координатам и рисунки становятся выразительнее.
1) Построить поверхность функцией на сетке x=0:0.2:8;y=0:0.2:4. Использовать режим вращения изображения для изменения ракурса. Режим вращения задаётся нажатием соответствующего значка на панели инструментов графического окна.
2) Эту же поверхность построить на более мелкой сетке x=0:0.05:8; y=0:0.05:4.
3) Эту же поверхность построить на сетке x=0:0.02:8;y=0:0.01:6
4) Построить поверхность функцией на сетке x=0:0.2:8; y=0:0.1:6
5) Выбрать сетку и построить поверхность функцией
6) Построить в одном графическом окне три поверхности : одну на сетке x=0:0.1:8;y=0:0.1:4, вторую на сетке x=0:0.05:8;y=0:0.05 и третью на сетке x=0:0.01:8;y=0:0.01:4.
7) Выбрать сетку и построить в одном графическом окне четыре поверхности при следующих значениях параметров и :
8) Построить в одном окне поверхность функциями и на сетке x=-pi:0.1:pi; y=-pi:0.1:pi. Выполнить масштабирование рисунков.
9) Построить поверхность функцией на сетке x=-pi:0.1:pi; y=-pi:0.1:pi. Установить единый масштаб по осям абсцисс и ординат, выбрать и установить ракурс, удалить сетку.
Видео:2 - Решениt систем линейных алгебраических уравнений (СЛАУ) с помощью Matlab.Скачать
MATLAB — алгебра
До сих пор мы видели, что все примеры работают как в MATLAB, так и в его GNU, альтернативно называемом Octave. Но для решения основных алгебраических уравнений и MATLAB, и Octave немного отличаются, поэтому мы постараемся охватить MATLAB и Octave в отдельных разделах.
Мы также обсудим факторизацию и упрощение алгебраических выражений.
Видео:MATLAB 07 Интерактивное построение графиковСкачать
Решение основных алгебраических уравнений в MATLAB
Функция решения используется для решения алгебраических уравнений. В простейшем виде функция решения принимает в качестве аргумента уравнение, заключенное в кавычки.
Например, давайте решим для х в уравнении х-5 = 0
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Вы также можете вызвать функцию решения как —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Вы можете даже не включать правую часть уравнения —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Если в уравнение входит несколько символов, то по умолчанию MATLAB предполагает, что вы решаете для x, однако функция решения имеет другую форму —
где вы также можете упомянуть переменную.
Например, давайте решим уравнение v — u — 3t 2 = 0, для v. В этом случае мы должны написать —
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
Видео:Решение систем Д/У: 1. Знакомство с функциями odeXYСкачать
Решение основных алгебраических уравнений в октаве
Функция корней используется для решения алгебраических уравнений в Octave, и вы можете написать приведенные выше примеры следующим образом:
Например, давайте решим для х в уравнении х-5 = 0
Octave выполнит приведенный выше оператор и вернет следующий результат —
Вы также можете вызвать функцию решения как —
Octave выполнит приведенный выше оператор и вернет следующий результат —
Видео:Как оформить график в MatLab.Скачать
Решение квадратичных уравнений в MATLAB
Функция решения также может решать уравнения более высокого порядка. Он часто используется для решения квадратных уравнений. Функция возвращает корни уравнения в массиве.
В следующем примере решается квадратное уравнение x 2 -7x +12 = 0. Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Видео:Как в MATLAB Simulink моделировать уравнения (Структурная схема САУ)Скачать
Решение квадратичных уравнений в октаве
В следующем примере решается квадратное уравнение x 2 -7x +12 = 0 в октаве. Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Видео:2-7 MATLAB - Построение графиковСкачать
Решение уравнений высшего порядка в MATLAB
Функция решения также может решать уравнения более высокого порядка. Например, давайте решим кубическое уравнение как (x-3) 2 (x-7) = 0
MATLAB выполнит приведенный выше оператор и вернет следующий результат —
В случае уравнений более высокого порядка корни длинные, содержащие много членов. Вы можете получить числовое значение таких корней, преобразовав их в двойные. В следующем примере решается уравнение четвертого порядка x 4 — 7x 3 + 3x 2 — 5x + 9 = 0.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он возвращает следующий результат —
Обратите внимание, что последние два корня являются комплексными числами.
Видео:MatLab. Урок 3. Функции и построение графиков.Скачать
Решение уравнений высшего порядка в октаве
В следующем примере решается уравнение четвертого порядка x 4 — 7x 3 + 3x 2 — 5x + 9 = 0.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он возвращает следующий результат —
Видео:Числовое решение. Функция root в MathCAD 14 (28/34)Скачать
Решение системы уравнений в MATLAB
Функция решения также может быть использована для генерации решений систем уравнений, включающих более одной переменной. Давайте рассмотрим простой пример, чтобы продемонстрировать это использование.
Давайте решим уравнения —
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Таким же образом вы можете решать большие линейные системы. Рассмотрим следующую систему уравнений —
Видео:Олегу Тинькову запрещён вход на Мехмат МГУСкачать
Решающая система уравнений в октаве
У нас есть немного другой подход к решению системы ‘n’ линейных уравнений с ‘n’ неизвестными. Давайте рассмотрим простой пример, чтобы продемонстрировать это использование.
Давайте решим уравнения —
Такая система линейных уравнений может быть записана в виде единого матричного уравнения Ax = b, где A — матрица коэффициентов, b — вектор столбцов, содержащий правую часть линейных уравнений, а x — вектор столбцов, представляющий решение как показано в программе ниже —
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Таким же образом, вы можете решить большие линейные системы, как указано ниже —
Видео:MathCAD Решение системы уравненийСкачать
Разложение и сбор уравнений в MATLAB
Функция расширения и сбора расширяет и собирает уравнение соответственно. Следующий пример демонстрирует понятия —
Когда вы работаете со многими символическими функциями, вы должны объявить, что ваши переменные являются символическими.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Видео:MathCAD Построение графика быстрым способомСкачать
Расширяя и собирая уравнения в октаве
Вам нужно иметь символьный пакет, который обеспечивает расширение и функцию сбора для расширения и сбора уравнения, соответственно. Следующий пример демонстрирует понятия —
Когда вы работаете со многими символическими функциями, вы должны объявить, что ваши переменные являются символическими, но у Octave другой подход к определению символических переменных. Обратите внимание на использование Sin и Cos , которые также определены в символической упаковке.
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
Видео:Встреча с Путиным в общежитии МГУ на Воробьевых горах!Скачать
Факторизация и упрощение алгебраических выражений
Факторная функция разлагает выражение, а функция упрощения упрощает выражение. Следующий пример демонстрирует концепцию —
пример
Создайте файл сценария и введите следующий код —
Когда вы запускаете файл, он показывает следующий результат —
🎥 Видео
Системы уравнений, определители, обращение матриц. Методы вычислений в MATLAB. Урок 73Скачать
MatLab. 9.5f. Функция решения алгебраических уравнений – solveСкачать
Математика это не ИсламСкачать
ТАУ. Matlab/SIMULINK Фазовые портреты нелинейных и линейных диф. уравненийСкачать
MatLab. 6.1. Решение уравненийСкачать
Графики в MATLABСкачать