Векторы, матрицы и операции над ними.
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) - для вектора-столбца.