Урок 5 — Работа с массивами в Матлаб(Matlab)
Все данные MatLab представляет в виде массивов. Очень важно правильно понять, как использовать массивы. Без этого невозможна эффективная работа в MatLab, в частности построение графиков, решение задач линейной алгебры, обработки данных, статистики и многих других. В данном подразделе описаны вычисления с векторами. Массив - упорядоченная, пронумерованная совокупность однородных данных. У массива должно быть имя. Массивы различаются по числу размерностей или измерений: одномерные, двумерные, многомерные. Доступ к элементам осуществляется при помощи индекса. В MatLab нумерация элементов массивов начинается с единицы. Это значит, что индексы должны быть больше или равны единице. Важно понять, что вектор, вектор-строка или матрица являются математическими объектами, а одномерные, двумерные или многомерные массивы - способы хранения этих объектов в компьютере. Всюду дальше будут использоваться слова вектор и матрица, если больший интерес представляет сам объект, чем способ его хранения. Вектор может быть записан в столбик (вектор-столбец) и в строку (вектор-строка). Вектор-столбцы и вектор-строки часто будут называться просто векторами, различие будет сделано в тех случаях, если важен способ хранения вектора в MatLab. Векторы и матрицы обозначаются курсивом, а соответствующие им массивы прямым моноширинным шрифтом, например: "вектор а содержится в массиве а", "запишите матрицу R в массив r". Ввод сложение и вычитание векторов Работу с массивами начнем с простого примера - вычисления суммы векторов: Для хранения векторов используйте массивы а и b. Введите массив а в командной строке, используя квадратные скобки и разделяя элементы вектора точкой с запятой: » a = [1.3; 5.4; 6.9] Так как введенное выражение не завершено точкой с запятой, то пакет MatLab автоматически вывел значение переменной а. Введите теперь второй вектор, подавив вывод на экран » b = [7.1; 3.5; 8.2]; Для нахождения суммы векторов используется знак +. Вычислите сумму, запишите результат в массив с и выведите его элементы в командное окно: » с = а + b Узнайте размерность и размер массива а при помощи встроенных функций ndims и size: » ndims(a) Итак, вектор а хранится в двумерном массиве а размерностью три на один (вектор-столбец из трех строк и одного столбца). Аналогичные операции можно проделать и для массивов b и c. Поскольку числа в пакете MatLab представляются в виде двумерного массива один на один, то при сложении векторов используется тот же знак плюс, что и для сложения чисел. Ввод вектор-строки осуществляется в квадратных скобках, однако элементы следует разделять пробелами или запятыми. Операции сложения, вычитания и вычисление элементарных функций от вектор-строк производятся так же, как и с вектор-столбцами, в результате получается вектор-строка того же размера, что и исходные. Например: » s1 = [3 4 9 2] Замечание 1 Если размеры векторов, к которым применяется сложение или вычитание, не совпадают, то выдается сообщение об ошибке. Естественно, для нахождения разности векторов следует применять знак минус, с умножением дело обстоит несколько сложнее. » v1 = [2 -3 4 1]; Операция .* (не вставляйте пробел между точкой и звездочкой!) приводит к поэлементному умножению векторов одинаковой длины. В результате получается вектор с элементами, равными произведению соответствующих элементов исходных векторов: » u = v1.*v2 При помощи .^ осуществляется поэлементное возведение в степень: » р = v1.^2 Показателем степени может быть вектор той же длины, что и возводимый в степень. При этом каждый элемент первого вектора возводится в степень, равную соответствующему элементу второго вектора: » p = vl.^v2 Деление соответствующих элементов векторов одинаковой длины выполняется с использованием операции ./ » d = v1./v2 Обратное поэлементное деление (деление элементов второго вектора на соответствующие элементы первого) осуществляется при помощи операции .\ » dinv = vl.\v2 Итак, точка в MatLab используется не только для ввода десятичных дробей, но и для указания того, что деление или умножение массивов одинакового размера должно быть выполнено поэлементно. » v = [4 6 8 10]; Умножать вектор на число можно как справа, так и слева: » v = [4 6 8 10]; Делить при помощи знака / можно вектор на число: » р = v/2 Попытка деления числа на вектор приводит к сообщению об ошибке: » р = 2/v Если требуется разделить число на каждый элемент вектора и записать результат в новый вектор, то следует использовать операцию ./ » w = [4 2 6]; Все вышеописанные операции применимы как к вектор-строкам, так и к вектор-столбцам. » d = sin(с) Итак, встроенные в MatLab элементарные функции приспосабливаются к виду аргументов; если аргумент является массивом, то результат функции будет массивом того же размера, но с элементами, равными значению функции от соответствующих элементов исходного массива. Убедитесь в этом еще на одном примере. Если необходимо найти квадратный корень из элементов вектора dсо знаком минус, то достаточно записать: » sqrt(-d) Оператор присваивания не использовался, поэтому пакет MatLab записал ответ в стандартную переменную ans. Для определения длины вектор-столбцов или вектор-строк служит встроенная функция length: » length(s1) Из нескольких вектор-столбцов можно составить один, используя квадратные скобки и разделяя исходные вектор-столбцы точкой с запятой: » v1 = [1; 2]; Для сцепления вектор-строк также применяются квадратные скобки, но сцепляемые вектор-строки отделяются пробелами или запятыми: » v1 = [1 2]; Работа с элементами векторов Доступ к элементам вектор-столбца или вектор-строки осуществляется при помощи индекса, заключаемого в круглые скобки после имени массива, в котором хранится вектор. Если среди переменных рабочей среды есть массив v, определенный вектор-строкой » v = [1.3 3.6 7.4 8.2 0.9]; то для вывода, например его четвертого элемента, используется индексация: » v(4) Появление элемента массива в левой части оператора присваивания приводит к изменению в массиве » v(2) = 555 Из элементов массива можно формировать новые массивы, например » u = [v(3); v(2); v(1)] Для помещения определенных элементов вектора в другой вектор в заданном порядке служит индексация при помощи вектора. Запись в массив w четвертого, второго и пятого элементов v производится следующим образом: » ind = [4 2 5]; MatLab предоставляет удобный способ обращения к блокам последовательно расположенных элементов вектор-столбца или вектор-строки. Для этого служитиндексация при помощи знака двоеточия. Предположим, что в массиве w, соответствующем вектор-строке из семи элементов, требуется заменить нулями элементы со второго по шестой. Индексация при помощи двоеточия позволяет просто и наглядно решить поставленную задачу: » w = [0.1 2.9 3.3 5.1 2.6 7.1 9.8]; Присваивание w(2:6) = 0 эквивалентно последовательности команд » w - [0.1 2.9 3.3 5.1 2.6 7.1 9.8]; Составьте массив w2, содержащий элементы w кроме четвертого. В этом случае удобно использовать двоеточие и сцепление строк: » w2 = [w(l:3) w(5:7)] Элементы массива могут входить в выражения. Нахождение, например среднего геометрического из элементов массива u, можно выполнить следующим образом: » gm = (u(l)*u(2)*u(3))^(l/3) Конечно, этот способ не очень удобен для длинных массивов. Для того чтобы найти среднее геометрическое, необходимо набрать в формуле все элементы массива. В MatLab существует достаточно много специальных функций, облегчающих подобные вычисления. Применение функций обработки данных к векторам Перемножение элементов вектора-столбца или вектора-строки осуществляется при помощи функции prod: » z = [3; 2; 1; 4; 6; 5]; Функция sum предназначена для суммирования элементов вектора. С ее помощью нетрудно вычислить среднее арифметическое элементов вектора z: » sum(z)/length(z) В MatLab имеется и специальная функция mean для вычисления среднего арифметического: » mean(z) Для определения минимального и максимального из элементов вектора служат встроенные функции min и max: » m1 = max(z) Часто необходимо знать не только значение минимального или максимального элемента в массиве, но и его индекс (порядковый номер). В этом случае встроенные функции min и max необходимо использовать с двумя выходными аргументами, например » [m, k] = min(z) В результате переменной m будет присвоено значение минимального элемента массива z, а номер минимального элемента занесен в переменную k. » r = [9.4 -2.3 -5.2 7.1 0.8 1.3]; Можно упорядочить вектор по убыванию, используя эту же функцию sort: » R1 = -sort(-r) Упорядочение элементов в порядке возрастания их модулей производится с привлечением функции abs: » R2 = sort(abs(r)) Вызов sort с двумя выходными аргументами приводит к образованию массива индексов соответствия элементов упорядоченного и исходного массивов: » [rs, ind] = sort(r)
|