Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие
.pdf
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
Можно сразу определить вектор заданной длины с нулевыми
элементами:
>> a(5)=0
a = 0 0 0 0 0
Таким образом, работа с массивами переменной длины в
MATLAB упрощена по сравнению с другими языками высокого
уровня.
Аналогичные принципы используются при формировании
двумерных массивов – матриц. В квадратных скобках перечис
ляются векторы – строки матрицы, разделенные точкой с запятой или нажатием на клавишу <Enter>. В последнем случае
для окончания ввода система ожидает ввода закрывающей ква
дратной скобки.
>> m=[1 2 3; 4 5 6]
m=
1 2 3
4 5 6
Еще примеры:
>> m=[v;v+3;v+6]
m=
1 2 3
4 5 6
7 8 9
>> m1=[m;v+9]
m1=
1 2 3
4 5 6
7 8 9
10 11 12
>> m2=[m,m]
m2=
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9
>> m3=[m;m]
m3=
-
-
11

МОДУЛЬ 1
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
Таким образом, для формирования матриц можно также ис
пользовать объекты, уже существующие в рабочем пространстве.
Доступ к элементам матрицы осуществляется с помощью
двух индексов – номера строки и номера столбца, на пересече
нии которых находится нужный элемент:
>> m(3,1)
ans=7
Другой способ формирования векторных и матричных мас
сивов состоит в создании пустого массива, имеющего размер
0 × 0:
>>n=[].
n=[]
Присваивание значений элементам массива может быть вы
полнено или в командной строке, или с использованием редактора массивов Array Editor.
Вызов редактора осуществляется двойным щелчком по стро
ке с именем переменной в окне Workspace. В окне редактора
выводится число строк и число столбцов массива, а в соответ
ствующих клетках – значения элементов массива. В редакторе
можно редактировать уже имеющиеся элементы массива, изме
нять число строк и число столбцов массива и заполнять новые
клетки числами.
Рассмотрим пример работы с редактором массивов.
Определим скалярную величину
>> U=5
U=5
В окне рабочего пространства мы видим, что скалярная вели
чина является массивом с одной строкой и одним столбцом. Вызовем величину U на редактирование. Изменим число столбцов
12

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
до 3. Получим вектор – строку. Заполним нулевые элементы
значениями 4, 3:
>>U
U=5 4 3
Определим новые величины: a = 10, b = 20. В редакторе на
место первого элемента подставим выражение a + b. Получим:
>>U
U=30 4 3
На место третьего элемента подставим выражение U(1) +U(2).
Получим вектор:
>>U
U=30 4 34
Изменим число строк до 2 и заполним вторую строку значе
-
ниями 1 2 3. Получим матрицу:
U
U=
30 4 34
1 2 3
Формирование массивов размерности большей двух выпол
няется из командной строки. Для работы с многомерными массивами полезна наглядная интерпретация массивов:
– вектор – это строка книги;
– матрица – страница книги;
– трехмерный массив – множество пронумерованных стра
ниц (книга);
– четырехмерный массив – множество пронумерованных
книг (полка);
– пятимерный массив – множество пронумерованных полок
(стеллаж) и т. д.
Для обозначения элементов трехмерного массива требуется
три индекса: первый – для обозначения строк страницы, второй –
для обозначения столбцов страницы, третий – для обозначения
страниц.
Используем введенную ранее матрицу m. Простейший спо
-
соб создания из m трехмерного массива – это добавление второй страницы путем добавления третьего индекса и задания
13

МОДУЛЬ 1
значения какому-нибудь элементу второй страницы, напри-
мер:
>>m(1,1,2)=10
m(:,:,1)=
1 2 3
4 5 6
7 8 9
m(:,:,2)=
10 0 0
0 0 0
0 0 0
Мы видим на экране отображение двух страниц. Третий
индекс нумерует страницы, а на месте первого и второго индекса стоит оператор «:» – оператор двоеточие. В данном случае это
означает, что первый и второй индексы пробегают все допусти
мые значения, заданные ранее при формировании матрицы m.
Оператор двоеточие применяется для формирования одно
мерных регулярных последовательностей.
Например, v=[1:3] генерирует вектор, элементами которого
являются числа 1, 2, 3. Если нужно, чтобы шаг последователь
ности не равнялся 1, то его нужно явно указать, например:
>>u=[1:0.2:2]
u=1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
Если мы хотим получить убывающую последовательность,
то нужно использовать отрицательный шаг. Оператор двоето
чие можно использовать для доступа к элементам массива, например:
>>u(2:3)
ans=1.2000 1.4000
Для удаления элементов массива или их совокупности их
надо приравнять пустому массиву []. Например:
w = [v,v]
w=1 2 3 1 2 3
w(3:5)=[]
w=1 2 3
>> m(:,:,2)=[]
-
-
-
-
14

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
m=
1 2 3
4 5 6
7 8 9
Оператор двоеточие можно использовать и для формирова
ния массивов, например:
>> mm=m
mm=
1 2 3
4 5 6
7 8 9
>> m(:,:,2)=mm+10; m(:,:,3)=mm+20
m(:,:,1)=
1 2 3
4 5 6
7 8 9
m(:,:,2)=
11 12 13
14 15 16
17 18 19
m(:,:,3)=
21 22 23
24 25 26
27 28 29
Отметим, что массивы размерности большей двух не редак
тируются редактором массивов.
-
-
Операции над массивами
Рассмотрим некоторые операции, применяемые к массиву в
целом:
• length(M) – дает наибольший размер массива, например:
>> v=[1:8]
>> v=1 2 3 4 5 6 7 8
>>length(v)
ans=8
15

МОДУЛЬ 1
>>m=[v;v+5]
m=
1 2 3 4 5 6 7 8
6 7 8 9 10 11 12 13
>>length(m)
ans=8
• size(M) – создает вектор-строку из числа элементов, рав
-
ного размерности массива: число строк, число столбцов и т. д.:
>>size(v)
ans=1 8
>>size(m)
ans=2 8
>>m(:,:,2)=[5:12;13:20]
m(:,:,1) =
1 2 3 4 5 6 7 8
6 7 8 9 10 11 12 13
m(:,:,2) =
5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20
>>size(m)
ans=2 8 2
Та же функция с несколькими выходными аргументами
[m,n,,,]=size(M) позволяет запомнить информацию о размерах
массива в отдельных переменных, например:
>> [k,l,n]=size(m)
k=2
l=8
n=2
Функция со вторым входным параметром вычисляет:
– только число строк:
size(m,1)
ans=2
– только число столбцов:
size(m,2)
ans=8
и т.д.
16

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
size(m,3)
ans=2
Здесь мы видим еще одну роль квадратных скобок в MATLAB:
в них через запятую или пробел заключаются имена перемен
ных, получаемых при выполнении операций, дающих разные
результаты.
Данные о переменных указываются в окне рабочего про
странства. Вывод их в командное окно осуществляется функциями whos (вывод данных обо всех переменных) и whos a b c …
(вывод данных о конкретных переменных):
>> whos m
Name Size Bytes Class
m 2x8x2 256 double array
Grand total is 32 elements using 256 bytes
• fliplr(M) – зеркальное отражение матрицы слева направо –
изменение последовательности столбцов на противоположную.
• flipud(M) – аналогичная операция относительно последова
тельности строк.
• rot90(M) – поворачивает матрицу на 90 градусов против
часовой стрелки:
>> m
m =
1 3 5 7 5 7 9 11
6 8 10 12 13 15 17 19
>> rot90(m)
ans=
11 19
9 17
7 15
5 13
7 12
5 10
3 8
1 6
• repmat(M,k,l) – создает матрицу, состоящую из k ко
пий матрицы M, повторяющихся по вертикали, и l копий по
17

МОДУЛЬ 1
горизонтали:
>> a=[1 2;3 4]
a =
1 2
3 4
>> repmat(a,2,3)
ans=
1 2 1 2 1 2
3 4 3 4 3 4
1 2 1 2 1 2
3 4 3 4 3 4
• rand(K,N) – формирует прямоугольную матрицу размера
K × N, элементы которой являются случайными числами, равномерно распределенными в интервале от 0 до 1.
• rand без аргументов генерирует одно случайное число из
того же интервала.
• randint(N) и т. д. формируют случайные числа или элемен
ты матриц, которые с вероятностью 0,5 принимают значения
0 и 1.
• randn(N) – генерирует элементы, распределенные по нор
мальному закону.
• eye(N) – генерирует единичную матрицу.
• zeros(k,l) и ones(k,l) – генерируют прямоугольные матри
цы, состоящие из нулей и единиц.
• diag(v) – создает диагональную матрицу с элементами на
диагонали, равными элементам вектора v.
• diag(m) – создает v вектор с элементами, равными диаго
нальным элементам матрицы m.
Приведенный список является далеко не исчерпывающим.
Полное описание матриц специального вида можно узнать из
справочной системы MATLAB.
Для обозначения регулярного множества используется опе
-
ратор двоеточие. Например, m(:,2:2:end) обозначает все четные
столбцы матрицы m. Соответственно, m(:,2:2:end)=[] удалит
четные столбцы матрицы, понижая ее размер:
>> m(2:2:end,:)=[]
18

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
m =
1 3 5 7 5 7 9 11
6 8 10 12 13 15 17 19
Отметим, что аргумент end означает «до конца» (в данном
случае столбцов).
Как матрицы, так и многомерные массивы могут рассматри
ваться как векторы, если к ним обращаться по одному индексу.
В этом случае нумерация элементов происходит сверху вниз по
столбцам и слева направо, например:
>>m(2)
ans=6
В частности, операция m(:) превращает матрицу размера
3 × 3 в столбец из 9 элементов. Одномерный принцип нумерации удобен в некоторых операциях и функциях.
Арифметические операции
Арифметические операции применяются как для отдельных
элементов матриц, так и для матриц в целом.
• Матричное сложение «+». Оба аргумента должны быть
массивами с одинаковыми размерами либо один из аргументов –
скаляр, например:
>>v+3
ans=4 5 6
>> v+ans
ans=5 7 9
• Матричное вычитание «-». Правила для аргументов те же:
>>10-ans
ans=5 3 1
• Матричное умножение «*». Операция перемножения ма
триц по правилам матричного перемножения, т. е. строка на
столбец. Число столбцов первого сомножителя должно быть
равно числу строк второго сомножителя. Если один из сомно
жителей скаляр, то на него умножается каждый элемент матрицы:
>>u=[v(1);v(2);v(3)]
19

МОДУЛЬ 1
u=
1
2
3
>>v*u
ans=14
>>u*v
ans=
1 2 3
2 4 6
3 6 9
Размерность перемножаемых массивов не превышает двух.
В общем случае произведение матриц не коммутативно. Это
видно из двух примеров произведения векторов. Еще пример:
>> m=[1:3;4:6]
m=
1 2 3
4 5 6
>> n=[m;v+6]
n=
1 2 3
4 5 6
7 8 9
>>m*n
ans=
30 36 42
66 81 96
>>n*m
Система выдает сообщение об ошибке применения операции
умножения.
• Левое деление матриц «\». Чаще всего эта операция при
меняется при решении системы линейных алгебраических уравнений вида A × X = B. Левое деление означает приблизительно
то же самое, что умножение матрицы B слева на обратную ма
трицу A: A–1 × B, но вычисленное другим способом. Например,
система линейных уравнений решается методом Гаусса. Матри
-
-
-
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
