Урок №10.

Операции с векторами и матрицами

Матрицы представляют собой самые распространенные объекты системы MATLAB. Ниже описываются основные операции с матрицами. По обилию матричных операторов и функций MATLAB является лидером среди массовых систем компьютерной математики.

Создание матриц с заданными свойствами

Создание единичной матрицы

Для создания единичной матрицы (она обычно обозначается как Е) служит функция eye:

Единичная матрица не определена для многомерных массивов. Так, функция у = 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

 

Создание матрицы с единичными элементами

Для создания матриц, все элементы которых — единицы, используется функция ones:

Пример:

» s=ones(3,4)

s=

1    1    1    1

1    1    1    1 

1    1    1    1

Создание матрицы с нулевыми элементами

Иногда нужны матрицы, все элементы которых — нули. Следующая функция обеспечивает создание таких матриц:

Пример:

» D=zeros(3.2)

 D=

0    0

0    0

0    0

Создание линейного массива равноотстоящих точек

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

Пример:

» 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

Создание вектора равноотстоящих в логарифмическом масштабе точек

Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Она особенно эффективна при создании вектора частот. Это логарифмический эквивалент оператора : и функции linspace:

Все аргументы функции 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

Создание массивов со случайными элементами

» randperm(6) 

ans =

243651

Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1):

Пример: 

» 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,l);

 » Y=rand(1000,1);

 » plot(Y,V,'.')

Полученный при этом график показан на рис. 10.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.

Рис. 10.1. Случайные точки с равномерным распределением координат на плоскости

Функция randn генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1:

Пример:

>>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.l00)

строят гистограмму (рис. 10.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением.

Рис. 10.2. Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах

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

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

Конкатенация матриц

Конкатенацией называют объединение массивов, которое реализует следующая функция.

» A =[2.4:3,5];B=[8,7;9.0];C=cat(1.A.B) 

С =

2     4

3     5

8     7

9     0

Создание матриц с заданной диагональю

Свойства матриц сильно зависят от их диагональных элементов. Следующая функция MATLAB позволяет создавать специальные типы матриц с заданными диагональными элементами:

Примеры:

» 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

Перестановки элементов матриц

Для перестановок элементов матриц служат следующие функции:

Пример:

» F=[1.2.3;5.45,3] 

F =

1    2    3

5     45     3 

» fliplr(F) 

ans=

3    2    1

3     45     5

Пример:

F =



3

2

12

6

3

2

» flipud(F)

ans =



6

3

2

3

2

12

Пример:

» 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

Вычисление произведений

Несколько простых функций служат для перемножения элементов массивов:

Пример:

34]

» A=[l 234;

•2457;

6

A

-




1 2

3

4


2 4

5

7


6 8

3

4

>;

> B=prod(A)



В

=




12 64

45

i:

Примеры:

» А=[1 2 3; 4 5 6; 7 8 9] 

А=

1    2    3

4    5    6 

7    8    9 

» В = cumprod(A)

Пример:

» а = [6 5 3]; b= [1 7 6];с = cross(a.b) 

с =

9 -33 37

Суммирование элементов

Определены следующие функции суммирования элементов массивов:

Пример:

» 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

Пример:

» 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

Функции формирования матриц

Для создания матриц, состоящих из других матриц, используются следующие функции:

Пример:

» 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

Поворот матриц

Следующая функция обеспечивает поворот матрицы (по расположению элементов): О rot90(A) — осуществляет поворот матрицы А на 90° против часовой стрелки;

Пример:

» М=[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

Выделение треугольных частей матриц

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

Пример:

» М=[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

Пример:

м =

3     1     4

8    3    2

8     1     1

» triu(M)

ans =

3    1    4

0    3    2 

0    0    1

Вычисление сопровождающей матрицы

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

» 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

Вычисление тестовых матриц

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

Пример:

» 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

Матрицы Адамара

Пример:

»Н=

hadamard(4)


Н =



1

1    1

1

1

-1   1

-1

1

1    -1

-1

1

-1   -1

1

Матрицы Ганкеля

Примеры:

» с=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

Матрицы Гильберта

Пример:

» Н = 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(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 =

l.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

Вычисление магического квадрата

Пример:

» M=magic(4)

м =




16

2

3

13

5

11

10

8

9

7

6

12

4

14

15

1

Матрицы Паскаля

Матрицы Теплица

» с=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.

Матричные функции

Весьма представителен в MATLAB набор матричных функций. Они перечислены ниже.

Пример:

» 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

Примеры:

» S=[l,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

Если матрица 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

Пример:

» 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

Что нового мы узнали?

В этом уроке мы научились: