Векторы, матрицы и операции над ними.

MatLAB - система, специально предназначенная для осуществления слож- ных вычислений с векторами, матрицами и полиномами. Под вектором в MatLAB понимается одномерный массив чисел, а под матрицей - двумерный массив. При этом по умолчанию предполагается, что любая заданная переменная является век- тором или матрицей. Например, отдельное заданное число система воспринимает как матрицу размером (1*1), а вектор-строку из N элементов - как матрицу размером (1*N).

 

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

После введения вектора система выводит его на экран. То, что в приведенном примере последний элемент выведен как 0, обусловлено установленным форматом short, в соответствии с которым выводятся данные на экран. Длинный вектор можно вводить частями, которые потом объединять с помощью операции объединения векторов в строку : v = [ v1 v2 ].

Язык MatLAB дает пользователю возможность сокращенного введения вектора, значения элементов которого составляют арифметическую прогрессию. Если обозначить: nz - начальное значение этой прогрессии (значение первого эле-мента вектора); kz - конечное значение прогрессии (значение последнего элемента вектора); h - разность прогрессии (шаг), то вектор можно ввести с помощью короткой записи V = nz : h : kz.

Если средний параметр (разность прогрессии) не указан, то он по умолчанию принимается равным единице. Так вводятся векторы-строки.

Вектор-столбец вводится аналогично, но значения элементов отделяются знаком ";". Ввод значений элементов матрицы осуществляется в MatLAB в квадратных скобках, по строкам. При этом элементы строки матрицы один от другого отделяются пробелом или запятой, а строки одна от другой отделяются знаком ";".

Формирование векторов и матриц MatLAB имеет несколько функций, которые позволяют формировать векторы и матрицы некоторого определенного вида. К таким функциям относятся: zeros(М,N) - создает матрицу размером (М*N) с нулевыми элементами, например:

 

» zeros(3,5)

ans =

0 0 0 0 0

0 0 0 0 0

0 0 0 0 0

 

ones(М,N) - создает матрицу размером (М*N) с единичными элементами, например:

 

» ones(3,5)

ans =

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

 

eye(М,N) - создает единичную матрицу размером (М*N), т. е. с единицами по главной диагонали и остальными нулевыми элементами, например:

 

» eye(3,5)

ans =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

 

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

 

» rand(3,5)

ans =
2.1896e-001 6.7930e-001 5.1942e-001 5.3462e-002 7.6982e-003

4. 7045e-002 9. 3469e-001 8. 3097e-001 5. 2970e-001 3. 8342e-001

6. 7886e-001 3. 8350e-001 3. 4572e-002 6. 7115e-001 6. 6842e-002

 

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

» randn(3,5)

ans =

1.1650e+000 3.5161e-001 5.9060e-002 8.7167e-001 1.2460e+000

6. 2684e-001 -6. 9651e-001 1. 7971e+000 -1. 4462e+000 -6. 3898e-001

7. 5080e-002 1. 6961e+000 2. 6407e-001 -7. 0117e-001 5. 7735e-001

 

hadamard(N) - создает матрицу Адамара размером (N*N), например:

» hadamard(4)

ans =

1 1 1 1

1 -1 1 -1

1 1 -1 -1

1 -1 -1 1

hilb(N) - создает матрицу Гільберта размером (N*N), например:

» hilb(4)

ans =

1.0000e+000 5.0000e-001 3.3333e-001 2.5000e-001

5.0000e-001 3.3333e-001 2.5000e-001 2.0000e-001

3. 3333e-001 2. 5000e-001 2. 0000e-001 1. 6667e-001

2. 5000e-001 2. 0000e-001 1. 6667e-001 1. 4286e-001

 

invhilb(N) - создает обратную матрицу Гильберта размером (N*N), на- пример:

» invhilb(4)

ans =

16 -120 240 -140

-120 1200 -2700 1680

240 -2700 6480 -4200

-140 1680 -4200 2800

 

 

pascal(N) - создает матрицу Паскаля размером (N*N), например:

» pascal(5)

ans =

1 1 1 1 1

1 2 3 4 5

1 3 6 10 15

1 4 10 20 35

1 5 15 35 70.

В языке 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

 

 

reshape(A,m,n) - образует матрицу размером (m*n) путем выборки элементов заданной матрицы А по столбцам и последующему распределению этих эле- ментов по 'n' столбцам, каждый из которых содержит 'm' элементов; при этом число элементов матрицы А должно равняться m*n, например:

» reshape(A,2,9)

ans =

1 13 8 3 15 10 5 17 12

7 2 14 9 4 16 11 6 18

 

tril(A) - образует нижнюю треугольную матрицу на основе матрицы А путем обнуления ее элементов выше главной диагонали:

» tril(A)

ans =

1 0 0 0 0 0

7 8 0 0 0 0

13 14 15 0 0 0

 

triu(A) - образует верхнюю треугольную матрицу на основе матрицы А пу- тем обнуления ее элементов ниже главной диагонали:

» triu(A)

ans =

1 2 3 4 5 6

0 8 9 10 11 12

0 0 15 16 17 18

 

hankel(V) - образует квадратную матрицу Ганкеля, первый столбец которой совпадает с заданным вектором V, например:

>> V = [-5 6 7 4]

V = -5 6 7 4

» hankel(V)

ans =

-5 6 7 4

6 7 4 0

7 4 0 0

4 0 0 0

 

Процедура diag(х) - формирует или извлекает диагональ матрицы. Если х - вектор, то функция diag(х) создает квадратную матрицу с вектором х на главной диагонали:

» diag(V)

ans =

-5 0 0 0

0 6 0 0

0 0 7 0

0 0 0 4

 

 

Чтобы установить заданный вектор на другую диагональ, при обращении к функции необходимо указать еще один параметр (целое число) - номер диагонали (при этом диагонали отсчитываются от главной вверх), например: » diag(V, -1)

ans =

0 0 0 0 0

-5 0 0 0 0

0 6 0 0 0

0 0 7 0 0

0 0 0 4 0

Если х - матрица, то функция diag создает вектор-столбец, который состоит из элементов главной диагонали заданной матрицы х, например, для матрицы А, указанной перед примером применения процедуры fliplr:

» diag(A)

ans =

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

» diag(A,3)

ans =

Функция zeros(1,N) формирует (создает) вектор-строку из N нулевых элементов. Аналогично zeros(N,1) создает вектор-столбец из N нулей. Векторы, значения элементов которых являются случайными равномерно распределенными, формируются таким образом: rand(1,n) - для вектора-строки и rand(m,1) - для вектора-столбца.