Лабораторные 2023г / лаба 3
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Санкт-Петербургский государственный университет телекоммуникаций
им. проф. М. А. Бонч-Бруевича»
_____________________________________________________________________________
Кафедра радиосистем и обработки сигналов
Дисциплина «Прикладные пакеты моделирования»
Лабораторная работа № 3
Операции с матрицами
Выполнили: ст. гр. РТ-22
Проверил: к.т.н. доцент Леонюк А.С.
_____________________
Санкт-Петербург
2023
ВЫПОЛНЕНИЕ РАБОТЫ
Знакомство с матрицами числового и логического типов.
>> A=[127.1 -127.1 127.1;-127.1 0 128.4;-128.4 255.7 255.1]
A =
127.1000 -127.1000 127.1000
-127.1000 0 128.4000
-128.4000 255.7000 255.1000
>> B= int8(A)
B =
3×3 int8 matrix
127 -127 127
-127 0 127
-128 127 127
>> C=uint8(A)
C =
3×3 uint8 matrix
127 0 127
0 0 128
0 255 255
>> D=logical(A)
D =
3×3 logical array
1 1 1
1 0 1
1 1 1
>> class(A)
ans =
'double'
>> class(B)
ans =
'int8'
>> class(C)
ans =
'uint8'
>> class(D)
ans =
'logical'
Матрицу А в матрицы В и С можно преобразовать командами:
Int8 - целый 8-битовый со знаком
uint8 - целый 8-битовый без знака
logical – Логический
Тип матрицы можно определить с помощью команды class() или по сообщению MATLABa если не поставить точку с запятой.
Операции с матрицами числового типа.
>> S=sin(A)
S =
0.9910 -0.9910 0.9910
-0.9910 0 0.3943
-0.3943 -0.9428 -0.5899
>> S2=sin(B)
Check for incorrect argument data type or missing argument in call to function 'sin'.
>> S3=sin(C)
Check for incorrect argument data type or missing argument in call to function 'sin'.
>> sum=A+B
Error using +
Integers can only be combined with integers of the same class, or scalar doubles.
>> sum=B+C
Error using +
Integers can only be combined with integers of the same class, or scalar doubles.
>> and=B&C
and =
3×3 logical array
1 0 1
0 0 1
0 1 1
>> class(and)
ans =
'logical'
Сообщение об ошибке выводится из-за того что тип данных в матрице int8 и uint8, поэтому невозможно произвести операцию и о с ними запрещено выполнение арифметических операций
Знакомство с матрицами символьного типа
>> X= ['Xxxxxx ' 'Xxxxx ' 'Xxxxxxxx']
X =
'Xxxxxx Xxxxx Xxxxxxxx'
>> Y= ['Xxxxxx ';'Xxxxx ';'Xxxxxxxx']
Y =
3×8 char array
'Xxxxxx '
'Xxxxx '
'Xxxxxxxx'
>> F=[char('КИХ','FIR') char(' R=15',' Order=15')]
F =
2×12 char array
'КИХ R=15 '
'FIR Order=15'
>> G=num2str(A)
G =
3×34 char array
' 127.1 -127.1 127.1'
'-127.1 0 128.4'
'-128.4 255.7 255.1'
>> class(A)
ans =
'double'
>> class(G)
ans =
'char'
Вывод не слитого столбца можно обеспечить путем дополнительного пробела после или перед началом символа
Автоматическое добавление пробелов при выводе элементов столбца можно обеспечить конструкцией [char(_)]
Преобразовать матрицу числового типа в матрицу символьного типа можно с помощью команды num2str.
Знакомство с массивами записей (структурами).
>> filter(1).type='lowpass';
>> filter(2).type='hightpass';
>> filter(3).type='bandpass';
>> filter(4).type='stoppass';
>> filter(1).order=10;
>> filter(2).order=20;
>> filter(3).order=30;
>> filter(4).order=40;
>> filter(1).poles=true
>> filter(2).poles=false;
>> filter(3).poles=false;
>> filter(4).poles=true;
>> filter
filter =
1×4 struct array with fields:
type
order
poles
>> filter(1)
ans =
struct with fields:
type: 'lowpass'
order: 10
poles: 1
>> filter.type
ans =
'lowpass'
ans =
'hightpass'
ans =
'bandpass'
ans =
'stoppass'
>> filter(3).type
ans =
'bandpass'
>> filter1=rmfield(filter,'poles')
filter1 =
1×4 struct array with fields:
type
order
Массив записей — это разновидность нечислового массива, предназначенного для описания M объектов N параметрами.
Запись — список полей, одинаковый для всех M объектов; Число записей равно количеству объектов M.
Значение записи — список полей с их значениями для одного объекта
Знакомство с матрицами ячеек
>> S{1,1}= A;
>> S{1,2}= B;
>> S{1,3}= C;
>> S{2,1}= D;
>> S{2,2}= F;
>> S{2,3}= G;
>> S{3,1}= X;
>> S{3,2}= Y;
>> S{3,3}= char('filter');
>> S{1,1}
ans =
127.1000 -127.1000 127.1000
-127.1000 0 128.4000
-128.4000 255.7000 255.1000
>> S{1,2}
ans =
3×3 int8 matrix
127 -127 127
-127 0 127
-128 127 127
>> S{1,3}
ans =
3×3 uint8 matrix
127 0 127
0 0 128
0 255 255
>> S{2,1}
ans =
3×3 logical array
1 1 1
1 0 1
1 1 1
>> S{2,2}
ans =
2×12 char array
'КИХ R=15 '
'FIR Order=15'
>> S{2,3}
ans =
3×34 char array
' 127.1 -127.1 127.1'
'-127.1 0 128.4'
'-128.4 255.7 255.1'
>> S{3,1}
ans =
‘xxxxxx xxxxx xxxxxxxx'
>> S{3,2}
ans =
3×8 char array
'Xxxxxx '
'Xxxxx '
'Xxxxxxxx'
>> S{3,3}
ans =
'filter'
>> class(S)
ans =
'cell'
>> cellplot(S,'legend')
Матрица ячеек состоит из массивов любой размерности и типа.
Каждый элемент вводится с помощью фигурных скобок
Графическое представление выводится с помощью команды cellplot(_,’legend’).
Оно показывает каждый элемент, указывает его тип данных.
Задания на самостоятельную работу
Операции с элементами массива ячеек.
>> A{1,1} = pi;
A{1,2} = [1 2 3;4 5 6];
A{1,3} = char('abs','angle');
A{2,1} = [ones(5,1)]';
A{2,2} = zeros(3,1);
A{2,3} = 'Alla';
A{3,1} = 7 ;
A{3,2} = rand(5,1);
A{3,3} = personal;
>> A{1,1}+A{3,1}
ans =
10.1416
Операции с матрицами целого типа.
>> A = [int8(1543) int8(1237) int8(-1342)];
>> B = [uint8(1321) uint8(9999) uint8(-1000)];
>> C=[A==B; A<B; B<A]
C =
3×3 logical array
0 0 0
1 1 1
0 0 0
Операции с матрицами логического типа.
A =
2×3 int8 matrix
127 127 -128
127 127 -128
>> B = [uint8(1321) uint8(9999) uint8(-1000);uint8(1321) uint8(9999) uint8(-1000)];
>> B = [uint8(1321) uint8(9999) uint8(-1000);uint8(1321) uint8(9999) uint8(-1000)]
B =
2×3 uint8 matrix
255 255 0
255 255 0
>> C=[A==B; A<B; B<A]
C =
6×3 logical array
0 0 0
0 0 0
1 1 1
1 1 1
0 0 0
0 0 0
Операции с матрицами символьного типа
>> A=randn(3)
A =
-0.2050 1.4090 -1.2075
-0.1241 1.4172 0.7172
1.4897 0.6715 1.6302
>> V=num2str(A)
V =
3×32 char array
'-0.20497 1.409 -1.2075'
'-0.12414 1.4172 0.71724'
' 1.4897 0.6715 1.6302'
Операции с массивом записей
>> MAMA(1).vector= [1:4];
>> MAMA(2).vector= [1:5];
>> MAMA(3).vector= [1:6];
>> MAMA(1).mtrix= ones(2);
>> MAMA(2).mtrix= ones(3);
>> MAMA(3).mtrix= ones(5);
>> MAMA
MAMA =
1×3 struct array with fields:
vector
mtrix
>> MAMA(1)
ans =
struct with fields:
vector: [1 2 3 4]
mtrix: [2×2 double]
>> MAMA.vector
ans =
1 2 3 4
ans =
1 2 3 4 5
ans =
1 2 3 4 5 6
>> MAMA.mtrix
ans =
1 1
1 1
ans =
1 1 1
1 1 1
1 1 1
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Вывод: Были изучены основные типы массивов, используемых в Matlab, а так же овладены навыками их формирования