Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lecture1.doc
Скачиваний:
18
Добавлен:
10.07.2019
Размер:
126.46 Кб
Скачать

1.2. Элементарные операции с матрицами

Представление чисел

Числа в MATLAB могут быть целыми, дробными, с фиксированной и плавающей точкой. Ниже приведены примеры представления чисел:

1

-2

4.321

0.000000001

987.6543е-21

-123.567е10

Числа могут быть комплексными. В MATLAB мнимая единица ( ) обозначается как i или j. Пример комплексных чисел:

3i

2+4i

-5.4321i

-123.45+1.2e-4i

Команда format управляет формой вывода чисел на экран. Особо подчеркнем, что эта команда влияет только на то, как числа изображаются на экране, но никак не влияет на точность вычислений и на представление чисел в рабочем пространстве системы MATLAB. Ниже приведен пример представления числового вектора в различных форматах:

>> х = [4/3 1.2345е-6];

>> format short

>> x

x = 1.3333 0.0000

>> format short e 1.3333e+000 1.2345e-006

>> format short g 1.3333 1.2345e-006 format long

1.33333333333333 0.00000123450000 Format long e

1.333333333333333e+000 1.234500000000000e-006

format long g

1.33333333333333 1.2345e-006

format bank

1.33 0.00

format rat

4/3 1/810045

format hex

3Ff5555555555555 3eb4b6231abfd271

Переменные

Система MATLAB выполняет различные действия над переменными, каждая из которых имеет некоторое имя. Имена назначаются пользователем или системой и формируются как произвольные последовательности латинских букв и цифр (допустим также символ подчеркивания), начинающиеся обязательно с буквы. При этом система различает прописные и строчные буквы. Указание имени новой переменной в левой части оператора присваивания приводит к её автоматическому размещению в оперативной памяти, трактуемой в среде как «рабочее пространство» (WorkSpace). Удалить переменную из рабочего пространства можно только с помощью команды clear.

Системные переменные

В системе по умолчанию определены некоторые часто используемые переменные, основными из которых являются следующие:

i или j – мнимая единица ;

pi – число =3.141592653589793…;

eps – погрешность для операций над числами с плавающей точкой (возвращает расстояние (интервал) между числом 1.0 и следующим ближайшим числом с плавающей запятой, которое воспринимается как отличное от 1.0);

inf – значение машинной бесконечности;

ans – переменная, в которой хранится результат выполнения последней операции (создается автоматически, когда не определены выходные аргументы какой-либо команды);

NaN – указание на нечисловой характер данных (Not-a-Number);

Для очистки рабочего пространства используются следующие варианты команды clear:

clear – уничтожение всех переменных;

clear x – уничтожение переменной x;

clear a, b, c – уничтожение нескольких указанных переменных.

Система MATLAB позволяет сохранять переменные в файлах. Для этого предназначена команда save, которая может использоваться в следующих формах:

save fname – записываются все переменные из рабочего пространства в двоичный файл с именем fname.mat;

save fname X – в указанный файл записывается только переменная X;

save fname X Y Z – записываются переменные X, Y, Z.

Также можно указывать ключи, уточняющие формат записи:

-mat – двоичный mat-файл, используемый по умолчанию;

-ascii – ASCII-формат обычной точности (8 цифр) для записи в текстовый файл;

-ascii -double – ASCII-формат двойной точности (16 цифр);

-ascii -double -tabs – формат с разделителями и метками табуляции;

-v4 – запись в mat-файл в формате версии MATLAB 4;

-append – добавление в существующий файл.

Для загрузки рабочей области, ранее сохраненной командой save, можно использовать команду load:

load fname – загрузка ранее сохраненных в файле fname.mat переменных.

Выражения

Формируются по обычным правилам, принятым в программировании на языках высокого уровня.

Задание матриц

Для задания некоторых матриц стандартного вида в систему Matlab включены соответствующие функции.

1. Нулевая матрица размера ­задается функцией zeros(n,m), например:

>> Z = zeros(2,4)

Z =

0 0 0 0

0 0 0 0

2. Единичная матрица размера ­задается функцией eye(n,n), например:

>> I = eye(2,2)

I =

1 0

0 1

3. Для задания матрицы размера , все компоненты которой равны единице, служит функция ones(n,m), например:

>> N = ones(2,2)

I =

1 1

1 1

4. Матрица размера , со случайными компонентами, которые равномерно распределены на отрезке [0,1], задается функцией rand(n,m), например:

>> R=rand(2,3)

R =

0.4565 0.8214 0.6154

0.0185 0.4447 0.7919

5. Матрица – магический квадрат размера – задается функцией magic(n), например:

>> M=magic(3)

M =

8 1 6

3 5 7

4 9 22

Любые другие матрицы вводятся вручную или вызываются из файлов на диске.

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

V=[1 2 3];

задает вектор-строку V, имеющую три элемента со значениями 1, 2 и 3.

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

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

M =

1 2 3

4 5 6

7 8 9

определяет матрицу 3х3.

Совершенно аналогично с использованием символа разделения строк задаются блочные матрицы. Например, сформируем блочную матрицу , где – магический квадрат размера . Для этого подадим следующие команды:

>> A=magic(3)

A =

8 1 6

3 5 7

4 9 2

>> E=eye(3,3)

E =

1 0 0

0 1 0

0 0 1

>> Z=zeros(3)

Z =

0 0 0

0 0 0

0 0 0

>> B=[A E; Z A']

B =

8 1 6 1 0 0

3 5 7 0 1 0

4 9 2 0 0 1

0 0 0 8 3 4

0 0 0 1 5 9

0 0 0 6 7 2

Для указания отдельной компоненты вектора или матрицы используются выражения вида V(i) или M(i, j). Если для матрицы указать только один индекс, то в результате будет получен соответствующий элемент блочного вектора, составленного из столбцов данной матрицы. Например,

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

M =

1 2 3

4 5 6

7 8 9

>> M(2)

ans =

4

>> M(6)

ans =

8

>> M(8)

ans =

6

Оператор «:».

Этот оператор играет весьма важную роль в системе и очень широко используется в различных формах для упрощения ряда манипуляций с матрицами.

В частности запись 1:10 является вектором-строкой, содержащей целые числа от 1 до 10: 1 2 3 4 5 6 7 8 9 10. Для формирования аналогичного вектора с шагом, отличным от единицы, применяют, например, такую запись: 5:-2:-3, что эквивалентно вектору 5 3 1 -1 -3.

Рассматриваемый оператор особенно удобно использовать для выделения отдельных блоков из состава заданной матрицы. В частности, запись A(1:6,j) выделяет первые шесть элементов из j-го столбца матрицы A, запись A(1:2,1:3) выделяет верхний блок размера 2×3, а запись A(4,:) – четвёртую строку этой матрицы. Например,

>> A=rand(5,5)

A =

0.9501 0.7621 0.6154 0.4057 0.0579

0.2311 0.4565 0.7919 0.9355 0.3529

0.6068 0.0185 0.9218 0.9169 0.8132

0.4860 0.8214 0.7382 0.4103 0.0099

0.8913 0.4447 0.1763 0.8936 0.1389

>> B=A(1:3,1:3)

B =

0.9501 0.7621 0.6154

0.2311 0.4565 0.7919

0.6068 0.0185 0.9218

>> C=B(:,3)

C =

0.6154

0.7919

0.9218

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

>> M(2,:)=[]

M =

1 2 3

7 8 9

А теперь, удалим второй столбец:

>> M(:,2)=[]

M =

1 3

7 9

Простейшие операции с матрицами

Операция транспонирования матрицы выполняется с использованием символа «'»:

>> A=rand(2)

A =

0.2028 0.6038

0.1987 0.2722

>> B=A'

B =

0.2028 0.1987

0.6038 0.2722

Операции сложения, умножения и обращения матриц выполняются в соответствии с обычными правилами линейной алгебры в естественной форме записи.

Например,

>> A=rand(2,2)

A =

0.9501 0.6068

0.2311 0.4860

>> B=rand(2,2)

B =

0.8913 0.4565

0.7621 0.0185

>> C=A+B

C =

1.8414 1.0633

0.9932 0.5045

>> D=A*B

D =

1.3093 0.4449

0.5764 0.1145

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

Обращать можно только не особые (невырожденные) матрицы, определитель которых отличен от нуля. Для вычисления определителя используется команда (функция) det:

>> det(D)

ans =

-0.1065

Операция обращения матрицы выполняется с помощью возведения в -1-ю степень или с помощью команды inv:

>> A^-1

ans =

1.5117 -1.8876

-0.7190 2.9555

>> inv(A)

ans =

1.5117 -1.8876

-0.7190 2.9555

Поиск собственных значений и собственных векторов. Эта операция нами будет очень часто использоваться в дальнейшем, в особенности – в части поиска собственных значений матриц, которые в значительной мере определяют свойства линейных динамических объектов.

Для выполнения операции используется функция eig, применяемая в нескольких вариантах, среди которых рассмотрим два простейших.

1. Поиск только собственных значений квадратной матрицы A выполняется командой e=eig(A), где e – вектор с комплексными компонентами, содержащий искомые значения, например,

>> A=diag([1 2 3 4 5])

A =

1 0 0 0 0

0 2 0 0 0

0 0 3 0 0

0 0 0 4 0

0 0 0 0 5

>> e=eig(A)

e =

1

2

3

4

5

Выполним другой пример:

>> A = rand(5);

>> e=eig(A)

e =

2.8043

-0.0490 + 0.5617i

-0.0490 - 0.5617i

0.2093

-0.0381

2. Одновременный поиск собственных значений и собственных векторов квадратной матрицы A выполняется с помощью команды [V,D]=eig(A), где Dдиагональная матрица, содержащая собственные значения, а V матрица, столбцами которой являются соответствующие им собственные векторы. При этом, по определению, выполняется равенство AV=VD, например,

>> A=rand(2)

A =

0.3795 0.5028

0.8318 0.7095

>> [V,D]=eig(A)

V =

-0.7074 -0.5170

0.7068 -0.8560

D =

-0.1230 0

0 1.2119

>> A*V

ans =

0.0870 -0.6266

-0.0869 -1.0373

>> V*D

ans =

0.0870 -0.6266

-0.0869 -1.0373

Заметим, что собственные векторы выдаются в нормированном виде – их евклидовы нормы – единичные:

>> norm(V(:,2))

ans =

1

При выводе на экран собственных значений матриц, имеющих большие размерности, желательно выполнить их сортировку. Это можно сделать с помощью функции sort(e), которая располагает компоненты комплексного вектора e в порядке возрастания их модулей. Эту функцию удобно совмещать с функцией eig, подавая для вычисления собственных значений команду d=sort(eig(A)), например

>> A=rand(10);

>> e=sort(eig(A))

e =

-0.0474 - 0.1567i

-0.0474 + 0.1567i

0.2441

0.2689 - 0.4137i

0.2689 + 0.4137i

-0.3356 - 0.5869i

-0.3356 + 0.5869i

-0.4176 - 0.7707i

-0.4176 + 0.7707i

4.9579

Подробную справку по операциям с матрицами можно получить, подавая команды help elmat и help matfun.

Задание для самостоятельной работы:

1. Задать в рабочем пространстве две случайные матрицы размером 32 и 23. Из полученной матрицы выделить верхний диагональный блок размера 22. Найти определитель произведения двух матриц.

2. Задать случайный вектор-столбец a и случайную вектор-строку b. Найти два произведения ab и ba. Найти определитель первого из них.

3. Задать произвольную матрицу A размера 53 и произвольную матрицу B размера 23. Сформировать блочную матрицу . Выделить её пятый столбец.

4. Сформировать случайную матрицу размера 63. Выделить её верхний диагональный блок размера 33 и найти его определитель. Если определитель отличен от нуля, обратить найденный блок. Доказать, что обращение осуществлено правильно.

5. Сформировать случайную матрицу размера 35. Выделить её верхний диагональный блок размера 33 и найти его определитель. Изменить первую строку так, чтобы определитель заведомо обратился в нуль. Проверить величину определителя

6. Построить случайную квадратную матрицу размера 2020 и найти её собственные значения, отсортировать их и записать в вектор b.

7. Задать произвольную матрицу размером 44. Найти все её собственные значения и соответствующие им собственные векторы. Проверить все найденные пары на соответствие.

16

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]