Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект.pdf
Скачиваний:
51
Добавлен:
23.07.2020
Размер:
2.68 Mб
Скачать

ОСОБЫЕ МАТРИЦЫ

B ML можно не только задавать матрицы своими значениями или формировать

их по формулам, но можно с помощью специальных функций получать особые

матрицы:

Матрица случайных чисел:

rand(n, m) формирует матрицу из n строк и m столбцов, заполненную

случайными равномерно распределенными числами в интервале от 0 до 1.

rand(n) – формирует квадратную матрицу n*n случайных чисел в диапазоне от

0 до 1

>>A=rand(3)

A =

 

 

 

 

 

 

0.95

0.48

0.45

 

 

 

 

01

60

65

 

 

 

 

0.23

0.89

0.01

 

 

 

 

11

13

85

 

 

 

 

0.60

0.76

0.82

 

 

 

 

68

21

14

 

 

 

 

 

 

 

 

Существует еще

функция

randn (n),

которая формирует

случайные

числа,

распределенные по нормальному закону.

B=randn(4)

B =

 

 

 

-

0.671

0.488

0.29

0.124

5

9

39

1

 

 

 

1.489

-

1.034

-

7

1.207

7

0.787

 

5

 

3

1.409

0.717

0.726

0.88

0

2

9

84

1.417

1.630

-

-

2

2

0.303

1.147

 

 

4

1

Можно задавать размер матрицы, используя вектор из двух элементов, равных

числу строк и столбцов. Например,

>> С=rand([3 4]) % То же самое, что rand(3,4)

34

С = 0.95

0.48

0.456

0.44

01

60

5

47

0.23

0.89

0.018

0.61

11

13

5

54

0.60

0.76

0.821

0.79

68

21

4

19

Если надо сгенерировать матрицу такого же размера, как и существующая

матрица, то необходимо выполнить команду

>> rand(size(A))

ans =

 

 

0.41

0.35

0.13

03

29

89

0.89

0.81

0.20

36

32

28

0.05

0.00

0.19

79

99

87

size(A) – функция, возвращающая размер матрицы А в виде вектора.

Формирование треугольной матрицы

>> tril(B) % формирует нижний треугольник

ans =

 

 

 

-0.1241

0

0

0

1.4897

-1.2075

0

0

1.4090

0.7172

0.7269

0

1.4172

1.6302

-0.3034

-1.1471

>> triu(B) % формирует верхний треугольник

ans =

-0.1241 0.6715 0.4889 0.2939

0 -1.2075 1.0347 -0.7873

0

0

0.7269

0.8884

0 0 0 -1.1471

ans =

Магический квадрат (матрица, у которой суммы элементов в строках,

столбцах и диагоналях одинаковы) – magic(n,m):

>> magic(3)

35

ans =

 

 

8

1

6

3

5

7

4

9

2

Единичная матрица – eye(n,m):

>> eye(3)

ans =

36

1

0

0

0

1

0

0

0

1

Матрица из 0 – zeros(n,m):

>> zeros(3)

ans =

 

 

0

0

0

0

0

0

0

0

0

Для увеличения быстродействия работы программы бывает полезно заранее

задать размер матрицы, для этого создать матрицу с нулевыми элементами – ze-

ros(n,m), а затем заполнять ее значениями.

Матрица из 1 – ones(n,m):

>> ones(3)

ans =

 

 

1

1

1

1

1

1

1

1

1

Создание новых векторов и матриц на основе имеющихся.

Вектор можно задать также путём объединения нескольких векторов.

Например, даны три вектора A, B, C, получить вектор D: >>A=[1 2 3]; B=[4 5 6]; C=[7 8 9];

>>D=[A B C] % Объединение по горизонтали

D =

 

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

9

>>D=[A; B; C] % Объединение по вертикали

D =

 

 

 

 

 

 

 

 

1

 

2

 

 

 

 

 

 

3

Элементы одного массива могут быть использованы при создании нового вектора. Например,

>>A=[1 2 3];

>>B=[5,6,9];

37

>> C=[A(2),B(3),B(1),A(1)]

C =

2 9 5 1

Такой же принцип можно использовать и для матриц.

Матлаб позволяет объединять несколько матриц в одну.

Можно выполнить объединение матриц:

по горизонтали

XY

>>X=[1 2;3 4];

>>Y=[5 6;7 8];

>>Z=[X Y]

Z =

 

 

 

 

1

5

6

 

 

по вертикали

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

Y

 

>>Z=[X;Y]

 

 

 

 

 

 

Z=

 

 

 

 

1

2

 

 

 

3

4

 

 

 

5

6

 

 

 

7

8

 

 

 

Размеры матриц должны быть согласованы.

Кроме того, для конкатенации матриц имеется специальная функция cat. Для горизонтального объединения следует записать cat(2,X,Y), а для вертикальной cat(1,X,Y),

В ML можно выделить отдельные фрагменты векторов или матриц. Для этого используются индексация с помощью двоеточия (операция :).

Например,

38

Из вектора D [1 2 3 4 5 6 7 8 9] получить вектор, содержащий элементы

исходного вектора с номера 4 до номера 8.

>> F=D(4:8)

F =

4 5 6 7 8

Пусть имеем матрицу X

>> X=[3 5 8;4 1 9;2 8 3]

X =

 

 

3

5

8

4

1

9

2

8

3

Получить новую матрицу Y, вырезкой из элементов матрицы X начиная с

элемента X(1,2) до X(3,3)

>> Y=X(1:3, 2:3)

Y =

 

5

8

1

9

8

3

Можно заменить один фрагмент матрицы другим.

X =

 

 

3

5

8

4

1

9

2

8

3

>> Z=[10 20; 30 40]

Z =

10 20

3040

>>X(1:2,2:3)=Z

X =

 

 

3

10

20

4

30

40

2

8

3

Аналогично можно вставить фрагмент Z в верхний правый угол:

>>

X(1:2,1:2)=

39

Z X =

 

 

10

 

20

20

30

 

40

40

2

8

3

 

Очень просто удалить, например, какой-либо столбец или строку в матрице.

Удалим 2-й столбец матрицы X. Для этого присвоим второму столбцу пустой

массив.

>> X(:,2)=[] % Обращение X(:,2) означает все эл-ты 2 столбца

X =

320

440

23

Если бы потребовалось бы удалить, например, 2-ю и 3-ю строки, то надо запи-

сать:

 

 

X =

 

 

3

10

20

4

30

40

2

8

3

>> X(2:3,:)=[]

X =

3 10 20

Если необходимо в матрице A 5х5 , состоящей из нулей, заменить значением

-1, например, элементы последней строки с третьего до последнего. Для этого

поступим так.

Сначала нужно создать матрицу из 0

>> A=zeros(5)

A =

 

 

 

 

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Затем записать:

>> A(end, 3:end)=-1

A =

0 0 0 0 0

40

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

-

-

-

 

 

1

1

1

Преобразовать матрицу в вектор можно так:

X =

0.95

0.14

0.25

93

93

43

0.54

0.25

0.81

72

75

43

0.13

0.84

0.24

86

07

35

>> X(:) ans =

0.9593

0.5472

0.1386

0.1493

0.2575

0.8407

0.2543

0.8143

0.2435

Получили вектор столбец в порядке следования по столбцам.

Ранее мы строили таблицу значений функции. Теперь, имея знания о

векторах, можно для этого использовать такой способ:

disp('

A

B')

% заголовок

A=-1:0.5:1;

%1-ый вектор

 

B=1-sin(A).^2;

%2-ой вектор

 

C=[A',B'];

%

матрица из двух столбцов

disp(C)

 

 

 

A

 

B

 

41

-0.291

1.009

00

-0.770

0.502

00

01.000

0

0.500.770

002

1.00

0.291

00

9

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

Функция X = diag(V) формирует квадратную матрицу X с вектором V на главной диагонали.

Функция X = diag(V, k) формирует квадратную матрицу X порядка length(v)+abs(k) с вектором V на k-й диагонали. Диагональная матрица со смещенной на k позиций диагональю (положительные k - смещение вверх,

отрицательные - вниз), результатом является квадратная матрица размера length(V)+abs(k).

Обратное действие - выделение главной диагонали из матрицы в вектор

D=diag(A).

Выделение k-ой диагонали из матрицы в вектор D =diag(A,k),

при k > 0 это номер k-й верхней диагонали, при k < 0 это номер k-й нижней диагонали.

>>Z=1:4;

>>D=diag(Z) D =

1

0

0

0

0

2

0

0

42

0

0

3

0

0

0

0

4

Этой же функцией можно выделить диагональ из матрицы:

>> diag(D) ans =

1

2

3

4

Результат вектор-столбец, состоящий из элементов, расположенных на

главной диагонали. Иными словами, при использовании этой функции, если параметром является матрица, результатом будет вектор, а если параметр – вектор, результат – матрица.

Сформируем трехдиагональную приведенную ниже матрицу размера 5х5, с ис-

пользованием функции diag.

1

-

0

0

0

 

1

 

 

 

8

2

-

0

0

 

 

2

 

 

0

8

3

-

0

 

 

 

3

 

0

0

8

4

-

 

 

 

 

4

0

0

0

8

5

Сначала сформируем вектор V из чисел от1 до 5. С помощью функции diag

сформируем 3 диагональные матрицы размера 5*5. Используем вектор V для создания диагональной матрицы и матрицы со смещенной на единицу вверх диагональю. Вектор из 4-х 8 сформируем так: 8*ones(1,4) и используем его первым аргументом функции diag, а -1 — вторым и получим третью вспомогательную матрицу. Теперь сформируем результирующую матрицу,

сложив все три

43

>>V=1:5;

>>R=diag(V)+diag(-V(1:4),1)+diag(8*ones(1,4),-1)

R =

1

-

0

0

0

 

1

 

 

 

 

 

 

 

 

 

8

2

-

0

0

 

 

 

2

 

 

 

0

8

3

-

0

 

 

 

 

3

 

 

0

0

8

4

-

44