Функции формирования матриц
Для создания матриц, состоящих из других матриц, используются следующие функции:
repmat (А, m, п) — возвращает матрицу В, состоящую из mxn копий матрицы А (т. е. в матрице mxn каждый элемент заменяется на копию матрицы А);
repmat(А,п) — формирует матрицу, состоящую из пхп копий матрицы А;
repmat(A,[m n]) — дает тот же результат, что и repmat(A,m,n);
repmat(A,[m п р...]) — возвращает многомерный массив (mxnxp...), состоящий из копий многомерного массива или матрицы А;
repmat (A, m, п) — когда А — скаляр, возвращает матрицу размера mxn со значениями элементов, заданных А, Это делается намного быстрее, чем A*ones(m,n).
reshape(A,m,n) — возвращает матрицу В размерностью mxn, сформированную из А путем последовательной выборки по столбцам. Если число элементов А не равно mxn, то выдается сообщение об ошибке;
reshape(A,m,n,p,...) или В = reshape(A.[m n р...]) — возвращает N-мерный массив с элементами из А, но имеющий размер mxnxp.... Произведение mxnxp... должно быть равно значению prod(size(A)).
reshape(A, slz) — возвращает N-мерный массив с элементами из А, но перестроенный к размеру, заданному с помощью вектора siz.
Пример:
» F=[3.2.7.4:4.3.3.2:2.2.5.5]
F =
3 2 7 4
4 3 3 2
2 2 5 5
» reshape(F.2,6)
ans=
3 2 3 7 5 2
4 2 2 3 4 5
Конкатенация матриц
Конкатенацией
называют объединение массивов, которое реализует следующая функция.
С = cat (dim, А, В) — объединяет массивы А и В в соответствии со спецификацией размерности dim и возвращает объединенный массив; dim = 1 — горизонтальная конкатенация, dim = 2 — вертикальная, dim = 3 — многомерный массив размерности 3 и т. д.;
С = cat(dim,Al,A2,A3,A4,...) объединяет все входные массивы (А1, А2, A3, А4 и т. д.) в соответствии со спецификацией размерности dim и возвращает объединенный массив;
cat(2.A,B) — это то же самое, что и [А,В],асаt(,А,В) —то же самое, что и [А; В]. При записи cat (dim, С (:)) или cat (dim, С. field) эта функция применима к массивам ячеек или структур, содержащим численные матрицы. Пример:
» A =[2.4:3,5];B=[8,7;9.0];C=cat(1.A.B)
С =
2 4
3 5
8 7
9 0
Матричные функции
Весьма представителен в MATLAB набор матричных функций. Они перечислены ниже.
ехрт(Х) — возвращает е
х
от матрицы X. Комплексный результат получается, если X имеет неположительные собственные значения. Функция expm является встроенной и использует разложение Паде. Ее вариант в виде m-файла располагается в файле expm1.m. Второй метод вычисления матричной экспоненты использует разложение Тейлора и находится в файле expm2.m. Метод Тейлора не рекомендуется применять как основной, так как он зачастую бывает относительно медленным и неточным. Реализация третьего способа вычисления матричной экспоненты находится в файле ехртЗ.m и использует спектральное разложение матрицы А. Этот метод неудачен, если входная матрица не имеет полного набора линейно независимых собственных векторов.
Пример:
» S-[l.0.3:1.3.1:4.0.0]
S=
1 0 3
1 3 1
4 0 0
>>a=expm(S)
а =
31.2203 0 23.3779
38.965920.0855 30.0593
31.1705 0 23.4277
funm(X, @f unction)[
Форма funm(X,@function), как в предыдущих версиях MATLAB, по-прежнему возможна, но не рекомендуется.— Примеч. ред.
]— возвращает любую функцию от квадратной матрицы X, если правильно ввести имя, составленное из латинских букв. Команды funm(X ,@exp), funm(X,@sqrt), funm(X.@log) Hexpm(X),sqrtm(x),logm(X) вычисляют соответственно одинаковые функции, но используют разные алгоритмы. Однако предпочтительнее использовать ехрт(Х), sqrtm(x).logm(X);
[Y.esterr] = funm(X.@f uncti on) — не выдает никакого сообщения, но помимо результата вычислений в матрице Y возвращает грубую оценку относительной погрешности результата вычислений funm в esterr. Если матрица X — действительная симметрическая или комплексная эрмитова, то ее форма Шура диагональна и полученный результат может иметь высокую точность.
Примеры:
» S=[1,0.3:1.3.1:4,0.0]
1 0 3
1 3 1
4 0 0
» a=funm(S.@exp)
a=
31.22030.0000 23.3779
38.965920.085530.0593
31.1705-0.000023.4277
logm(X) — возвращает логарифм матрицы. Результат получается комплексным, если X имеет отрицательные собственные значения;
[Y.esterr]=logm(X) — не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной невязки norm(expm(Y)-X)/norm(X);
Если матрица X — действительная симметрическая или комплексная эрмитова, то теми же свойствами обладает и logm(X).
Пример:
а=
31.22030.0000 23.3779
38.965920.085530.0593
31.1705-0.000023.4277
» logm(a)
ans =
1.0000 0.0000 3.0000
1.0000 3.0000 1.0000
4.0000 -0.0000-0.0000
sqrtm(X) — возвращает квадратный корень из X, соответствующий неотрицательным действительным частям собственных значений X. Результат получается комплексным, если X имеет отрицательные собственные значения. Если X вырожденная, то выдает предупреждение об ошибке;
[Y.resnonii]=sqrtm(X) — не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной невязки по нормам Фробениуса (см. урок 11) norm(X-Y
^
2, ' fro') /norm(X, ' fro') ;
[Y. alpha, condest]=sqrtm(X) — с тремя выходными аргументами функция помимо квадратного корня возвращает также фактор стабильности (но не невязку!) и оценку числа обусловленности результирующей матрицы Y.
Пример:
» S=[2.1.0;6,7.-2:3.4.0]; » e=sqrtm(S)
е =
1.2586 0.2334 0.0688
1.6066 2.7006 -0.6043
0.5969 1.1055 0.7918
Матрицы Адамара
Н = hadamard(n) — возвращает матрицу Адамара порядка п. Матрица Адамара — это. квадратная матрица размера п, составленная из значений 1 и — 1, столбцы которой ортогональны, так что справедливо соотношение Н' *Н=n* I, где I = eye (п, п) (единичная квадратная матрица размера п). Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов. Матрица Адамара размера nхn при n>2 существует, только если п делится на 4 без остатка. Алгоритм MATLAB вносит дополнительные ограничения, вычисляя матрицы Адамара только для тех n, когда или n, или n/12, или n/20 являются степенями по основанию 2.
Пример:
»Н= |
hadamard(4) | ||||||||
Н = | |||||||||
1 |
1 1 |
1 | |||||||
1 |
-1 1 |
-1 | |||||||
1 |
1 -1 |
-1 | |||||||
1 |
-1 -1 |
1 | |||||||
Матрицы Ганкеля
hankel(c.r) — возвращает матрицу Ганкеля, первый столбец которой совпадает с вектором с, а последняя строка — с вектором г. Если последний элемент вектора с отличен от первого элемента вектора г, то выдается предупреждение об ошибке, но предпочтение отдается последнему элементу вектора с.
Примеры:
» с=1:4
С=
1 2 3 4
» r=6:10
r =
б 7 8 9 10
» Н - hankel(c.r)
Warning: Column wins anti-diagonal conflict.
H =
1 2 3 4 7
2 3 4 7 8
3 4 7 8 9
4 7 8 9 10
hankel (с) — возвращает квадратную матрицу Ганкеля, первый столбец которой совпадает с вектором с и все элементы, лежащие ниже первой антидиагонали (из левого нижнего угла матрицы в правый верхний угол), равны 0.
Матрицы Гильберта
hilb(n) — возвращает матрицу Гильберта порядка п. Матрица Гильберта является примером плохо обусловленной матрицы. Элементы матрицы Гильберта определяются как H(i.j)=l/(i+j-l).
Пример:
» Н = hilb(5)
Н=
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
» cond(hilb(5))
ans =
4.7661е+005
Значение числа обусловленности матрицы Гильберта указывает на очень плохо обусловленную матрицу.
invhilb(n) — возвращает матрицу, обратную матрице Гильберта порядка п (п<15). Для п>15 функция invhilb(n) возвращает приближенную матриц. Точная обратная матрица — это матрица с очень большими целочисленными значениями. Эти целочисленные значения могут быть представлены как числа с плавающей
запятой без погрешности округления до тех пор, пока порядок матрицы п не превышает 15.
Пример:
»Н=invhilb(S)
Н =
25 |
-300 |
1050 |
-1400 |
630 | |||||||||
-300 |
480 |
-18900 |
26880 |
-12600 | |||||||||
1050 |
18900 |
79380 |
-117600 |
56700 | |||||||||
-1400 |
26880 |
-117600 |
179200 |
-88200 | |||||||||
630 |
-12600 |
56700 |
-88200 |
44100 |
А вот результат обращения матрицы Гильберта с плавающей запятой:
» inv(hilb(5))
ans =
1.0e+005 *
0.0002 -0.0030 0.0105 -0.0140 0.0063
-0.0030 0.0480 -0.1890 0.2688 -0.1260
0.0105
-0.1890 0.7938 -1.1760 0.5670
-0.0140
0.2688 -1.1760 1.7920 -0.8820
0.0063 -0.1260 0.5670 -0.8820 0.4410
Матрицы Паскаля
pascal (n) — возвращает матрицу Паскаля порядка п, т. е. симметрическую положительно определенную матрицу с целочисленными элементами, взятыми из треугольника Паскаля;
pascal (n. 1) — возвращает нижний треугольный фактор (до знаков столбцов) Холецкого для матрицы Паскаля. Полученная матрица, все элементы которой выше главной диагонали равны нулю, является своей обратной матрицей, т. е. квадратным корнем из единичной матрицы;
pascal(n,2) — возвращает матрицу, полученную в результате транспонирования и перестановок матрицы pascal (n. 1), при этом результат является кубическим корнем из единичной матрицы.
Матрицы Теплица
toepl itz(c , r) — возвращает несимметрическую матрицу Топлица, где с — ее первый столбец, а г — первая строка. Если первый элемент столбца с и первый элемент строки г различны, то выдается соответствующее предупреждение, но отдается предпочтение элементу столбца;
toeplitz(r) — возвращает симметрическую, или эрмитову, матрицу Топлица,
однозначно определяемую вектором r. Пример:
» с=1:3;
» r=1.5:4.0;
» Т= toeplitz(c.r)
Warning: Column wins diagonal conflict.
Т =
1.0000 2.5000 3.5000
2.0000 1.0000 2.5000
3.0000 2.0000 1.0000
Матрицы Уилкинсона
wilkinson(n) — возвращает одну из тестовых матриц Уилкинсона. (Другие матрицы Уилкинсона можно вызвать при помощи функции gallery). Это симметрич-ческая матрица, собственные значения которой попарно близки, но не равны друг другу. Наиболее широко используется wilkinson(21), собственные значения которой (10.746) совпадают до 14-го знака после запятой (различаются с 15-го).
Пример:
W = wilkinson(5)
W=
2 1 0 0 0
1 1 1 0 0
0 1 0 1 0
0 0 1 1 1
0 0 0 1 2
Данные о множестве других тестовых матриц можно найти в справочной системе MATLAB.
Перестановки элементов матриц
Для перестановок элементов матриц служат следующие функции:
В = fiiplr(A) — зеркально переставляет столбцы матрицы А относительно вертикальной оси.
Пример:
» F=[1.2.3;5.45,3]
F =
1 2 3
5 45 3
» fliplr(F)
ans=
3 2 1
3 45 5
В = flipud(A) — зеркально переставляет строки матрицы А относительно горизонтальной оси.
Пример:
F = | |||||||||
3 |
2 |
12 | |||||||
6 |
3 |
2 | |||||||
» flipud(F) | |||||||||
ans = | |||||||||
6 |
3 |
2 | |||||||
3 |
2 |
12 | |||||||
perms(v) — возвращает матрицу Р, которая содержит все возможные перестановки элементов вектора v. каждая перестановка в отдельной строке. Матрица Р содержит n! строк и n столбцов.
Пример:
» v=[l 4 6]
v =
1 4 6
P=perms(v)
6 4 1
4 6 1
6 1 4
1 6 4
4 1 6
1 4 6
Поворот матриц
Следующая функция обеспечивает поворот матрицы (по расположению элементов): О rot90(A) — осуществляет поворот матрицы А на 90° против часовой стрелки;
rot90(A,k) — осуществляет поворот матрицы А на величину 90*k градусов, где k — целое число.
Пример:
» М=[3.2,7;3.3.2:1.1.1]
м= | |||||||||||
3 |
2 |
7 | |||||||||
3 |
3 |
2 | |||||||||
1 |
1 |
1 | |||||||||
» rot90(M) | |||||||||||
ans |
= | ||||||||||
7 |
2 |
1 | |||||||||
2 |
3 |
1 | |||||||||
3 |
3 |
1 | |||||||||
Создание единичной матрицы
Для создания единичной матрицы (она обычно обозначается как Е) служит функция eye:
еуе(n) — возвращает единичную матрицу размера nrn;
eye(m.n) или еуе([m n]) — возвращают матрицу размера mm с единицами по диагонали и нулями в остальных ячейках;
eye(size(A)) — возвращает единичную матрицу того же размера, что и А.
Единичная матрица не определена для многомерных массивов. Так, функция у = eye([2,3,4]) при попытке ее вычисления приведет к ошибке.
Пример использования функции eye:
» t=eye(4. |
5) | ||||||||||||
t = | |||||||||||||
1 |
0 |
0 |
0 |
0 | |||||||||
0 |
1 |
0 |
0 |
0 | |||||||||
0 |
0 |
1 |
0 |
0 | |||||||||
0 |
0 |
0 |
1 |
0 |
Создание линейного массива равноотстоящих точек
Функция linspace формирует линейный массив равноотстоящих узлов. Это подобно оператору :, но дает прямой контроль над
числом
точек. Применяется в следующих формах:
llnspace(a.b) — возвращает линейный массив из 100 точек, равномерно распределенных между а и b;
linspace(a,b,n) — генерирует п точек, равномерно распределенных в интервале от а до b.
Пример:
» M-linspace(4.20.14)
М=
Columns I through 7
4.0000 5.2308 6.4615 7.6923 8.9231 10.153811.3846
Columns 8 through 14
12.615413.846215.076916.307717.538518.769220.0000
Создание массивов со случайными элементами
р = randperm(n) — возвращает случайные перестановки целых чисел 1:n в векторе-строке. Пример:
» randperm(6)
ans =
243651
Функция rand генерирует массивы случайных чисел, значения элементов которых
равномерно
распределены в промежутке (0, 1):
rand(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
rand(m.n) или rand([m п]) — возвращают матрицу размера mxn;
rand(m.n,p....) или rand([m n р...]) — возвращает многомерный массив;
rand(size(A)) — возвращает массив того же размера и размерности, что и А, с элементами, распределенными по равномерному закону;
rand (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет равномерный закон распределения;
rand(' state') — возвращает вектор с 35 элементами, содержащий текущее состояние генератора случайных чисел с равномерным распределением. Для изменения состояния генератора можно применять следующие формы этой функции:
rand('state' .s) — устанавливает состояние в s;
rand( 'state' ,0) — сбрасывает генератор в начальное состояние;
rand( 'state'. j) — для целых j, устанавливает генератор в j-е состояние;
rand( 'state' ,sum(100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
Пример:
» Y=rand(4,3)
Y=
0.9501 0.8913 0.8214
0.2311 0.7621 0.4447
0.6068 0.4565 0.6154
0.4860 0.0185 0.7919
Проверить равномерность распределения случайных чисел можно, построив большое число точек на плоскости со случайными координатами. Это делается с помощью следующих команд:
» X=rand(1000,1);
» Y=rand(1000,1);
» plot(X,Y,'.')
Полученный при этом график показан на рис. 10.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.
Рис. 10.1.
Случайные точки с равномерным распределением координат на плоскости
Функция randn генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1:
randn(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
randn(m.n) или randn([m n]) — возвращают матрицу размера mxn;
randn(m,n,p,...) или randn([m n р...]) — возвращает массив с элементами, значения которых распределены по нормальному закону;
randn(size(A)) — возвращает массив того же размера, что и А, с элементами, распределенными по нормальному закону;
randn (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет нормальное распределение;
randn( 'state') — возвращает двухэлементный вектор, включающий текущее состояние нормального генератора. Для изменения состояния генератора можно применять следующие формы этой функции:
randn('state',s) — устанавливает состояние в
s;
randn('state' ,0) — сбрасывает генератор в начальное состояние;
randn('state', j) — для целых j устанавливает генератор в
J-e
состояние;
randn('state', sum( 100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
Пример:
>>Y=randn(4.3)
Y =
-0.4326 -1.1465 0.3273
-1.6656 1.1909 0.1746
0.1253 1.1892 -0.1867
0.2877 -0.0376 0.7258
Проверить распределение случайных чисел по нормальному закону можно, построив гистограмму распределения большого количества чисел. Например, следующие команды
» Y=randn(10000,1);
» hist(Y,100)
строят гистограмму (рис. 10.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением.
Рис. 10.2.
Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах
Из рисунка видно, что огибающая гистограммы действительно близка к нормальному закону распределения.
В пакете расширения Statistics Toolbox можно найти множество статистических функций, в том числе для генерации случайных чисел с различными законами распределения и определения их статистических характеристик.
Создание матриц с заданной диагональю
Свойства матриц сильно зависят от их диагональных элементов. Следующая функция MATLAB позволяет создавать специальные типы матриц с заданными диагональными элементами:
X = diag(v.k) — для вектора v, состоящего из п компонентов, возвращает квадратную матрицу X порядка n+abs(k) с элементами v на
k-й
диагонали, при k=0 -это главная диагональ (из левого верхнего угла матрицы в правый нижний угол), при k>0 — одна из диагоналей (диагональ в терминологии MATLAB — это линия, параллельная главной диагонали) выше главной диагонали, при k<0 — одна из нижних диагоналей. Остальные элементы матрицы — нули;
X = diag(v) — помещает вектор v на главную диагональ (то же. что и в предыдущем случае при k=0);
v = diag(X.k) — для матрицы X возвращает вектор-столбец, состоящий из элементов n-й диагонали матрицы X;
v = diag(X) — возвращает главную диагональ матрицы X (то же, что и в предыдущем случае при k=0).
Примеры:
» v=[2.3];X-d1ag(v.2)
X=
0 0 2 0
0 0 0 3
0 0 0 0
0 0 0 0
» X=[2,5.45,6;3.5.4.9;7.9.4.8;5.66,45.2];
v=diag(X,0)
v =
2
5
4
2
Создание матрицы с единичными элементами
Для создания матриц, все элементы которых — единицы, используется функция
ones:
ones(n) — возвращает матрицу размера nхn, все элементы которой — единицы. Если п — не скаляр, то появится сообщение об ошибке;
ones(m.n) или ones([m п]) — возвращают матрицу размера mxn, состоящую из единиц;
ones(dl.d2,d3....) или ones([dl1 d2 d3...]) — возвращает массив из единиц с размером d1xd2xd3x...;
ones(size(A)) — возвращает массив единиц той же размерности и размера, что и А. Матрица с единичными элементами в отличие от единичной матрицы в MATLAB определена и для многомерных массивов.
Пример:
» s=ones(3,4)
s=
1 1 1 1
1 1 1 1
1 1 1 1
Создание матрицы с нулевыми элементами
Иногда нужны матрицы, все элементы которых — нули. Следующая функция обеспечивает создание таких матриц:
zeros(п) — возвращает матрицу размера nхn, содержащую нули. Если n — не скаляр, то появится сообщение об ошибке;
zeros(m.n) или zeros([m n]) — возвращают матрицу размера mxn, состоящую из нулей;
zeros(d1.d2,d3,...) или zeros([d1.d2.d3...]) — возвращают массив из нулей размера d1xd2xd3x...;
zeros(size(A)) — возвращает массив нулей того же размера и размерности, что и А.
Пример:
» D=zeros(3.2)
D=
0 0
0 0
0 0
Создание вектора равноотстоящих в логарифмическом масштабе точек
Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Она особенно эффективна при создании вектора частот. Это логарифмический эквивалент оператора : и функции linspace:
logspace(a.b) — возвращает вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10^0 и 10^b;
logspace(a.b.n) — возвращает n точек между декадами 10^a и 10^b;
logspace(a.pi) — возвращает точки в интервале между 10^a и
п.
Эта функция очень полезна в цифровой обработке сигналов.
Все аргументы функции logspace должны быть скалярными величинами. Пример:
» L=logspaced.2,14)
L =
Columns 1 through 7
10.000011.937814.251017.012520.309224.244628.9427
Columns 8 through 14
34.551141.246349.238858.780270.170483.7678100.0000
Суммирование элементов
Определены следующие функции суммирования элементов массивов:
sum(A) — возвращает сумму элементов массива, если А — вектор, или вектор-строку, содержащую сумму элементов каждого столбца, если А — матрица;
sum(A.dim) — возвращает сумму элементов массива по столбцам (dim-1), строкам (dim=2) или иным размерностям в зависимости от значения скаляра dim.
Пример:
» A=magic(4) | |||||
А = | |||||
16 2 |
3 |
13 | |||
5 11 |
10 |
8 | |||
9 7 |
6 |
12 | |||
4 14 |
15 |
1 | |||
»B=sum(A) | |||||
В = |
34 34 34 34
cumsum(A) — выполняет суммирование с накоплением. Если А — вектор, cumsum(A) возвращает вектор, содержащий результаты суммирования с накоплением элементов вектора А. Если А — матрица, cumsum(A) возвращает матрицу того же размера, что и А, содержащую суммирование с накоплением для каждого столбца матрицы А;
cumsum(A.dim) — выполняет суммирование с накоплением элементов по размерности, определенной скаляром dim. Например, cumsum(A.l) выполняет суммирование по столбцам.
Пример:
» A=magic(4)
А =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
» В = cumsum(A)
В =
16 2 3 13
21 13 13 21
30 20 19 33
34 34 34 34
Вычисление магического квадрата
magic(n) — возвращает матрицу размера nхn, состоящую из целых чисел от 1 до n
2
, в которой суммы элементов по строкам, столбцам и главным диагоналям равны одному и тому же числу. Порядок матрицы должен быть больше или равен 3.
Пример: » M=magic(4) | |||||||||||
м = | |||||||||||
16 |
2 |
3 |
13 | ||||||||
5 |
11 |
10 |
8 | ||||||||
9 |
7 |
6 |
12 | ||||||||
4 |
14 |
15 |
1 | ||||||||
Вычисление произведений
Несколько простых функций служат для перемножения элементов массивов:
prod(A) — возвращает произведение элементов массива, если А — вектор, или вектор-строку, содержащую произведения элементов каждого столбца, если А — матрица;
prod (A, dim) — возвращает матрицу (массив размерности два) с произведением элементов массива А по столбцам (dim=l), по строкам(dim=2), по иным размерностям в зависимости от значения скаляра dim.
Пример:
» A=[1234; |
2457; |
6 | |||||||||
A |
- | ||||||||||
1 2 |
3 |
4 | |||||||||
2 4 |
5 |
7 | |||||||||
6 8 |
3 |
4 | |||||||||
>; |
> B=prod(A) | ||||||||||
В |
= | ||||||||||
12 64 |
45 |
i: | |||||||||
cumprod(A) — возвращает произведение с накоплением. Если А — вектор, cum-prod(A) возвращает вектор, содержащий произведения с накоплением элементов вектора А. Если А — матрица, cumprod(A) возвращает матрицу того же размера, что и А, содержащую произведения с накоплением для каждого столбца матрицы А (Первая строка без изменений, во второй строке произведение первых двух элементов каждого столбца, в третьей строке элементы второй строки матрицы-результата умножаются на элементы третьей строки матрицы входного аргумента по столбцам и т. д.);
cumprod(A,dim) — возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от значения скаляра dim.
Примеры:
» А=[1 2 3; 4 5 6; 7 8 9]
А=
1 2 3
4 5 6
7 8 9
» В = cumprod(A)
cross(U. V) — возвращает векторное произведение векторов U и V в трехмерном пространстве, т. е. W=UxV.
U и V — обязательно векторы с тремя элементами;
cross(U,V,dim) — возвращает векторное произведение U и V по размерности, определенной скаляром dim. U и V — многомерные массивы, которые должны иметь одну и ту же размерность, причем размер векторов в каждой размерности size(U.dim) и size(V.dim) должен быть равен 3.
Пример:
» а = [6 5 3]; b= [1 7 6];с = cross(a.b)
с =
9 -33 37
Вычисление сопровождающей матрицы
Начиная с этого раздела рассматриваются функции, относящиеся к различным
специальным матрицам.
Они довольно широко используются при решении достаточно серьезных задач матричного исчисления. В связи с тем, что назначение соответствующих функций вытекает из их наименования, мы не будем сопровождать описание вводными комментариями. Соответствующие подробные определения вы найдете в книге. Рекомендуем читателю построить графики, представляющие элементы этих матриц.
compan(u) — возвращает сопровождающую матрицу, первая строка которой равна -u (2: n) /u(1), где и — вектор полиномиальных коэффициентов. Собственные значения compan(u) — корни многочлена. Пример: для многочлена х^3+х
^
2-6х-8 вектор полиномиальных коэффициентов г имеет следующий вид:
» r=[1.1.-6.-8]
r =
1 1 -6 -8
» A=compan(r)
%
сопровождающая матрица
А =
-1 6 8
1 0 0
0 1 0
» eigtcompan(r))
%
корни многочлена
ans =
-2.0000
2.5616
-1.5616
Вычисление тестовых матриц
Для выполнения ряда вычислений в области линейной алгебры создан ряд специальных матриц, именуемых
тестовыми матрицами.
Такие матрицы создаются указанными ниже средствами.
[А.В,С....] = gallerу('tmfun',P1.P2,...) — возвращает тестовые матрицы, определенные строкой tmfun, где tmfun — это имя семейства матриц, выбранное из списка. Р1, Р2,„. — входные параметры, требуемые для конкретного семейства матриц. Число используемых параметров P1, P2,... изменяется от матрицы к матрице. Функция gallery хранит более 50 различных тестовых матричных функций, полезных для тестирования численных алгоритмов и других целей (включая матрицы Коши, Чебышева, фон Неймана, Вандермонде,Уилкинсо-на и т. д.).
Пример:
» A=gallery('dramadah',5.2)
А = | |||||||||||||
1 |
1 |
0 |
1 |
0 | |||||||||
0 |
1 |
1 |
0 |
1 | |||||||||
0 |
0 |
1 |
1 |
0 | |||||||||
0 |
0 |
0 |
1 |
1 | |||||||||
0 |
0 |
0 |
0 |
1 | |||||||||
Выделение треугольных частей матриц
При выполнении ряда матричных вычислений возникает необходимость в выделении треугольных частей матриц. Следующие функции обеспечивают такое выделение:
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