Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ
Матрицы представляют собой самые распространенные объекты системы MATLAB, которая специально предназначена для проведения сложных вычислений с векторами, матрицами и массивами. Особое значение придается матрицам 1x1, которые являются скалярами, и матрицам, имеющим один столбец или одну строку, – векторам.
Рассмотрим способы построения матриц. В следующих примерах вектор–столбец является матрицей размером 3x1, вектор–строка является матрицей размером 1x3, а скаляр матрицей 1x1: u = [3; 1; 4] u = v = [2 0 -1] v = 2 0 -1 s = 7 s =
Задание матрицы требует указания нескольких строк. Каждая строка оканчивается точкой с запятой. Так, ввод
M = [1 2 3; 4 5 6; 7 8 9]; задает квадратную матрицу, которую можно вывести, набрав в командной строке M и нажав клавишу Enter: M= 1 2 3 4 5 6 7 8 9
В качестве элементов матриц можно использовать арифметические выражения, например:
V = [2+3*5 exp(2) sqrt(2)] V = 17.0000 7.3891 1.4142 Для указания отдельного элемента матрицы используются индексы. Элемент в строке I и столбце J матрицы A обозначается A(I, J). Если элементу A(2, 3) надо присвоить значение 10, следует ввести команду: A(2, 3)=10;
Выражение M(I) с одним индексом дает доступ к элементам матрицы развернутым в один столбец. В этом случае массив рассматривается как длинный вектор, сформированный из столбцов исходной матрицы. Так, для рассмотренного ранее примера с матрицей M, M(4)– это другой способ ссылаться на значение 2, хранящееся в M(1, 2). Если попытаться использовать значение элемента вне матрицы, MATLAB выдаст ошибку:
M(4, 2) ??? Index exceeds matrix dimensions. Однако, если элементу матрицы с индексами, превышающими ее размерность, присвоить некоторое значение, размерность матрицы увеличится, например:
M(2, 5)= 1 M = 1 2 3 0 0 4 5 6 0 1 7 8 9 0 0 Оператор «двоеточие». Двоеточие – это один из наиболее важных операторов MATLAB. Он используется в различных выражениях. Для создания вектор–строки с целочисленными компонентами от 1 до 10 достаточно выполнить команду: M = 1: 10 M = 1 2 3 4 5 6 7 8 9 10 Для получения обратного интервала, введем приращение:
M = 100: -7: 50 M = 100 93 86 79 72 65 58 51 или
M = 0: pi/4: pi M = 0 0.7854 1.5708 2.3562 3.1416 Оператор “двоеточие” используется для формирования подвекторов и подматриц из векторов, матриц и многомерных массивов:
· M(:, J) – это J-й столбец из M; · M(I,: ) – это I-я строка из M; · M(:,: ) – это матрица M; · M(J: K) – это M(J), M(J+1), …, M(K ); · M(:, J: K) – это M(:, J), M(:, J+1), …, M(:, K ); · M(:,:, K) – это K- я страница трехмерного массива M; · M(I, J, K,: ) – вектор, выделенный из четырехмерного массива M. Вектор включает элементы M(I, J, K, 1 ), M(I, J, K, 2 ), M(I, J, K, 3 ) и т.д.; · M(: ) записывает все элементы массива M в виде столбца.
Векторные индексы. Из предыдущего примера следует, что в качестве индексов могут использоваться векторы. Если X и V векторы, то X(V) можно представить как вектор [ X(V(1)), X(V(2)), …, X(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка выдается в том случае, если индекс элемента меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет m компонент, а вектор W – n компонент, то M(V, W) будет матрицей размером mxn, сформированной из элементов матрицы M, индексы которой – элементы векторов V и W. Векторные индексы можно использовать в операциях присваивания, например: M(I, J) = B присваивает значения массива B элементам прямоугольной подматрицы M, которые определяются векторами I и J. Массив B должен иметь length(I) строк и length(J) столбцов. В следующем примере векторный индекс используется для перестановки 2 и 3 столбцов матрицы B, результат помещается в матрицу A: A = B(:, [1 3 2 4]);
Удаление строк и столбцов. Строки и столбцы матрицы можно удалить, используя пустые квадратные скобки []. Создадим магическую матрицу размером 4x4:
M=magic(4) M = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Затем удалим второй столбец:
M(:, 2) = [] M = 16 3 13 5 10 8 9 6 12 4 15 1 Используя один индекс вместо двух или векторный индекс, можно удалить из матрицы один или несколько выборочных элементов соответственно. При этом матрица преобразуется в вектор–строку:
M(2: 2: 10) = [] M = 16 9 3 6 13 12 1
Объединение матриц. Объединение матриц – это процесс соединения нескольких матриц в одну большую. Фактически, исходная матрица создается объединением ее отдельных элементов. Оператор объединения – это пара квадратных скобок. Так, [A, B] – горизонтальная конкатенация (объединение) матриц A и B, которые должны иметь одинаковое количество строк. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [A, B, C]. При вертикальной конкатенации матрицы в квадратных скобках разделяются точкой с запятой: [A; B; C]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно. Приведем пример:
M=[1 2; 3 4] M = 1 2 3 4 B=[M M+4; M+6 M+2] B = 1 2 5 6 3 4 7 8 7 8 3 4 9 10 5 6 Транспонирование матриц. Матрицы можно транспонировать с помощью оператора ‘ (апостроф), например A ’ – транспонированная матрица A. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы.
Создание матриц с заданными свойствами. Для создания единичной матрицы служит функция eye: · eye(n) – возвращает единичную матрицу размером nxn; · eye(m, n) – возвращает матрицу размером mxn с единицами на главной диагонали; · eye(size(A)) – возвращает единичную матрицу того же размера, что и A. Пример использования функции eye:
M = eye(4, 5) M = 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 Для создания матриц, все элементы которых – единицы, используется функция ones: · ones(n) – возвращает матрицу размером nxn, все элементы которых – единицы; · ones(m, n) – возвращает матрицу размером mxn, состоящую из единиц; · ones(d1, d2, d3, … ) – возвращает массив из единиц с размером d1 x d2 x d3, …; · ones(size(A)) – возвращает массив единиц такой же размерности, что и A. Пример:
M = ones(3, 4) M = 1 1 1 1 1 1 1 1 1 1 1 1
Создание нулевой матрицы обеспечивает функция zeros, аргументы которой точно такие же, как и у функции ones.
Создавать матрицы с заданными диагональными элементами позволяет функция diag: · X = diag(v, k) – для вектора v, состоящего из n компонент, возвращает квадратную матрицу X порядка n + abs(k) с элементами v на k -й диагонали, при k = 0 это главная диагональ, при k > 0 – одна из верхних диагоналей, при k < 0 – одна из нижних диагоналей. Остальные элементы матрицы – нули; · X = diag(v) – помещает вектор v на главную диагональ; · V = diag(X, k) – для матрицы X возвращает вектор-столбец, состоящий из элементов k -й диагонали матрицы X; · V = diag(X) – возвращает главную диагональ матрицы X.
Для создания матриц, состоящих из других матриц, служат следующие функции: · repmat(A, m, n) возвращает матрицу A, состоящую из mxn копий матрицы A; · repmat(A, n) возвращает матрицу A, состоящую из nxn копий матрицы A; · repmat(A, [m n p … ]) возвращает многомерный массив, состоящий из копий матрицы A. Матрица A может быть многомерной; · repmat(a, m, n) возвращает матрицу размером mxn со значениями элементов, заданных скаляром a. Пример: 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 · reshape(A, m, n) возвращает матрицу размером mxn, сформированную из A путем последовательной выборки по столбцам. Если число элементов A не равно mxn, то выдается сообщение об ошибке; · reshape(A, m, n, p, … ) возвращает N -мерный массив с элементами из A, но имеющий размер mxnxp …равный prod(size(A)); · reshape(A, v ) возвращает N -мерный массив с элементами из A, но перестроенный к размеру, заданному вектором v. Пример:
M=1: 6 M = 1 2 3 4 5 6
A=reshape(M, 2, 3 ) A = 1 3 5 2 4 6
Создание вектора равноотстоящих точек. Функция linspace формирует линейный массив равноотстоящих узлов. Формы применения: · linspace(a, b) формирует линейный массив из 100 точек, равномерно распределенных на отрезке от a до b; · linspace(a, b, n) формирует линейный массив из n точек, равномерно распределенных на отрезке от a до b; Пример:
M = linspace( 1, 2, 5 ) M = 1.0 1.2500 1.5000 1.7500 2.0000 Создание вектора равноотстоящих точек в логарифмическом масштабе. Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Формы применения: · logspace(a, b) формирует вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10a и 10b; · logspace(a, b, n) возвращает n точек между декадами 10a и 10b; · logspace(a, pi) возвращает точки в интервале между 10a и p.
Все аргументы функции logspace должны быть скалярными величинами.
Разреженные матрицы. Матрицы, содержащие большое число элементов с нулевыми значениями называются разреженными. Такие матрицы обычно возникают при решении краевых задач для систем дифференциальных уравнений методом сеток. С разреженными матрицами удобно работать, используя компактные схемы хранения только ненулевых элементов матрицы. Помимо ненулевых элементов в разреженном формате необходимо хранить индексную информацию, указывающую расположение каждого элемента в регулярном массиве. Эта дополнительная информация является ценой, которую приходится платить за отказ от хранения нулей. Для разреженных матриц в MATLAB имеется ряд функций, подборка из которых приводится ниже:
· [B, d] = spdiags(A) создает разреженную матрицу B, столбцами которой являются ненулевые диагонали матрицы A. Вектор d содержит номера ненулевых диагоналей; · B = spdiags(A, d) создает разреженную матрицу B, столбцами которой являются ненулевые диагонали матрицы A, определенные вектором d; · A = spdiags(B, d, A) заменяет диагонали матрицы A, определенные вектором d, столбцами матрицы B; · A = spdiags(B, d, m, n) создает разреженную матрицу A размером mxn, размещая столбцы матрицы B вдоль диагоналей, определяемых вектором d; · full( S) преобразует разреженную матрицу S в полную; · S=sparse(A) преобразует полную матрицу в разреженную; · S=sparse(i, j, s, m, n) создает разреженную матрицу S размером mxn. Векторы i и j задают позиции элементов и являются целочисленными, а вектор s определяет действительное или комплексное числовое значение элемента матрицы. Векторы i, j и s должны иметь одну и ту же длину.
Построим матрицу системы уравнений, которая возникает при аппроксимации второй производной на равномерной сетке узлов:
n=5; e = ones(n, 1); A = spdiags([e -2*e e], -1: 1, n, n); Full(A) ans = -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2 1 0 0 0 1 -2
Построим разреженную матрицу A размером 4x4 из столбцов матрицы B, помещенных в дагонали матриы A, номера которых указаны в векторе d:
B = [ 41 11 0 52 22 0 63 33 13 74 44 24 ]; d = [ -3 2]; A = spdiags(B, d, 4, 4); Full(A) ans = 11 0 13 0 0 22 0 24 0 0 33 0 41 0 0 44 Конвертируем матрицу из полного формата в разреженный, используя функцию sparse:
A = [ 0 0 0 5 0 2 0 0 1 3 0 0 0 0 4 0]; S = sparse(A) S = (3, 1) 1 (2, 2) 2 (3, 2) 3 (4, 3) 4 (1, 4) 5
В списке вывода перечислены ненулевые элементы матрицы S вместе с индексами строк и столбцов. Все элементы отсортированы по столбцам. Разреженную матрицу S из данного примера можно создать напрямую без конвертации:
S = sparse([3 2 3 4 1], [1 2 2 3 4], [1 2 3 4 5], 4, 4)
ГРАФИКА
MATLAB обладает широким набором графических средств, начиная от команд построения простых графиков функций одной переменной и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI). Особое внимание в системе уделяется трехмерной графике с функциональной окраской отображаемых фигур и имитацией различных световых эффектов.
Команда plot. Команда plot имеет различные формы, связанные с входными параметрами, например plot(y) создает кусочно–линейный график зависимости компонент вектора y от их индексов. Если задать два вектора в качестве аргументов, plot(x, y) создаст график зависимости y от x. Например, для построения графика функции sin(x) на отрезке от 0 до 2p, надо выполнить всего три команды:
t = 0: pi/100: 2*pi; y = sin(t); plot(t, y)
Вызов функции plot с несколькими парами x-y создаст несколько кривых на одном графике. MATLAB автоматически присвоит каждой кривой свой цвет (если это не сделать самому). В дополнение к вектору y построим еще два набора данных и выведем все три кривые на одном графике:
y2 = sin(t –. 25); y3 = sin(t –. 5); plot(t, y, t, y2, t, y3 );
Для идентификации каждой кривой можно применить команду legend:
|
Последнее изменение этой страницы: 2017-03-17; Просмотров: 592; Нарушение авторского права страницы