Matlab команды и функции
Символьные вычисления в Matlab
Здравствуйте, уважаемые читатели. В этой небольшой статье речь пойдет о работе с символьными переменными в Matlab. На простых примерах мы разберем преобразование символьных выражений, а также символьное дифференцирование и интегрирование.
Создание символьного выражения в Matlab
Иногда символьные выражения крайне необходимы, именно поэтому важно уметь их объявлять в Matlab. Обычно используют два способа. Первый — использование оператора syms.
Таким простым способом мы создали две символьные переменные. Пока они ничего не делают и не представляют какой либо ценности, но чуть позже мы увидим, что они могут быть полезны.
Второй способ — использование команды sym.
При ее использовании, можно сразу задать функцию, полином или выражение:
Символьные выражения полезны тем, что вычисления с ними производятся без погрешностей.
Преобразования символьных выражений в Matlab
Возможны несколько типов преобразований:
- Функция раскрытия скобок expand
Для примера зададим символьное выражение и попробуем раскрыть скобки:
- Функция упрощения simplify
Данная функция помогает упростить символьное выражение в Matlab. Возьмем для примера такое выражение.
- Функция разложения на множители factor
Данная функция помогает преобразовать символьное выражение, например, в полином в Matlab. Иногда, это бывает очень важно и необходимо.
Вычисление значения символьных выражений в Matlab
Конечно, символьные выражения это интересный инструмент в Matlab, но хотелось бы находить значение этого выражения при каких-то заданных значениях переменной.
Для этого можно воспользоваться несколькими функциями. Сначала нужно заменить все переменные на число с помощью оператора subs. Затем перевести полученное выражение в числовое с помощью оператора double. Разберем пример:
Стоит отметить, что после выполнения оператора subs, выражение все еще остается символьным. Поэтому далее выполняется оператор double.
Если же у функции несколько переменных, то придется использовать subs несколько раз.
Символьное дифференцирование в Matlab
На нашем сайте уже были статьи по численному дифференцированию в среде Matlab, но любой численный метод может давать погрешности. А вычисление в символьном виде может быть очень полезным и точным.
Итак, символьное дифференцирование осуществляется оператором diff. При вызове функции следует указать переменную, по которой будет производиться дифференцирование.
В этом примере функция зависит от одной переменной, поэтому производная считается по ней автоматически. Если нужно вычислить вторую производную:
Теперь посмотрим на функцию от нескольких переменных:
Очевидно, что после получения производных, с ними можно выполнить все действия, описанные выше.
Символьное интегрирование в Matlab
Наряду с дифференцированием, в Matlab можно выполнять символьное интегрирование. Иногда это бывает удобнее, чем численное интегрирование. Символьное интегрирование в Matlab выполняется оператором int.
Оператор выполняется практически также, как и оператор дифференцирования.
Также, возможен расчет определенного интеграла:
Другие функции
В Matlab реализовано множество функций для работы с символьными вычислениями. Помимо тех, что были рассмотрены, следует выделить следующие функции:
- ezplot(f) — построение графика функции
- solve(f) — решение символьных уравнений и систем
- taylor(f) — разложение символьной функции в ряд тейлора
- limit(f) — вычисление предела
Эти и многие другие функции в Matlab имеют свои опции и параметры. Очевидно, что среда Matlab дает широкие возможности разработчику при работе с символьными вычислениями.
Заключение
На этом статья подходит к концу. Символьные вычисления в Matlab являются дополнительным инструментом разработчика, и с помощью этой статьи можно ознакомиться с этим инструментом.
Все примеры очень просты и в исходниках не нуждаются. На этом все, встретимся в следующей статье.
Стандартные функции Matlab
Все операции в Matlab ориентированы прежде всего на работу с матрицами, но могут выть использованы при работе с векторами и скалярными переменными.
Элементарные функции Matlab. К ним относятся следующие функции:
sin(x) sinh(x) asin(x) asinh(x)
cos(x) cosh(x) acos(x) acosh(x)
tan(x) tanh(x) atan(x) atan2(x,y) atanh(x)
cot(x) coth(x) acot(x) acoth(x)
exp(x) log(x) log10(x) log2(x) pow2(x) sqrt(x)
Функции комплексного аргумента:
abs(z) – модуль комплексного числа; angle(z) – аргумент;
complex(x, y) – формирование комплексного числа x+y*i;
conj(z) – возвращает комплексно-сопряженное (по отношению к z) число;
real(z) – возвращает действительную часть; imag(z) – мнимую часть.
Функции округления и нецелочисленного деления:
fix(x) – округление в сторону к нулю, floor(x) – к –¥, ceil(x) – к +¥,
round(x) – до ближайшего целого;
mod(x, y) – остаток от деления x/y с учетом знака,
rem(x, y) – то же, без учета знака;
sign(x) – знак числа (+1/–1).
Элементарные функции, как и всякие другие, имеют один результат (массив). Элементарные функции могут быть использованы с одинаковым синтаксисом как для чисел, так и для массивов.
Пример 1. Разный тип параметров
» x=-8; X=[5 -1 -2]; A=[1 2 -3; -5 6 7]; z=3-4i;
Различают матричные и поэлементные арифметические операции.
+ – уточнение знака (унарная), сложение;
– – изменение знака (унарная), вычитание;
Поскольку математический смысл операций матричного и поэлементного сложения и вычитания идентичен:
C = A ± B означает
синтаксис матричных и поэлементных операций сложения и вычитания одинаков, в них используются одни и те же символы операций.
* – скалярное матричное умножение;
^ – матричное возведение в степень;
.^ – поэлементное возведение в степень;
– матричное деление слева;
/ – матричное деление справа;
.’ – несопряженное транспонирование (унарная).
Все арифметические операции, за исключением указанных, являются бинарными.
В операциях +, –, .*, ./ и .^ либо оба операнда должны иметь одинаковую размерность, либо один из операндов должен быть скалярной величиной.
» A=[1 2 3; 4 5 6]; B=[7 8 9; 3 2 1];
7.0000 4.0000 3.0000
0.7500 0.4000 0.1667
0.7000 0.8000 0.9000
0.3000 0.2000 0.1000
Для операции * (матричное произведение) матрица-сомножитель2 должна иметь столько строк, сколько столбцов имеет матрица-сомножитель1:
![]() |
Inner matrix dimensions must agree.
Операции транспонирования ‘ и .’ для матриц с действительными коэффициентами абсолютно равнозначны:
Для комплексных чисел и матриц с комплексными коэффициентами операция ‘ дает транспонированную сопряженную матрицу, а операция .’ – транспонированную несопряженную:
» Ac=[1+2i 1+3i 1+4i; 2+3i 2+4i 2+5i];
1.0000 — 2.0000i 2.0000 — 3.0000i
1.0000 — 3.0000i 2.0000 — 4.0000i
1.0000 — 4.0000i 2.0000 — 5.0000i
1.0000 + 2.0000i 2.0000 + 3.0000i
1.0000 + 3.0000i 2.0000 + 4.0000i
1.0000 + 4.0000i 2.0000 + 5.0000i
Операция ^ (матричное возведение в степень) выполняется только для квадратных матриц, и означает умножение матрицы саму на себя заданное число раз (второй операнд обязательно скаляр):
-0.9100 — 3.5442i 0.4163 + 1.6212i
0.6244 + 2.4318i -0.2856 — 1.1124i
генерирует обратную матрицу D -1 .
Операция X/Y эквивалентна X*Y -1 , операция XY – операции X -1 *Y.
Последняя операция широко используется при решении систем линейных уравнений вида
Действительно, представив систему уравнений в матричной форме:
и умножив обе части последнего уравнения на A -1 слева, получим:
A -1 * A * X = A -1 * B,
откуда решение системы уравнений:
Пример. Решить систему уравнений
Решение сводится к набору в интерактивном режиме следующих команд:
Проверку вычисления корней можно выполнить следующим образом:
| – логическое «или» (0|0 – 0, 1|0 – 1, 0|1 – 1, 1|1 – 1);
xor – логическое исключающее «или» (0xor0 – 0, 0xor1 – 1, 1xor0 – 1, 1xor1 – 0);
Если логические операции (а также логические функции) выполняются над действительными числами, то ложью считают число нуль, а истиной – все числа, не равные нулю.
Операции отношения (сравнения)
> – больше; >= – больше или равно; 1
» A=[1 8 3; 6 2 5]; B=[4 3 1; 2 6 8];
» A d 0 , 10 dk ]. Шаг по показателю степени hd= . Отношение двух соседних элементов есть величина постоянная
=10 hd .
10 100 1000 10000
1.0000 2.0000 3.0000 4.0000
zeros – матрица, состоящая из нулей; ones – матрица, состоящая из единиц;
rand – матрица, состоящая из случ. чисел с равномерным распределением;
randn – матрица, состоящая из случ. Чисел с нормальным распределением.
zeros(n) – формирует квадратную матрицу n´n, состоящую из нулей;
zeros(m, n) – формирует матрицу m´n, состоящую из нулей;
(zeros(1, n) – вектор-строка; zeros(m, 1) – вектор-столбец)
zeros(size(A)) – формирует матрицу, состоящую из нулей, той же размерности, что и матрица A.
Формат обращения к функциям ones, rand и randn аналогичный.
Разницу между функциями rand и randn можно показать графически:
» xr=rand(1,100); xrs=sort(xr); bar(xrs)
» yr=randn(1,100); yrs=sort(yr); bar(yrs)
eye(n) – формирует единичную диагональную матрицу n´n.
diag(B) (B – двухмерная матрица) – выделяет главную диагональ матрицы B и помещает ее в вектор-столбец;
diag(x) (x – вектор) – формирует диагональную матрицу, используя вектор x в качестве главной диагонали.
» A=[1 2 3; 4 5 6; 7 8 9];
Манипуляции с матрицами
tril (A) – формирует треугольную матрицу как нижнюю часть от матрицы A;
triu(A) – формирует треугольную матрицу как верхнюю часть от матрицы А.
» A=[1 2 3; 4 5 6; 7 8 9];
lu(A) – разложение Холецкого – заменяет квадратную матрицу A скалярным произведением двух треугольных матриц L и U методом Гаусса:
» A=[1 2 3; 4 5 6; 7 8 9];
0.5714 0.5000 1.0000
7.0000 8.0000 9.0000
inv(A) – возвращает матрицу A -1 , обратную заданной квадратной матрице A;
det(A) – возвращает определитель квадратной матрицы A.
fliplr(A) – поворот матрицы A на 180° в горизонтальном направлении;
flipud(A) – поворот матрицы A на 180° в вертикальном направлении;
rot90(A) – поворот матрицы A на 90° против часовой стрелки;
rot90(A, k) – поворот матрицы A на k*90° против часовой стрелки (k – целое число).
Манипуляции с векторами
cross(x, y) – векторное произведение векторов x и y в трехмерном пространстве;
cross(A, B, dim) – векторное произведение многомерных массивов A и B по размерности dim;
dot(x, y) – скалярное произведение векторов x и y;
dot(A, B, dim) – скал. произведение многомерных массивов A и B по размерности dim.
Длины векторов x и y, а также длина матриц A и B по размерности dim должны быть равны 3.
Базовые операции анализа
Пусть a,b,c – числа, х,у,z – векторы, А,В,C – матрицы.
c=max(a, b) – возвращает максимальное из двух чисел a и b (при комплексных аргументах по умолчанию сравниваются модули):
z=max(x, y) – вектор той же размерности, что x и y, составленный из максимальных элементов векторов;
C=max(A, B) – матрица той же размерности, что и , составленная из максимальных элементов матриц.
xmax=max(x) – максимальный элемент вектора x;
[xmax, imax]=max(x) – дополнительно записывает адрес максимального элемента в числовую переменную imax (если максимальных элементов несколько, возвращается адрес первого из них);
amax=max(A) – возвращает вектор-строку amax из максимальных элементов столбцов матрицы А;
[amax, imax]=max(A) – дополнительно формируется вектор-строка imax, составленный из номеров строк, в которых расположены максимальные элементы столбцов.
» a=1; b=2; x=[1 3 2]; y=[2 1 3]; A=[1 2 3; 4 5 6]; B=[3 2 1; 6 5 4];