Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_4_задание векторов и матриц.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
158.21 Кб
Скачать

Особые матрицы

B ML можно не только задавать матрицы своими значениями или формировать их по формулам, но можно с помощью специальных функций получать особые матрицы:

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

rand(n, m) формирует матрицу из n строк и m столбцов, заполненную случайными равномерно распределенными числами в интервале от 0 до 1.

rand(n) – формирует квадратную матрицу случайных чисел в диапазоне от 0 до 1. Существует еще функция randn (n), которая формирует случайные числа, распределенные по нормальному закону.

>>A=rand(3)

A =

0.9501 0.4860 0.4565

0.2311 0.8913 0.0185

0.6068 0.7621 0.8214

B=randn(4)

B =

-0.1241 0.6715 0.4889 0.2939

1.4897 -1.2075 1.0347 -0.7873

1.4090 0.7172 0.7269 0.8884

1.4172 1.6302 -0.3034 -1.1471

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

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

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

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

B =

0.9501 0.4860 0.4565 0.4447

0.2311 0.8913 0.0185 0.6154

0.6068 0.7621 0.8214 0.7919

>> G=randn(3)

G =

0.5377 0.8622 -0.4336

1.8339 0.3188 0.3426

-2.2588 -1.3077 3.5784

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

>> rand(size(A))

ans =

0.4103 0.3529 0.1389

0.8936 0.8132 0.2028

0.0579 0.0099 0.1987

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

Магический квадрат (матрица, у которой суммы элементов в строках, столбцах и диагоналях одинаковы) – magic(n,m):

>> magic(3)

ans =

8 1 6

3 5 7

4 9 2

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

>> eye(3)

ans =

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

Для увеличения быстродействия работы программы бывает полезно заранее задать размер матрицы, для этого создать матрицу с нулевыми элементами – zeros(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

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

>> A=[1 2 3];

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

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

C =

2 9 5 1

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

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

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

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

X

Y


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

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

>> Z=[X Y]

Z =

1 2 5 6

3 4 7 8

  • по вертикали

X

Y


>>Z=[X;Y]

Z=

1 2

3 4

5 6

7 8

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

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

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

Например,

Из вектора 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

30 40

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

X =

3 10 20

4 30 40

2 8 3

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

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

X =

10 20 20

30 40 40

2 8 3

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

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

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

X =

3 20

4 40

2 3

Если бы потребовалось бы удалить, например, 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(1:5,1:5)=0, но лучше сделать так: Сначала создать матрицу из 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

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

0 0 -1 -1 -1

При необходимости преобразовать матрицу в вектор нужно записать, например:

X =

0.9593 0.1493 0.2543

0.5472 0.2575 0.8143

0.1386 0.8407 0.2435

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

-1.0000 0.2919

-0.5000 0.7702

0 1.0000

0.5000 0.7702

1.0000 0.2919

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

Функция 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;2;3;4];

>> D=diag(Z)

D =

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

>> B=[1 2 3 4];

>> C=diag(B)

C =

1 0 0 0

0 2 0 0

0 0 3 0

0 0 0 4

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

>> diag(C)

ans =

1

2

3

4

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

Сформируем (трехдиагональную) приведенную ниже матрицу размера 5х5, с использованием функций MatLab.

1 -1 0 0 0

8 2 -2 0 0

0 8 3 -3 0

0 0 8 4 -4

0 0 0 8 5

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

>> V=[1 2 3 4 5]; или так >> V=1:5

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

R =

1 -1 0 0 0

8 2 -2 0 0

0 8 3 -3 0

0 0 8 4 -4

0 0 0 8 5

Автоматическое заполнение матриц. Формирование матрицы блоками

Сформировать матрицу X следующего вида:

1 0 0 0 3 3 3 3

0 1 0 0 3 3 3 3

0 0 1 0 3 3 3 3

0 0 0 1 3 3 3 3

5 5 5 5 9 0 0 0

5 5 5 5 0 9 0 0

5 5 5 5 0 0 9 0

5 5 5 5 0 0 0 9

Для этого можно представить матрицу X в виде 4-х квадратных блоков 4х4. Для формирования диагональных фрагментов можно использовать функцию eye(4), которая сформирует единичную матрицу. Для формирования первого блока (желтого) достаточно записать просто eye(4), а для формирования 2-ого блока (серого) – 9* eye(4). Чтобы сформировать блоки из 3 и 5 достаточно использовать функцию ones(4), которая заполнит блок единицами, а затем умножить каждый элемент матрицы на 3 и 5 соответственно.

>> X=[eye(4), 3*ones(4); 5*ones(4),9*eye(4)]

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

>> A=round(10*rand(3)-5*ones(3))

A =

-1 -5 4

-4 3 -4

5 3 -1

23