Материал: Математическая система MATLAB. методические указания по выполнению лабораторных работ по дисциплинам. Белецкая С.Ю

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

3.3. Формирование векторов и матриц специального вида

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

zeros(M, N) − создает матрицу размером (M×N) с нулевыми элементами:

>> zeros(4,5) 

ans =       

0     0     0     0     0       

0     0     0     0     0       

0     0     0     0     0       

0     0     0     0     0

ones(M, N) − то же самое − с единичными элементами:

>> ones(4, 5) 

ans =        

1     1     1     1     1       

1     1     1     1     1      

1     1     1     1     1       

1     1     1     1     1 

eye(M,N) − создает матрицу размером (M×N) с единичными элементами по главной диагонали и остальными нулевыми элементами:

>> eye(4, 5) 

ans =       

1     0     0     0     0       

0     1     0     0     0       

0     0     1     0     0       

0     0     0     1     0 

Замечание: При формировании квадратных матриц записи данных функций допускают упрощения: zeros(N), ones(N), eye(N). Если необходимо формировать специальные матрицы по размеру заданной матрицы А порядка (M×N), то возможна форма записи: zeros(size(A)), ones(size(A)), eye(size(A)). Нулевой вектор столбец задается с помощью функции zeros(N, 1), а нулевая вектор-строка − с помощью функции zeros(1, N). Аналогичным образом для создания соответствующих векторов используются функции ones и eye.

Рассмотрим еще несколько полезных команд:

rand(M,N) −создает матрицу размером (M×N) из случайных чисел, равномерно распределенных в диапазоне от 0 до 1:

>> rand(3, 5) 

ans =       

0.4175    0.9304    0.0920    0.7012    0.2625        0.6868    0.8462    0.6539    0.9103    0.0475        0.5890    0.5269    0.4160    0.7622    0.7361 

randn(M,N) − создает матрицу размером (M×N) из случайных чисел, распределенных по нормальному закону с нулевым математическим ожиданием и стандартным (среднеквадратическим) отклонением, равным единице:

>> randn(3, 5) 

ans =        

1.1650     0.3516    0.0591     0.8717     1.2460         0.6268    ‐0.6965    1.7971    ‐1.4462    ‐0.6390         0.0751     1.6961    0.2641    ‐0.7012     0.5774 

Одна из интересных возможностей MATLAB − вычисление магического квадрата (функция magic). По команде magic(N) возвращается матрица размером (N×N), состоящая из целых чисел от 1 до N^2, в которой суммы элементов по строкам, столбцам, главной и побочной диагоналям, соответственно, равны одному и тому же числу. При N = 2 построение магического квадрата невозможно. Пример:

>> M = magic(4) 

M =      

16      2       3     13      

5      11     10     8     

9       7       6     12      

4      14     15     1 

Следующие функции hadamard(N), hilb(N), invhilb(N), pascal(N) − создают квадратные матрицы соответственно Адамара, Гильберта, обратную матрицу Гильберта и матрицу Паскаля размера (N×N). О работе данных функций можно узнать в справочной библиотеке MATLAB.

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

X =                                X =     

1                                  1     

2                                  2     

3                                  3          

Применение знака : (двоеточие) для формирования векторов. Оператор : (двоеточие) используется в MATLAB для различных целей. В частности, он позволяет генерировать числовые последовательности, необходимые для создания векторов или значений абсциссы при построении графиков. Общая форма задания такой последовательности имеет вид:

<начальное значение>:<шаг>:<конечное значение>

Шаг может быть как положительным, так и отрицательным. При шаге равном 1 он может опускаться в записи последовательности, в результате чего выше приведенная конструкция принимает более упрощенный вид:

<начальное значение>:<конечное значение>

Примеры:

>> 1:6 

ans =       

1   2   3   4   5   6 

>> i = 0:2:10 

i =     

0   2   4   6   8  10 

>> j = 10:‐1:4 

j =     

10   9   8   7   6   5   4

Задание матрицы требует указания различных строк. Для различения строк используется знак «;» (точка с запятой). Например:

>> M = [1 2 3; 4 5 6; 7 8 9] 

M =     

1   2   3    

4   5   6     

7   8   9 

Возможен ввод элементов матриц и векторов в виде арифметических выражений, содержащих любые допустимые системе функции.

>> p=[2+3/4 exp(-5);sqrt(10) 2.1*sin(3)]

p =

2.7500 0.0067

3.1623 0.2964

Для указания отдельного элемента вектора или матрицы используются выражения вида X(i) или M(i, j). Так, задавая элемент матрицы М при i = 2 и j = 3, будем иметь:

>> M(2, 3) 

ans =       

6

Можно, наоборот, любому элементу матрицы или вектора присвоить новое значение. Например, если на место элемента М(3,3) надо вставить число 10, то следует записать:

>> M(3, 3) = 10 

M =    

1  2   3     

4  5   6     

7  8  10 

Векторы и матрицы с комплексными элементами задаются следующим образом:

>> I = sqrt(-1);

>> M1 = [1 2;3 4]+i*[5 6;7 8]

M1 =

1.0000 + 5.0000i 2.0000 + 6.0000i

3.0000 + 7.0000i 4.0000 + 8.0000i

или

>> i=sqrt(-1);

>> M1=[1+5i 2+6i;3+7i 4+8i]

M1 =

1.0000 + 5.0000i 2.0000 + 6.0000i

3.0000 + 7.0000i 4.0000 + 8.0000i

При этом оператор присваивания i = sqrt(-1) необходимо записывать в том случае, если перед этим в сеансе работы переменной i присваивалось какое-либо значение. В противном случае запись данного оператора необязательна, так как системная переменная i − мнимая единица по умолчанию.

В языке MATLAB предусмотрено несколько функций, которые позволяют формировать матрицу на основе другой (заданной) матрицы или используя некоторый заданный вектор. К таким функциям относятся следующие:

fliplr(A) − формирует матрицу, переставляя столбцы заданной матрицы А относительно вертикальной оси, например:

A =     

1    2    3    4    5    6      

7    8    9   10   11   12     

13   14   15   16   17   18 

>> fliplr(A) 

ans =        

6    5    4    3    2    1       

12   11   10    9    8    7      

18   17   16   15   14   13 

flipud(A) − формирует матрицу, переставляя строки заданной матрицы А относительно горизонтальной оси:

>> flipud(A) 

ans =       

13   14   15   16   17   18 

       7    8    9   10   11   12        

1    2    3    4    5    6

rot90(A) − формирует матрицу путем «поворота» заданной матрицы А на 90 градусов против часовой стрелки:

>> rot90(A) 

ans =       

6    12    18       

5    11    17       

4    10    16       

3     9    15       

2     8    14       

1     7    13 

Формирование диагонали. Если x – вектор, то функция diag(x) создает квадратную матрицу с элементами заданного вектора на главной диагонали (другие элементы формируемой матрицы равны нулю).

>> V = [3 5 ‐1 9];

>> diag(V) 

ans =        

3     0     0     0        

0     5     0     0        

0     0    ‐1     0        

0     0     0     9

Элементы заданного вектора x могут быть установлены на любую (не обязательно главную) диагональ формируемой матрицы. Для этого при обращении к функции необходимо ввести еще один параметр k – целое число. Это число указывает на номер диагонали, отсчитываемый от главной диагонали. При этом отсчет ведется вверх для положительного числа (k > 0) и – вниз для отрицательного (k < 0), например:

>> diag(V, ‐1)                   

ans =                                    

0    0     0    0    0                     

3    0     0    0    0              

0    5     0    0    0                     

0    0    ‐1    0    0                

0    0     0    9    0    

Извлечение диагонали. Если x – матрица, то функция diag(х) создает векторстолбец, состоящий из элементов главной диагонали заданной матрицы x. Так, для матрицы А, введенной ранее в примере применения процедуры fliplr, извлечение главной диагонали осуществляется по следующей команде:

>> diag(A) 

ans =        

1        8       15 

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

>> diag(A, 3)                    >> diag(A, ‐2) 

ans =                            ans =        

4                              13       

11       

18

3.4. Конкатенация матриц, удаление и вставка частей матриц

В процессе решения тех или иных задач часто возникает необходимость внесения некоторых изменений в исходные матрицы. Эти изменения могут касаться как простых операций, связанных, например, с заменой части элементов матрицы на их новые значения, так и более сложных преобразований. Часто требуется из нескольких малых матриц сформировать большую матрицу. Такое объединение малых матриц в большую называется конкатенацией (сцеплением). Иногда, напротив, требуется удалить из исходной матрицы часть строк или столбцов, в результате чего создается меньшая матрица из большей. Рассмотрим возможности системы MATLAB в отношении указанных операций.

Объединение малых матриц в большую (конкатенация)

Общий принцип горизонтальной конкатенации: блоки-матрицы Ai имеют одинаковое число строк и объединяются в обобщенную «строку»

A = [A1, A2, … , An],

отделяясь между собой пробелами или запятыми. При вертикальной конкатенации блоки-матрицы Ai должны иметь одинаковое число столбцов, что позволяет сцепить их в обобщенный «столбец»

A = [A1; A2; … ; An].

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

>>A = ones(3)                     >> B = eye(3)*(‐3)  A =                                B =

1     1 1       ‐3     0     0

1     1     1                      0    ‐3     0 1     1     1                      0     0    ‐3    

>> X = [6:8]

X =

6     7     8

>> D=[A X'] % Горизонтальная конкатенация      

D =

1 1 1 6

1 1 1 7

1 1 1 8

>> V=[B;A] % Вертикальная конкатенация

V =

-3 0 0

0 -3 0

0 0 -3

1 1 1

1 1 1

1 1 1

Извлечение и вставка частей матриц

Для извлечения части матрицы из матрицы А необходимо обратиться к имени этой матрицы с указанием в круглых скобках номеров строк и столбцов следующим образом: A(i:j, k:l). Пусть из полученной большой матрицы V необходимо выделить блок размером 3×2, ограниченный 2-й и 4-й строками и 2-м и 3-м столбцами:

>> M=V(2:4,2:3) % Извлечение подматрицы M из матрицы V 

M =

-3 0

0 -3

1 1

Пусть требуется создать векторы X1 и Y1. Причем вектор X1 состоит из элементов 2-го столбца матрицы M, а вектор Y1 состоит из элементов 1-й строки матрицы M. Тогда необходимо записать:

>> X1=M(:,2) >> Y1=M(1,:)

X1 = Y1 =

0 -3 0

-3

1

Для вставки подматрицы M в большую матрицу А необходимо обратиться к имени этой матрицы с помощью следующего оператора присваивания: A(i:j, k:l) = М. При этом порядок подматрицы M должен соответствовать указанным в круглых скобках номерам строк и столбцов матрицы А. Пример:

% Вставка блока (4×2) из нулей в матрицу V

>> V(3:6,1:2)=zeros(4,2)

V =

-3 0 0

0 -3 0

0 0 -3

0 0 1

0 0 1

0 0 1

Любую матрицу M можно «растянуть» в единый вектор K с помощью простой записи: K = M(:).

>> K=M(:)

K =

-3

0

1

0

-3

1

Удаление столбцов и строк матриц

Для удаления отдельных строк и столбцов матрицы используются пустые квадратные скобки [ ]. Проделаем это над матрицей V, заданной выше:

>>V(1:4, :)=[]

 % Удалеиие с 1‐й по 4‐ю строку матрицы V 

V =

0 0 1

0 0 1

Теперь из вновь образованной матрицы V удалим 1-й, 3-й столбeц:

>> V(:,[1,3])=[]

V =

0

0

Источник: https://studfile.net/preview/16562660/