Выделение треугольных частей матриц
При выполнении ряда матричных вычислений возникает необходимость в выделении треугольных частей матриц. Следующие функции обеспечивают такое выделение:
tril(X) — возвращает матрицу, все элементы которой выше главной диагонали X заменены нулями, неизменными остаются лишь элементы нижней треугольной части, включая элементы главной диагонали;
tril(X.k) — возвращает неизменной нижнюю треугольную часть матрицы X начиная с k-й диагонали. При k=0 это главная диагональ, при k>0 — одна из верхних диагоналей, при k<0 — одна из нижних диагоналей.
Пример:
» М=[3.1.4:8.3.2;8.1.1]
М =
3 1 4
8 3 2
8 1 1
» tril(M)
ans =
3 0 0
8 3 0
8 1 1
triu(X) — возвращает неизменной верхнюю треугольную часть матрицы X включая элементы главной диагонали, и заменяет нулями остальные элементы;
triu(X.k) — возвращает неизменной верхнюю треугольную часть матрицы X начиная с k-й диагонали. При k=0 — это главная диагональ, при k>0 — одна из верхних диагоналей, при k<0 — одна из нижних диагоналей.
Пример:
м =
3 1 4
8 3 2
8 1 1
» triu(M)
ans =
3 1 4
0 3 2
0 0 1
Арифметические операторы и функции
Арифметические операторы являются самыми распространенными и известными. В отличие от большинства языков программирования в системе MATLAB практически все операторы являются матричными, т. е. предназначены для выполнения операций над матрицами. В табл. 8.1 приводится список арифметических операторов и синтаксис их применения.
Таблица 8.1. Арифметические операторы и функции MATLAB
|
Функция |
Название Оператор |
Синтаксис |
|
Plus |
Плюс + |
М1+М2 |
|
Uplus |
Унарный плюс + |
+М |
|
Minus |
Минус |
М1-М2 |
|
Uminus |
Унарный минус |
-М |
|
Mtimes |
Матричное умножение * |
М1*М2 |
|
Times |
Поэлементное умножение массивов .* |
А1*А2 |
|
Mpower |
Возведение матрицы в степень |
М1^х |
|
Power |
Поэлементное возведение массива в степень |
А1^х |
|
Mldivide |
Обратное (справа налево) деление матриц \ |
M1\M2 |
|
Mrdivide |
Деление матриц слева направо / |
М1/М2 |
|
Ldivide |
Поэлементное деление массивов справа налево . \ |
А1.\А2 |
|
Rdivide |
Поэлементное деление массивов слева направо . / |
А1 . /А2 |
|
Kron |
Тензорное умножение Кронекера kron |
kron(X.Y) |
|
|
|
|
>> m1=[2 6 3; 5 8 -3]
m1 =
2 6 3
5 8 -3
>> m2=[7 6 10; -5 6 -5]
m2 =
7 6 10
-5 6 -5
>> m2-m1
ans =
5 0 7
-10 -2 -2
>> minus(m2,m1)
ans =
5 0 7 // результат одинаковый
-10 -2 -2
Обратите внимание на то, что каждый оператор имеет аналогичную по назначению функцию. Например, оператору матричного умножения * соответствует функция mtimes(Ml,M2). Примеры применения арифметических операторов уже не раз приводились, так что ограничимся несколькими дополнительными примерами:
Соответствие функций операторам и командам в системе MATLAB является одним из основных положений программирования. Оно позволяет одновременно использовать элементы как операторного, так и функционального программирования.
Следует отметить, что в математических выражениях операторы имеют определенный приоритет исполнения. Например, в MATLAB приоритет логических операторов выше, чем арифметических, приоритет возведения в степень выше приоритетов умножения и деления, приоритет умножения и деления выше приоритета сложения и вычитания. Для изменения приоритета операций в математических выражениях используются круглые скобки. Степень вложения скобок не ограничивается.
