
1 лабораторная МОТС
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра АПУ
ОТЧЕТ по лабораторной работе №1
по дисциплине «Математические основы теории систем»
ТЕМА: Матричные преобразования и трехмерная графика
|
|
|
Поникаровский А. В. |
Студенты гр. 1391 |
|
Тирик Б. Д. |
|
Преподаватель |
|
|
Гульванский В. В. |
Санкт-Петербург
2023

Цель работы: освоение специфики матричных преобразований MATLAB и сравнительный анализ различных форм графического отображения результатов.
Теоретические положения.
Пусть дана функция двух аргументов z f (x, y) . В области определения x [xmin , xmax ] , y [ ymin , ymax ] командой [X,Y] = meshgrid(xgv,ygv) создайте координатную сетку с заданным шагом. Теперь можно создавать саму функцию, например:
>>[x,y]=meshgrid(-10:0.3:10,-10:0.3:10);
>>z=(sin(x)./x).*(sin(y)./y);
>>surf(x,y,z)
Полученная поверхность приведена на рисунке 3.1. Можно произвольно выбрать шкалу цветовых оттенков (см. help colormap).
Рис. 1. Трехмерная поверхность
Второй способ состоит в формировании двух взаимно перпендикулярных плоскостей X и Y – аналогов двумерных осей ординат.
>>x=-10:10;
>>y=ones(1,21);
>>X=x'*y;
>>Y=y'*x;

Теперь используем координатные плоскости для построения конуса:
>>R1=sqrt(X.^2+Y.^2);
>>surf(X,Y,-R1);
или пирамиды (рис. 3.2):
>>R2=max(abs(X),abs(Y))
>>surf(X,Y,-R2);
Матричные операции, вычисление функций от матриц. Кратко напомним основные матричные операции.
Определитель .
aij Aij i 1n
j 1
n
,
Aij
– алгебраическое дополнение;
Обратная матрица
A 1
.
|
|
|
|
A |
1 |
|
A |
|
|||
|
A |
||
|
|
|
A*
– союзная матрица;
Умножение матриц
w
. Элемент результирующей матрицы
w |
jk |
|
на
пересечении
строки
j
и столбца
k
равен сумме попарных произведений
элементов строки j |
матрицы |
Возведение в степень
и столбца k
vwp w w...
матрицы : wjk |
jl lk |
||
|
|
l |
|
w |
осуществляется |
p -кратным |
умножением матрицы на себя.
Рис. 2. Трехмерные фигуры

Обработка результатов
1. В качестве исходной фигуры, на которой будем изучать матричные преобразования, выберем пирамиду (рис. 3). Присвоим ей имя R.
x=-10:10; y=ones(1,21); X=x'*y; Y=y'*x;
R=max(abs(X),abs(Y)); surf(X, Y, -R); title('Исходная пирамида');
Рис. 3. Исходная пирамида
Симметрия матрицы R относительно главной диагонали и антидиагонали делает такую матрицу вырожденной – её определитель равен нулю (проверьте).
det(R);
Результат проверки: ans = 0
Соответственно, большинство матричных операций для неё невыполнимо. Поэтому добавим к элементам на главной диагонали по единице, сложив её с единичной матрицей (eye) того же размера (рис. 4).
R = R + eye(21); surf(X, Y, -R);
title('Прибавление к исходной матрице единичной');

Рис. 4. Прибавление к исходной матрице единичной
Теперь над матрицей можно производить как поэлементные, так и матричные операции.
Проверям, что после преобразования определитель нашей матрицы не равен 0:
det(R);
Результат проверки: ans = -11.0000
2. Сравните (по графикам) результаты двух операций – обращения матрицы командой inv (рис. 5) и поэлементного деления матрицы ones(n,n) на
R (рис. 6).
surf(X, Y, inv(R));
title('Обращённая командой inv матрица');

Рис. 5. Обращённая командой inv матрица
surf(X, Y, ones(21)./R)
title('Матрица поэлементного деления матрицы ones(n,n) на R');
Рис. 6. Матрица поэлементного деления матрицы ones(n,n) на R
3. Сравните матричные операции sqrtm(A), logm(A), expm(A) с
аналогичными операциями, выполняемыми поэлементно.
Создадим новую матрицу размерностью 3*3 для сравнения матричных операций.
A = [1 2 3; 4 5 6; 7 8 9];
Сравнение матричной операции sqrtm(A) с sqrt(A)
disp(sqrt(A)); |
|
|
|
|
|
1.0000 |
1.4142 |
1.7321 |
|
|
|
2.0000 |
2.2361 |
2.4495 |
|
|
|
2.6458 |
2.8284 |
3.0000 |
|
|
|
disp(sqrtm(A)); |
|
|
|
|
|
0.4498 |
+ 0.7623i |
0.5526 |
+ 0.2068i |
0.6555 |
- 0.3487i |
1.0185 |
+ 0.0842i |
1.2515 |
+ 0.0228i |
1.4844 |
- 0.0385i |
1.5873 |
- 0.5940i |
1.9503 |
- 0.1611i |
2.3134 |
+ 0.2717i |
Сравнение матричной операции logm(A) с log(A)
disp(log(A)); |
|
|
0 |
0.6931 |
1.0986 |
1.3863 |
1.6094 |
1.7918 |
1.9459 |
2.0794 |
2.1972 |
disp(logm(A));
-5.3211 + 2.7896i 11.8288 - 0.4325i -5.2948 - 0.5129i 12.1386 - 0.7970i -21.9801 + 2.1623i 12.4484 - 1.1616i -4.6753 - 1.2421i 12.7582 - 1.5262i -4.0820 + 1.3313i
Сравнение матричной операции expm(A) с exp(A)
disp(exp(A)); |
|
|
0.0027 |
0.0074 |
0.0201 |
0.0546 |
0.1484 |
0.4034 |
1.0966 |
2.9810 |
8.1031 |
disp(expm(A)); |
|
|
1.1189 |
1.3748 |
1.6307 |
2.5339 |
3.1134 |
3.6929 |
3.9489 |
4.8520 |
5.7552 |
4. Преобразуйте пирамиду R операциями врезки. «Отрежьте» какойнибудь из углов, приравняв нулю выбранные элементы (рис. 7).
R(11:21,1:11)=10; surf(X, Y, -R);
title('"Отрежем" угол у пирамиды');

Рис. 7. Пирамида с «отрезанным» углом
5. Очень полезной операцией размножения массивов (мультиплицирования) является операция кронекеровского умножения матриц, в которой вся правая матрица умножается на каждый элемент левой.
Создадим конус (рис. 8)
R1 = sqrt(X.^2 + Y.^2); surf(X, Y, -R1); title('Конус');
Рис. 8. Конус
Создадим 9 конусов c помощью матрицы 3*3 (рис. 9).
A = [1, 1, 1; 1, 1, 1; 1, 1, 1]; surf(-kron(A, R1)); title('Размноженный конус');

Рис. 9. Размноженный конус
Поменяем порядок матриц в последней операции (рис.10).
surf(-kron(R1, A));
title('Изменённый порядок умножения');
Рис. 10. Изменённый порядок умножения
Сделаем центральный конус в два раза выше соседей (рис. 11).
A = [1, 1, 1; 1, 2, 1; 1, 1, 1]; A = kron(A, R1);
A(22:42, 22:42) = A(22:42, 22:42) -15; surf(-A);
title('Увеличенный в 2 раза центральный конус');

Рис. 11. Увеличенный в 2 раза центральный конус
6. На основе данных из пункта 5 создадим две картинки с помощью функций heatmap и imagesc, установим границы сегментации данных. Сравним полученные результаты (рис. 12, рис. 13).
heatmap(A(22:42, 22:42));
Рис. 12. Использование функции heatmap