Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]