Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Начала прогаммирования в среде MatLab / Начала программирования в среде MatLab.pdf
Скачиваний:
254
Добавлен:
02.05.2014
Размер:
5.66 Mб
Скачать

1.3. Операции с векторами и матрицами

29

1.3. Простейшие операции с векторами и матрицами

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

ром (1*N).

1.3.1. Ввод векторов и матриц

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

Например, запись строки V = [ 1.2 -0.3 1.2e-5] задает вектор V, который содержит три элемента со значениями 1.2, -0.3 и 1.2е-5 (рис. 1.14):

Рис. 1.14

После введения вектора система выводит его на экран. То, что в приведенном примере последний элемент выведен как 0, обусловлено установленным форматом short, в соответствии с которым выводятся данные на экран.

Длинный вектор можно вводить частями, которые потом объединять с по-

мощью операции объединения векторов в строку : v = [ v1 v2 ]. Например:

Рис. 1.15

Язык MatLAB дает пользователю возможность сокращенного введения век-

тора, значения элементов которого составляют арифметическую прогрессию.

Если обозначить: nz - начальное значение этой прогрессии (значение первого эле-

1.3. Операции с векторами и матрицами

30

мента вектора); kz - конечное значение прогрессии (значение последнего элемента вектора); h - разность прогрессии (шаг), то вектор можно ввести с помощью короткой записи V = nz : h : kz . Например, введение строки V = - 0.1 : 0.3 : 1.4 приведет к такому результату:

Рис. 1.16

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

>> -2.1 : 5

приводит к формированию такого вектора

ans = -2.1000 -1.1000 -0.1000 0.9000 1.9000 2.9000 3.9000 4. 9000

Так вводятся векторы-строки. Вектор-столбец вводится аналогично, но

значения элементов отделяются знаком ";".

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

ляются пробелом или запятой, а строки одна от другой отделяются знаком ";"

(рис. 1.17).

Рис. 1.17

1.3.2. Формирование векторов и матриц

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

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

» zeros(3,5) ans =

0 0 0 0 0

1.3. Операции с векторами и матрицами

31

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

1.3. Операции с векторами и матрицами

32

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

1.3. Операции с векторами и матрицами

33

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 =

1

8

15

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

» diag(A,3) ans =

4

11

18