Создание массивов со случайными элементами MatLab
р = randperm(n) — возвращает случайные перестановки целых чисел 1:n в векторе-строке. Пример:
Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1):
rand(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
rand(m.n) или rand([m п]) — возвращают матрицу размера mxn;
rand(m.n,p. ) или rand([m n р. ]) — возвращает многомерный массив;
rand(size(A)) — возвращает массив того же размера и размерности, что и А, с элементами, распределенными по равномерному закону;
rand (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет равномерный закон распределения;
rand(‘ state’) — возвращает вектор с 35 элементами, содержащий текущее состояние генератора случайных чисел с равномерным распределением. Для изменения состояния генератора можно применять следующие формы этой функции:
rand(‘state’ .s) — устанавливает состояние в s;
rand( ‘state’ ,0) — сбрасывает генератор в начальное состояние;
rand( ‘state’. j) — для целых j, устанавливает генератор в j-е состояние;
rand( ‘state’ ,sum(100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
0.9501 0.8913 0.8214
0.2311 0.7621 0.4447
0.6068 0.4565 0.6154
0.4860 0.0185 0.7919
Проверить равномерность распределения случайных чисел можно, построив большое число точек на плоскости со случайными координатами. Это делается с помощью следующих команд:
Полученный при этом график показан на рис. 10.1. Нетрудно заметить, что точки довольно равномерно распределены на плоскости, так что нет оснований не доверять заданному закону распределения координат точек.
Рис. 10.1. Случайные точки с равномерным распределением координат на плоскости
Функция randn генерирует массив со случайными элементами, распределенными по нормальному закону с нулевым математическим ожиданием и среднеквадратическим отклонением, равным 1:
randn(n) — возвращает матрицу размера nхn. Если n — не скаляр, то появится сообщение об ошибке;
randn(m.n) или randn([m n]) — возвращают матрицу размера mxn;
randn(m,n,p. ) или randn([m n р. ]) — возвращает массив с элементами, значения которых распределены по нормальному закону;
randn(size(A)) — возвращает массив того же размера, что и А, с элементами, распределенными по нормальному закону;
randn (без аргументов) — возвращает одно случайное число, которое изменяется при каждом последующем вызове и имеет нормальное распределение;
randn( ‘state’) — возвращает двухэлементный вектор, включающий текущее состояние нормального генератора. Для изменения состояния генератора можно применять следующие формы этой функции:
randn(‘state’,s) — устанавливает состояние в s;
randn(‘state’ ,0) — сбрасывает генератор в начальное состояние;
randn(‘state’, j) — для целых j устанавливает генератор в J-e состояние;
randn(‘state’, sum( 100*clock)) — каждый раз сбрасывает генератор в состояние, зависящее от времени.
-0.4326 -1.1465 0.3273
-1.6656 1.1909 0.1746
0.1253 1.1892 -0.1867
0.2877 -0.0376 0.7258
Проверить распределение случайных чисел по нормальному закону можно, построив гистограмму распределения большого количества чисел. Например, следующие команды
строят гистограмму (рис. 10.2) из 100 столбцов для 10 000 случайных чисел с нормальным распределением.
Рис. 10.2. Гистограмма для 10 000 нормально распределенных чисел в 100 интервалах
Из рисунка видно, что огибающая гистограммы действительно близка к нормальному закону распределения.
В пакете расширения Statistics Toolbox можно найти множество статистических функций, в том числе для генерации случайных чисел с различными законами распределения и определения их статистических характеристик.
Проблема с выводом двух массивов в Matlab
Функция fprintf принимает на вход элементы массива. В matlab массив может быть только однотипным типом данных. В вашем же коде массив не является однотипным, он — string и double . Но вы явно передаете элементы в один массив и matlab осуществляет каст к одному типу, преобразуя Variables к string .
Если хотите иметь массив с разными типами данных, создайте тип cell . Пример:
Cell_F = fprintf("%s %f\r\n", Cell_F)
Cell_F создает список массивов, разделенных запятыми, которые содержат данные каждой ячейки Cell_F .
Задание массива в matlab. Одномерные массивы MATLAB. Применение функций обработки данных к векторам
В этом уроке мы коснемся вопросов, связанных с более сложными типами данных, к которым относятся многомерные массивы.
Понятие о многомерных массивах
В MATLAB двумерный массив является частным случаем многомерного массива. Многомерные массивы характеризуются размерностью более двух. Таким массивам можно дать наглядную интерпретацию. Так, матрицу (двумерный массив) можно записать на одном листе бумаги в виде строк и столбцов, состоящих из элементов матрицы. Тогда блокнот с такими листками можно считать трехмерным массивом, полку в шкафу с блокнотами — четырехмерным массивом, шкаф со множеством полок — пятимерным массивом и т. д. В этой книге практически нигде, кроме этого раздела, мы не будем иметь дело с массивами, размерность которых выше двух, но знать о возможностях MATLAB в части задания и применения многомерных массивов все же полезно.
В нашей литературе понятия «размер» и «размерность» массивов являются почти синонимами. Однако они имеют явно разный смысл в данной книге, как и в документации и литературе по системе MATLAB. Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером — число строк и столбцов (mxn) в каждой размерности массива.
Применение оператора «:» в многомерных массивах
При обычном задании массивов (с помощью символа точки с запятой «;») число рядов (строк) массива получается на 1 больше, чем число символов «:», но массив остается двумерным. Оператор «:» (двоеточие) позволяет легко выполнять операции по увеличению размерности массивов. Приведем пример формирования трехмерного массива путем добавления новой страницы. Пусть у нас задан исходный двумерный массив М размером 3×3:
Для добавления новой страницы с тем же размером можно расширить М следующим образом:
Посмотрим, что теперь содержит массив М при явном его указании:
Как можно заметить, числа в выражениях М(. 1) и М(. ,2) означают номер страницы.
Доступ к отдельному элементу многомерного массива
Чтобы вызвать центральный элемент сначала первой, а затем второй страницы, надо записать следующие выражения:
Таким образом, в многомерных массивах используется то же правило индексации, что и в одномерных и двумерных. Произвольный элемент, например, трехмерного массива задается как М(1 .j.k), где 1 — номер строки, j — номер столбца и k — номер страницы. Этот элемент можно вывести, а можно присвоить ему заданное значение х: М(1 ,j,k)=x.
Удаление размерности в многомерном массиве
Мы уже отмечали возможность удаления отдельных столбцов присвоением им значений пустого вектора-столбца . Этот прием нетрудно распространить на страницы и вообще размерности многомерного массива. Например, первую страницу полученного массива М можно удалить следующим образом:
Нетрудно заметить, что в этом массиве осталась только вторая страница и что размерность массива уменьшилась на 1 — он стал двумерным.
Создание страниц, заполненных константами и случайными числами
Если после знака присваивания стоит численная константа, то соответствующая часть массива будет содержать элементы, содержащие данную константу. Например, создадим из массива М (см. пример выше) массив, у которого вторая страница содержит единицы:
А теперь заменим первую страницу массива на страницу с нулевыми элементами:
Использование функций ones, zeros, rand и randn
Функции ones (создание массивов с единичными элементами), zeros (создание массивов с нулевыми элементами) и rand или randn (создание массивов с элементами — случайными числами с соответственно равномерным и нормальным распределением) могут также использоваться для создания многомерных массивов. Примеры приводятся ниже:
Эти примеры достаточно очевидны и не требуют особых комментариев. Обратите, однако, внимание на легкость задания размеров массивов для каждой размерности. Кроме того, следует отметить, что если хотя бы одна размерность массива равна нулю, то массив будет пустым:
Empty array: 3-bу-3-bу-3-by-0
Как видно из данного примера, пустой массив возвращается с соответствующим комментарием.
Объединение массивов
Для создания многомерных массивов служит описанная ранее для матриц специальная функция конкатенации cat:
cat(DIM,A,B) — возвращает результат объединения двух массивов А и В вдоль размерности DIM;
cat(2.A.B) — возвращает массив [А.В], в котором объединены ряды (горизонтальная конкатенация);
cat(1, А.В) — возвращает массив [А:В], в котором объединены столбцы (вертикальная конкатенация);
B=cat(DIM.Al,A2. ) — объединяет множество входных массивов Al, A2. вдоль размерности DIM.
Функции cat(DIM,C) и cat(DIM.C.FIELD) обеспечивают соответственно конкатенацию (объединение) ячеек массива ячеек (см урок 15) или структур массива структур (см. урок 14), содержащих числовые матрицы, в единую матрицу. Ниже приводятся примеры применения функции cat:
Работа с размерностями
Вычисление числа размерностей массива
Функция ndims(A) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент — массив Java или массив массивов Java, то независимо от размерности массива эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims:
4
Вычисление размера размерности массива
Для вычисления размера каждой размерности массива используется функция size:
М = size(A.DIM) возвращает размер размерности, указанной скаляром DIM, в виде вектора-строки размером 2. Для двумерного или одномерного массива А size(A.l) возвращает число рядов, a size (А, 2) — число столбцов;
Для N-мерных массивов А при n>2 size(A) возвращает N-мерный вектор-строку, отражающий страничную организацию массива, последняя составляющая этого вектора равна N. В векторе отсутствуют данные о единичных размерностях (тех, где расположены вектор-строка или вектор-столбец, т. е. size(A,DIM)==l). Исключение представляют N-мерные массивы Java массивов javaarray, которые возвращают размер массива самого высокого уровня.
Вообще, когда входным аргументом size является javaarray, то возвращаемое число столбцов всегда 1, а число рядов (строк) равно размеру (длине) javarray.
Si ze(A) возвращает размер первых N размерностей массива А;
D = size (А), для mxn матрицы А возвращает двухэлементный вектор-строку, в котором первая составляющая — число строк т, а вторая составляющая — число столбцов n;
Size(A) возвращает число рядов и столбцов в разных выходных параметрах (выходных аргументах в терминологии MATLAB) тип.
Перестановки размерностей массивов
Если представить многомерный массив в виде страниц, то их перестановка является перестановкой размерностей массива. Для двумерного массива перестановка часто означает транспонирование — замену строк столбцами и наоборот. Следующие функции обобщают транспонирование матриц для случая многомерных массивов и обеспечивают перестановку размерностей многомерных массивов:
Permute (A, ORDER) — переставляет размерности массива А в порядке, определяемом вектором перестановок ORDER. Вектор ORDER — одна из возможных перестановок всех целых чисел от 1 до N, где N — размерность массива А;
ipermuteCA, ORDER) — операция, обратная permute: permute(permute(A. ORDER), ORDER)=A
Ниже приводятся примеры применения этих функций и функции size:
Сдвиг размерностей массивов
Сдвиг размерностей реализуется функцией shiftdim:
B=shiftdim(X,N) — сдвиг размерностей в массиве X на величину N. Если М>0, то сдвиг размерностей, расположенных справа, выполняется влево, а N первых слева размерностей сворачиваются в конец массива, т. е. движение размерностей идет по кругу против часовой стрелки. Если М Что нового мы узнали?
В этом уроке мы научились:
Создавать многомерные массивы.
Применять оператор «:» в многомерных массивах.
Получать доступ к отдельным элементам многомерных массивов.
Удалять размерности у многомерного массива.
Создавать массивы, заполненные константами и случайными числами.
Осуществлять объединение массивов.
Вычислять число размерностей массива и определять размер каждой размерности.
Переставлять, сдвигать и удалять единичные размерности в многомерных массивах.
Массивы являются основными объектами в системе MATLAB : в версиях 4.х допускаются только одномерные массивы — векторы — и двумерные массивы — матрицы; в версии 5.0 возможно использование многомерных массивов — тензоров. Ниже описаны функции формирования массивов и матриц, операции над матрицами, специальные матрицы в рамках системы MATLAB версий 4.х.
Формирование массивов специального вида
- ZEROS — формирование массива нулей
- ONES — формирование массива единиц
- EYE — формирование единичной матрицы
- RAND — формирование массива элементов, распределенных по равномерному закону
- RANDN — формирование массива элементов, распределенных по нормальному закону
- CROSS — векторное произведение
- KRON — формирование тензорного произведения
- LINSPACE — формирование линейного массива равноотстоящих узлов
- LOGSPACE — формирование узлов логарифмичесокй сетки
- MESHGRID — формирование узлов двумерной и трехмерной сеток
- : — формирование векторов и подматриц
Операции над матрицами
- DIAG — формирование или извлечение диагоналей матрицы
- TRIL — формирование нижнетреугольной матрицы (массива)
- TRIU — формирование верхнетреугольной матрицы (массива)
- FLIPLR — поворот матрицы относительно вертикальной оси
- FLIPUD — поворот матрицы относительно горизонтальной оси
- ROT90 — поворот матрицы на 90 градусов
- RESHAPE — преобразование размеров матрицы
Специальные матрицы
- COMPAN — сопровождающая матрица характеристического многочлена
- HADAMARD — матрица Адамара (Hadamard matrix)
- HANKEL — матрица Ганкеля (Hankel matrix)
- HILB, INVHILB — матрица Гильберта (Hilbert matrix)
- MAGIC — магический квадрат
- PASCAL — матрица Паскаля (Pascal matrix)
- ROSSER — матрица Рессера (Rosser matrix)
- TOEPLITZ — матрица Теплица (Toeplitz matrix)
- VANDER — матрица Вандермонда (Vandermonde matrix)
- WILKINSON — матрица Уилкинсона (Wilkinson matrix)
Свертка одномерных массивов
Z = conv(x, y)
= deconv(z, x)
Если заданы одномерные массивы x и y длины соответственно m = length(x) и n = length(y), то свертка z — это одномерный массив длины m + n -1, k-й элемент которого определяется по формуле
Функция z = conv(x, y) вычисляет свертку z двух одномерных массивов x и y.
Рассматривая эти массивы как выборки из двух сигналов, можно сформулировать теорему свертки в следующей форме:
Если X = fft() и Y = fft() — согласованные по размерам преобразования Фурье сигналов x и y, то справедливо соотношение conv(x, y) = ifft(X.*Y).
Иначе говоря, свертка двух сигналов эквивалентна умножению преобразований Фурье этих сигналов.
Функция = deconv(z, x) выполняет операцию, обратную операции свертки. Эта операция равносильна определению импульсной характеристики фильтра. Если справедливо соотношение z = conv(x, y), то q = y, r = 0.
Сопутствующие функции: Signal Processing Toolbox .
1. Signal Processing Toolbox Users Guide. Natick: The MathWorks, Inc., 1993.
Установка шаблона матриц и векторов (Matrix. )
Операция Matrix. (Матрицы) обеспечивает задание векторов или матриц Как известно, матрица является заданным своим именем объектом в виде массива данных MathCAD использует одномерные массивы векторы и двумерные собственно матрицы
Матрица характеризуется числом строк (Rows) и числом столбцов (Columns). Таким образом, число элементов матрицы или ее размерность равны Rows x Columns Элементами матриц могут быть числа, константы, пере менные и даже математические выражения Соответственно матрицы могут быть численными и символьными
Если использовать операцию Matrix. то в текущем окне появится не большое окошко, позволяющее задать размерность вектора или матрицы (см рис 515 справа) Для этого нужно указать число строк Rows и число сголбцов Columns Нажав клавишу Enter или указав курсором мыши на изображение клавиши Insert (Вставить) в окошке, можно вывести шаблон матрицы или вектора (вектор имеет один из параметров размерности, равный 1)
Шаблон содержит обрамляющие скобки и темные маленькие прямоугольники, обозначающие места ввода значений (числовых или символьных) для элементов вектора или матрицы. Один из прямоугольников можно сделать активным (отметив его курсором мыши). При этом он заключается в уголок. Это указывает на то, что в него будут вводиться значения соответствующего элемента. С помощью клавиш перемещения курсора можно по горизонтали пробежаться по всем прямоугольникам и ввести все элементы вектора или матрицы.
Рис. 5. 15 Вывод шаблонов вектора и матрицы и их заполнение
Пока идет ввод элементов векторов или матриц, пустые шаблоны отображаются без каких-либо комментариев. Однако, если закончить ввод до полного заполнения шаблонов, система выведет сообщение об ошибке незаполненный шаблон приобретет красный цвет. Вывод несуществующей матрицы или ошибочное указание ее индексов также отображается красным цветом.
Если использовать операцию Insert (Включение) при уже выведенном шаблоне матрицы, то матрица расширяется и ее размер увеличивается. Кнопка Delete (Стирание) позволяет убрать расширение матрицы, вычеркнув из нее строку или столбец.
Каждый элемент матрицы характеризуется индексированной переменной, и его положение в матрице обозначается двумя индексами: один указывает номер строки, другой номер столбца. Для набора индексированной переменной прежде надо ввести имя переменной, а затем перейти к набору индексов нажатием клавиши, вводящей символ]. Прежде указывается индекс строки, а затем через запятую индекс столбца. Примеры вывода индексированных переменных (элементов матрицы М) также даны на рис. 5. 14.
Вырожденная в одну строку или в один столбец матрица является вектором. Его элементы индексированные переменные с одним индексом. Нижняя граница индексов задается значением системной переменной ORIGIN. Обычно ее значение задают равным 0 или 1.
Выше были рассмотрены операции с простыми переменными. Однако с их помощью сложно описывать сложные данные, такие как случайный сигнал, поступающий на вход фильтра или хранить кадр изображения и т.п. Поэтому в языках высокого уровня предусмотрена возможность хранить значения в виде массивов. В MatLab эту роль выполняют векторы и матрицы.
Ниже показан пример задания вектора с именем a, и содержащий значения 1, 2, 3, 4:
Для доступа к тому или иному элементу вектора используется следующая конструкция языка:
disp(a(1)); % отображение значения 1-го элемента вектора
disp(a(2)); % отображение значения 2-го элемента вектора
disp(a(3)); % отображение значения 3-го элемента вектора
disp(a(4)); % отображение значения 4-го элемента вектора
т.е. нужно указать имя вектора и в круглых скобках написать номер индекса элемента, с которым предполагается работать. Например, для изменения значения 2-го элемента массива на 10 достаточно записать
a(2) = 10; % изменение значения 2-го элемента на 10
Часто возникает необходимость определения общего числа элементов в векторе, т.е. определения его размера. Это можно сделать, воспользовавшись функцией length() следующим образом:
N = length(a); % (N=4) число элементов массива а
Если требуется задать вектор-столбец, то это можно сделать так
при этом доступ к элементам векторов осуществляется также как и для векторов-строк.
Следует отметить, что векторы можно составлять не только из отдельных чисел или переменных, но и из векторов. Например, следующий фрагмент программы показывает, как можно создавать один вектор на основе другого:
a = ; % начальный вектор a =
b = ; % второй вектор b =
Здесь вектор b состоит из шести элементов и создан на основе вектора а. Используя этот прием, можно осуществлять увеличение размера векторов в процессе работы программы:
a = ; % увеличение вектора а на один элемент
Недостатком описанного способа задания (инициализации) векторов является сложность определения векторов больших размеров, состоящих, например, из 100 или 1000 элементов. Чтобы решить данную задачу, в MatLab существуют функции инициализации векторов нулями, единицами или случайными значениями:
a1 = zeros(1, 100); % вектор-строка, 100 элементов с
% нулевыми значениями
a2 = zeros(100, 1); % вектор-столбец, 100 элементов с
% нулевыми значениями
a3 = ones(1, 1000); % вектор-строка, 1000 элементов с
% единичными значениями
a4 = ones(1000, 1); % вектор-столбец, 1000 элементов с
% единичными значениями
a5 = rand(1000, 1); % вектор-столбец, 1000 элементов со
% случайными значениями
Матрицы в MatLab задаются аналогично векторам с той лишь разницей, что указываются обе размерности. Приведем пример инициализации единичной матрицы размером 3х3:
E = ; % единичная матрица 3х3
E = ; % единичная матрица 3х3
Аналогичным образом можно задавать любые другие матрицы, а также использовать приведенные выше функции zeros(), ones() и rand(), например:
A1 = zeros(10,10); % нулевая матрица 10х10 элементов
A2 = zeros(10); % нулевая матрица 10х10 элементов
A3 = ones(5); % матрица 5х5, состоящая из единиц
A4 = rand(100); % матрица 100х100, из случайных чисел
Для доступа к элементам матрицы применяется такой же синтаксис как и для векторов, но с указанием строки и столбца где находится требуемый элемент:
A = ; % матрица 3х3
disp(A(2,1)); % вывод на экран элемента, стоящего во
% второй строке первого столбца, т.е. 4
disp(A(1,2)); % вывод на экран элемента, стоящего в
% первой строке второго столбца, т.е. 2
Также возможны операции выделения указанной части матрицы, например:
B1 = A(:,1); % B1 = – выделение первого столбца
B2 = A(2,:); % B2 = – выделение первой строки
B3 = A(1:2,2:3); % B3 = – выделение первых двух
% строк и 2-го и 3-го столбцов матрицы А.
Размерность любой матрицы или вектора в MatLab можно определить с помощью функции size(), которая возвращает число строк и столбцов переменной, указанной в качестве аргумента:
a = 5; % переменная а
A = ; % вектор-строка
B = ; % матрица 2х3
size(a) % 1х1
size(A) % 1х3
size(B) % 2х3
Вычисление числа размерностей массива
Функция ndims(A) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент — массив Java или массив массивов Java, то независимо от размерности массива эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims :
Вычисление размера размерности массива
Для вычисления размера каждой размерности массива используется функция size :
- М = size(A.DIM) возвращает размер размерности, указанной скаляром DIM, в виде вектора-строки размером 2. Для двумерного или одномерного массива А size(A.l) возвращает число рядов, a size (А, 2) — число столбцов;
Для N-мерных массивов А при n>2 size(A) возвращает N-мерный вектор-строку, отражающий страничную организацию массива, последняя составляющая этого вектора равна N. В векторе отсутствуют данные о единичных размерностях (тех, где расположены вектор-строка или вектор-столбец, т. е.size(A,DIM)==l). Исключение представляют N-мерные массивы Java массивов javaarray, которые возвращают размер массива самого высокого уровня.
Вообще, когда входным аргументом size является javaarray, то возвращаемое число столбцов всегда 1, а число рядов (строк) равно размеру (длине) javarray.
- = size(A) возвращает размер первых N размерностей массива А;
- D = size (А) , для mxn матрицы А возвращает двухэлементный вектор-строку, в котором первая составляющая — число строк т, а вторая составляющая — число столбцов n;
- = size(A) возвращает число рядов и столбцов в разных выходных параметрах (выходных аргументах в терминологии MATLAB) тип.
Перестановки размерностей массивов
Если представить многомерный массив в виде страниц, то их перестановка является перестановкой размерностей массива. Для двумерного массива перестановка часто означает транспонирование — замену строк столбцами и наоборот. Следующие функции обобщают транспонирование матриц для случая многомерных массивов и обеспечивают перестановку размерностей многомерных массивов:
- permute (A, ORDER) — переставляет размерности массива А в порядке, определяемом вектором перестановок ORDER. Вектор ORDER — одна из возможных перестановок всех целых чисел от 1 до N, где N — размерность массива А;
- ipermute(A, ORDER) — операция, обратная permute: permute(permute(A. ORDER), ORDER)=A
Ниже приводятся примеры применения этих функций и функции size :
> > C = [ 9 10 ; 11 12 ];
> > size(permute(D.[ 3 2 1 ]))
> > size(ipermute(D.[ 2 1 3 ]))
Язык технических вычислений
Миллионы инженеров и ученых во всем мире используют MATLAB ® , чтобы анализировать и разработать системы и продукты, преобразовывающие наш мир. Матричный язык MATLAB является самым естественным способом в мире выразить вычислительную математику. Встроенная графика облегчает визуализацию и понимание данных. Окружение рабочего стола способствует экспериментированию, исследованиям и открытиям. Эти средства MATLAB и возможности все строго протестированы и разработаны, чтобы работать совместно.
MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.
Начало работы
Изучите основы MATLAB
Основы языка
Синтаксис, индексация и обработка массива, типы данных, операторы
Импорт и анализ данных
Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования
Математика
Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика
Графика
2D и 3D графики, изображения, анимация
Программирование
Скрипты, функции и классы
Создание приложений
Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE
Инструменты разработки программного обеспечения
Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов
MATLAB – Массивы
Все переменные всех типов данных в MATLAB являются многомерными массивами. Вектор – это одномерный массив, а матрица – это двумерный массив.
Мы уже обсуждали векторы и матрицы. В этой главе мы обсудим многомерные массивы. Однако перед этим давайте обсудим некоторые специальные типы массивов.
Специальные массивы в MATLAB
В этом разделе мы обсудим некоторые функции, которые создают специальные массивы. Для всех этих функций один аргумент создает квадратный массив, двойные аргументы создают прямоугольный массив.
Функция нулей () создает массив всех нулей –
zeros(5)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Функция ones () создает массив всех единиц –
ones(4,3)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
ans = 1 1 1 1 1 1 1 1 1 1 1 1
Функция eye () создает единичную матрицу.
eye(4)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Функция rand () создает массив равномерно распределенных случайных чисел по (0,1) –
rand(3, 5)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
ans = 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.6324 0.5469 0.1576 0.4854 0.1270 0.0975 0.9575 0.9706 0.8003
Магический Квадрат
Магический квадрат – это квадрат, который дает одинаковую сумму, когда его элементы добавляются построчно, по столбцам или по диагонали.
Функция magic () создает массив магических квадратов. Требуется исключительный аргумент, который дает размер квадрата. Аргумент должен быть скаляром, большим или равным 3.
magic(4)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
ans = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1
Многомерные массивы
В MATLAB массив, имеющий более двух измерений, называется многомерным массивом. Многомерные массивы в MATLAB являются расширением нормальной двумерной матрицы.
Обычно для создания многомерного массива мы сначала создаем двумерный массив и расширяем его.
Например, давайте создадим двумерный массив a.
a = [7 9 5; 6 1 9; 4 3 2]
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
a = 7 9 5 6 1 9 4 3 2
Массив a является массивом 3 на 3; мы можем добавить третье измерение к, предоставив такие значения, как –
a(:, :, 2)= [ 1 2 3; 4 5 6; 7 8 9]
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
a = ans(. 1) = 0 0 0 0 0 0 0 0 0 ans(. 2) = 1 2 3 4 5 6 7 8 9
Мы также можем создавать многомерные массивы, используя функции ones (), zeros () или rand ().
b = rand(4,3,2)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
b(. 1) = 0.0344 0.7952 0.6463 0.4387 0.1869 0.7094 0.3816 0.4898 0.7547 0.7655 0.4456 0.2760 b(. 2) = 0.6797 0.4984 0.2238 0.6551 0.9597 0.7513 0.1626 0.3404 0.2551 0.1190 0.5853 0.5060
Мы также можем использовать функцию cat () для построения многомерных массивов. Он объединяет список массивов по указанному измерению –
Синтаксис для функции cat () –
B = cat(dim, A1, A2. )
- B – новый созданный массив
- A1 , A2 , … массивы, которые будут объединены
- dim – это размер, по которому объединяются массивы.
B – новый созданный массив
A1 , A2 , … массивы, которые будут объединены
dim – это размер, по которому объединяются массивы.
пример
Создайте файл сценария и введите в него следующий код –
a = [9 8 7; 6 5 4; 3 2 1]; b = [1 2 3; 4 5 6; 7 8 9]; c = cat(3, a, b, [ 2 3 1; 4 7 8; 3 9 0])
Когда вы запускаете файл, он отображает –
c(. 1) = 9 8 7 6 5 4 3 2 1 c(. 2) = 1 2 3 4 5 6 7 8 9 c(. 3) = 2 3 1 4 7 8 3 9 0
Функции массива
MATLAB предоставляет следующие функции для сортировки, вращения, перестановки, изменения формы или смещения содержимого массива.
| функция | Цель |
|---|---|
| длина | Длина вектора или наибольшее измерение массива |
| ndims | Количество размеров массива |
| numel | Количество элементов массива |
| размер | Размеры массива |
| iscolumn | Определяет, является ли ввод вектором столбца |
| пустой | Определяет, является ли массив пустым |
| ismatrix | Определяет, является ли ввод матричным |
| isrow | Определяет, является ли ввод вектором строки |
| isscalar | Определяет, является ли вход скалярным |
| isvector | Определяет, является ли входной вектор |
| blkdiag | Создает блочную диагональную матрицу из входных аргументов. |
| circshift | Смещает массив по кругу |
| ctranspose | Комплексное сопряженное транспонирование |
| диаг | Диагональные матрицы и диагонали матрицы |
| flipdim | Переворачивает массив по указанному измерению |
| fliplr | Отразить матрицу слева направо |
| flipud | Переворачивает матрицу вверх-вниз |
| ipermute | Инвертирует перестановочные размеры массива ND |
| переставлять | Переставляет размеры массива ND |
| repmat | Реплики и массив плиток |
| перекроить | Перекраивает массив |
| rot90 | Поворот матрицы на 90 градусов |
| shiftdim | Смещает размеры |
| issorted | Определяет, находятся ли заданные элементы в отсортированном порядке |
| Сортировать | Сортирует элементы массива в порядке возрастания или убывания |
| sortrows | Сортирует строки в порядке возрастания |
| выжимать | Удаляет одиночные размеры |
| транспонировать | транспонировать |
| векторизовать | Векторизованное выражение |
Примеры
Следующие примеры иллюстрируют некоторые из функций, упомянутых выше.
Длина, Размер и Количество элементов –
Создайте файл сценария и введите в него следующий код –
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9]; length(x) % length of x vector y = rand(3, 4, 5, 2); ndims(y) % no of dimensions in array y s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab']; numel(s) % no of elements in s
Когда вы запускаете файл, он показывает следующий результат –
ans = 8 ans = 4 ans = 23
Круговое смещение элементов массива –
Создайте файл сценария и введите в него следующий код –
a = [1 2 3; 4 5 6; 7 8 9] % the original array a b = circshift(a,1) % circular shift first dimension values down by 1. c = circshift(a,[1 -1]) % circular shift first dimension values % down by 1 % and second dimension values to the left % by 1.
Когда вы запускаете файл, он показывает следующий результат –
a = 1 2 3 4 5 6 7 8 9 b = 7 8 9 1 2 3 4 5 6 c = 8 9 7 2 3 1 5 6 4
Сортировка массивов
Создайте файл сценария и введите в него следующий код –
v = [ 23 45 12 9 5 0 19 17] % horizontal vector sort(v) % sorting v m = [2 6 4; 5 3 9; 2 0 1] % two dimensional array sort(m, 1) % sorting m along the row sort(m, 2) % sorting m along the column
Когда вы запускаете файл, он показывает следующий результат –
v = 23 45 12 9 5 0 19 17 ans = 0 5 9 12 17 19 23 45 m = 2 6 4 5 3 9 2 0 1 ans = 2 0 1 2 3 4 5 6 9 ans = 2 4 6 3 5 9 0 1 2
Cell Array
Массивы ячеек – это массивы индексированных ячеек, где каждая ячейка может хранить массив разных измерений и типов данных.
Функция cell используется для создания массива cell. Синтаксис для функции ячейки –
C = cell(dim) C = cell(dim1. dimN) D = cell(obj)
Куда,
- С – массив ячеек;
- dim – скалярное целое число или вектор целых чисел, который определяет размеры массива ячеек C;
- dim1, …, dimN – скалярные целые числа, которые определяют размеры C;
- obj является одним из следующих –
- Массив или объект Java
- .NET массив типа System.String или System.Object
С – массив ячеек;
dim – скалярное целое число или вектор целых чисел, который определяет размеры массива ячеек C;
dim1, …, dimN – скалярные целые числа, которые определяют размеры C;
obj является одним из следующих –
пример
Создайте файл сценария и введите в него следующий код –
c = cell(2, 5); c = 'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5>
Когда вы запускаете файл, он показывает следующий результат –
Доступ к данным в массивах ячеек
Существует два способа обращения к элементам массива ячеек:
- Заключение индексов в первую скобку () для ссылки на наборы ячеек
- Заключение индексов в фигурные скобки <> для ссылки на данные в отдельных ячейках
Когда вы заключаете индексы в первую скобку, это относится к набору ячеек.
Индексы массива ячеек в гладких скобках относятся к наборам ячеек.
c = 'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5>; c(1:2,1:2)
MATLAB выполнит приведенный выше оператор и вернет следующий результат –
Вы также можете получить доступ к содержимому ячеек путем индексации с помощью фигурных скобок.
c = 'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5>; c1, 2:4>
MATLAB выполнит приведенный выше оператор и вернет следующий результат –