ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Санкт-Петербургский государственный университет телекоммуникаций
им. проф. М. А. Бонч-Бруевича»
_____________________________________________________________________________
Кафедра радиосистем и обработки сигналов
Дисциплина «Прикладные пакеты моделирования»
Лабораторная работа №3
Типы массивов
Выполнили: ст. гр.
Проверил: А.С. Леонюк
Санкт-Петербург
1. Знакомство с матрицами числового и логического типов.
>> A = [127.1 -127.1 127.7; -127.7 0 128.4; -128.4 255.7 255.1]
A =
127.1000 -127.1000 127.7000
-127.7000 0 128.4000
-128.4000 255.7000 255.1000
>> B = int8(A)
B =
3×3 int8 matrix
127 -127 127
-128 0 127
-128 127 127
>> C = uint8(A)
C =
3×3 uint8 matrix
127 0 128
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'
Пояснение:
Как преобразовать матрицу A в матрицы B, C и D
С помощью функций преобразований типа: double (X); int8(X); uint8(X).
По какому правилу формируются элементы матрицы B
Числа преобразуются в константы, лежащие в интервале -128;127
Тип вещественный двойной точности
По какому правилу формируются элементы матрицы C
Числа преобразуются в константы, лежащие в интервале положительных чисел от 0 до 255
Тип целый 8-битовый со знаком
По какому правилу формируются элементы матрицы D
Любой элемент, отличающийся от 0 преобразуется в логическую 1, а нули, соответственно, в логический 0
Тип целый 8-битовый без знака
Как определяется тип матрицы
class(X)
2. Операции с матрицами числового типа.
>> sin(A)
ans =
0.9910 -0.9910 0.8936
-0.8936 0 0.3943
-0.3943 -0.9428 -0.5899
>> sin(B)
Check for missing argument or incorrect argument data type in call to function 'sin'.
>> sin(C)
Check for missing argument or incorrect argument data type in call to function 'sin'.
>> A+B
Error using +
Integers can only be combined with integers of the same class, or scalar doubles.
>> B+C
Error using +
Integers can only be combined with integers of the same class, or scalar doubles.
>> x=[A>1]
x =
3×3 Logical array
1 0 1
0 0 1
0 1 1
>> A
A =
127.1000 -127.1000 127.7000
-127.7000 0 128.4000
-128.4000 255.7000 255.1000
>> class(x)
ans =
'logical'
>> size(x)
ans =
3 3
>> v = B&C
v =
3×3 Logical array
1 0 1
0 0 1
0 1 1
>> class(v)
ans =
'logical'
>> size(v)
ans =
3 3
Пояснение:
При обработке матриц числового целого типа необходимо иметь в виду, что с ними запрещено выполнение арифметических операций, в том числе большинства встроенных функций, но разрешено выполнение операций отношения и логических операций
3. Знакомство с матрицами символьного типа.
>> X = ['Фомин ' 'Павел ' 'Викторович']
X =
'Фомин Павел Викторович'
>> Y = char('Меланков ', 'Александр ', 'Игоревич')
Y =
3×10 char array
'Меланков '
'Александр '
'Игоревич '
>> 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.7'
'-127.7 0 128.4'
'-128.4 255.7 255.1'
>> class(A)
ans =
'double'
>> class(G)
ans =
'char'
Пояснение:
Как обеспечить не слитный вывод элементов вектора-строки?
С помощью пробелов, которые должен выставить пользователь
как обеспечить автоматическое добавление пробелов при выводе элементов столбца?
char('<char1>','<char2>'...) где <char1>,<char2>... — элементы столбца с произвольным количеством символов.
как преобразовать матрицу числового типа в матрицу символьного типа?
Преобразование матрицы численного или логического типа в матрицу символьного типа выполняется с помощью функции num2str(x)
4. Знакомство с массивами записей (структурами).
>> filter(1).Type='lowpass';
filter(2).Type='highpass';
filter(3).Type='bandpass';
filter(4).Type='stopband';
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 =
'highpass'
ans =
'bandpass'
ans =
'stopband'
>> filter(3).Type
ans =
'bandpass'
>> rmfield(filter,'Poles')
ans =
1×4 struct array with fields:
Type
Order
Пояснение:
с какой целью создается массив записей?
Структура (массив записей — struct array) — это разновидность нечислового массива, предназначенного для описания M объектов N параметрами.
что собой представляет запись и значение записи?
Type (тип избирательности) — lowpass, highpass, bandpass, stopband;
Order (порядок фильтра) — 10, 20, 30, 40;
Poles – true, false, false, true.
5. Знакомство с матрицами ячеек.
>> 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}=filter;
>> S{1,1}
ans =
127.1000 -127.1000 127.7000
-127.7000 0 128.4000
-128.4000 255.7000 255.1000
>> S{3,3}
ans =
1×4 struct array with fields:
Type
Order
Poles
>> class(S{1,1})
ans =
'double'
>> class(S{1,2})
ans =
'int8'
>> class(S{1,3})
ans =
'uint8'
>> class(S{2,1})
ans =
'logical'
>> class(S{2,2})
ans =
'char'
>> class(S{2,3})
ans =
'char'
>> class(S{3,1})
ans =
'char'
>> class(S{3,2})
ans =
'char'
>> class(S{3,3})
ans =
'struct'
cellplot(S,'legend')
Самостоятельная работа:
1. Операции с элементами массива ячеек.
Сформировать массив ячеек A, рассмотренный в разд. 3.2.4, и привести пример арифметического выражения с элементами данного массива типа double.
>>personal(1).data = [1 2 1949];
>>personal(2).data = [5 7 1975];
>>personal(3).data = [5 8 1956];
>>personal(1).position = 'профессор';
>>personal(2).position = 'доцент';
>>personal(3).position = 'зав.лаб.';
>>personal(1).phd = true;
>>personal(2).phd = true;
>>personal(3).phd = false;
>> 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;
>> B = sum(A{1,2})+A{1,1}
=
8.1416 10.1416 12.1416
>>class(B) ans =
‘double’
>> C = A{1,2}*A{1,1}
=
3.1416 6.2832 9.4248
12.5664 15.7080 18.8496
>>class(C) ans =
‘double’
2.Операции с матрицами целого типа.
Привести пример выражения с матрицами целого типа.
>> A = [int8(19.7) int8(15.5) int8(-15.7); int8(13.1) int8(50.9) int8(-59.3)] A =