- •Содержание
- •Введение
- •1. Описание панели инструментов
- •1.1. Командное окно
- •1.2. Окно редактирования и отладки
- •1.3. Окно рабочей области
- •2.1. Переменные, константы и специальные символы
- •1.4. Пути доступа к m-файлам
- •1.5. Окно справки Help Window
- •2. Переменные, операторы и функции системы matlab
- •2.2. Арифметические операторы
- •2.3. Операторы и функции отношения
- •2.4. Логические операторы
- •2.5. Элементарные функции
- •2.6. Массивы и матрицы
- •3. Графические средства системы matlab
- •3.1. Основные операторы и функции графики
- •3.2. Окно графики
- •3.3. Графика в прямоугольных координатах
- •3.4. Масштабирование осей и вывод на экран
- •3.5. Графика в полярных координатах
- •3.6. Построение столбиковых даграмм и гистограмм
- •3.7. Отображение трехмерных поверхностей
- •4. Программирование в системе matlab
- •4.1. Структура m-файла сценария и функции
- •4.2. Ввод и вывод иформации
- •4.3. Форматы вывода чисел
- •4.4. Функции nargin и nargout
- •4.5. Локальные и глобальные переменные
- •4.6. Управление последовательностью выполнения
- •4.7. Ускорение вычислений
- •4.8. Примеры программирования с использованием средств пакета Matlab
- •5. Система simulink
- •5.1. Библиотека модулей
- •5.2. Раздел Sinks (получатели сигналов)
- •5.3. Раздел Sources (источники сигналов)
- •5.4. Раздел Continuous (аналоговые блоки)
- •5.5. Раздел Discrete (дискретные блоки)
- •5.6. Раздел Function & Tables (функции и таблицы)
- •5. Логические операторы (&& | | !).
- •5.7. Раздел Math (математические блоки)
- •5.8. Раздел Nonlinear (нелинейные компоненты)
- •5.9. Раздел Signal & Systems (блоки преобразования сигналов и создания систем)
- •5.10. Применение системы Simulink в задачах моделирования динамических систем
- •Литература
2.6. Массивы и матрицы
В системе Matlab массивы являются основными объектами. Среди них выделим скаляр (он имеет размерность 11), одномерный массив - вектор и двумерный массив матрица. Элемент в строке i и столбце j матрицы А обозначается А(i,j).
При формировании массивов и матриц существенное значение имеет операция : (двоеточие). Оператор : использует следующие правила для создания векторов:
j:k - то же, что и [j,j+l,...,k];
j:k - пустой вектор, если j>k;
j:i:k - то же, что и [j, j+i ,j+2i .....k];
j:i:k - пустой вектор, если i>0 и j>k или если i<0 и j<k, где i, j и k - скалярные величины.
Ниже показано, как выбирать с помощью оператора : строки, столбцы и элементы из векторов, матриц и многомерных массивов:
А(:, j) - это j-й столбец из А;
А(i,:) - это i-я строка из А;
А(:,:) - эквивалент двумерного массива. Для матриц это аналогично А;
A(j:k) - это A(j), A(j+l),...,A(k);
A(:,j:k)-это A(:,j),A(:,j+l),...,A(:,k);
А(:,:,k) - это k-я страница трехмерного массива А;
А(:) - записывает все элементы массива А в виде столбца.
Круглые скобки используются для задания порядка выполнения операций в арифметических выражениях, указания последовательности аргументов функции и указания индексов элемента вектора или матрицы. Если X и V - векторы, то X(V) можно представить как [X(V(1), X(V(2)).....X(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка генерируется в том случае, если индекс элемента меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет m компонентов, а вектор W - n компонентов, то A(V,W) будет матрицей размера mxn, сформированной из элементов матрицы А, индексы которой - элементы векторов V и W.
Квадратные скобки используются для формирования векторов и матриц:
[6.9 9.64 sqrt(-l)] - вектор, содержащий три элемента, разделенных пробелами;
[6.9 9.64. i] - такой же вектор;
[1+j 2-j 3] и [1 +j 2 -j 3] - разные векторы: первый содержит три элемента, а второй пять;
[11 12 13; 21 22 23] - матрица размера 23. Точка с запятой разделяет первую и вторую строки;
А = [ ] - сохраняет пустую матрицу в А;
А(m, :) = [ ] - удаляет строку m из матрицы А;
А(: ,n) = [ ] - удаляет столбец n из матрицы А.
Изучим возможности системы Matlab для создания матриц с заданными свойствами. Для создания единичной матрицы (она обычно обозначается как Е) служит функция eye:
еуе(n) - возвращает единичную матрицу размера nn;
eye(m,n) или еуе([m n]) - возвращают матрицу размера mn с единицами по диагонали и нулями в остальных ячейках;
eye(size(A)) - возвращает единичную матрицу того же размера, что и А.
Единичная матрица не определена для многомерных массивов.
Для создания матриц, все элементы которых - единицы, используется функция ones:
ones(n) - возвращает матрицу размера nхn, все элементы которой - единицы. Если n - не скаляр, то появится сообщение об ошибке;
ones(m.n) или ones([m n]) - возвращают матрицу размера mxn, состоящую из единиц;
ones(dl,d2,d3....) или ones([d1 d2 d3...]) - возвращает массив из единиц с размером d1d2d3...;
ones(size(A)) - возвращает массив единиц той же размерности и размера, что и А. Матрица с единичными элементами в отличие от единичной матрицы в Matlab определена и для многомерных массивов.
Пример 2.8. Формирование матрицы, состоящей из единиц.
s=ones(3,4)
s=
1 1 1 1
1 1 1 1
1 1 1 1
Функция zeros обеспечивает создание нулевых матриц:
zeros(n) - возвращает матрицу размера nхn, содержащую нули. Если n - не скаляр, то появится сообщение об ошибке;
zeros(m,n) или zeros([m n]) - возвращают матрицу размера mxn, состоящую из нулей;
zeros(d1,d2,d3,...) или zeros([d1 d2 d3...]) - возвращают массив из нулей размера d1d2d3...;
zeros(size(A)) - возвращает массив нулей того же размера и размерности, что и А.
Функция linspace формирует линейный массив равноотстоящих узлов:
llnspace(a,b) - возвращает линейный массив из 100 точек, равномерно распределенных между а и b;
linspace(a,b,n) - генерирует n точек, равномерно распределенных в интервале от а до b.
Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Она особенно эффективна при создании вектора частот.
Функция 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 состояние.
Другим вариантом функции, генерирующей матрицу случайных чисел, является функция normrnd(mu,sigma,m,n), которая возвращает матрицу случайных чисел, распределенных по нормальному закону с математическим ожиданием mu и среднеквадратическим отклонением sigma.
Пример 2.9. Формирование случайной матрицы.
Y=randn(4,3)
Y =
-0.6918 -1.4410 0.8156
0.8580 0.5711 0.7119
1.2540 -0.3999 1.2902
-1.5937 0.6900 0.6686
Функция rand генерирует массивы случайных чисел, значения элементов которых равномерно распределены в промежутке (0, 1). Эта функция может использоваться в тех же режимах, что и функция randn. Отметим, в системе Matlab можно генерировать случайные числа, распределенными по 19 различным законам распределения.
Рассмотрим другие возможности выполнения операций над матрицами. Операция cat (dim, А, В) - объединяет массивы А и В в соответствии со спецификацией размерности dim и возвращает объединенный массив; dim = 1 - горизонтальная конкатенация, dim = 2 - вертикальная, dim = 3 - многомерный массив размерности 3 и т. д.
Свойства матриц сильно зависят от их диагональных элементов. Функция diag позволяет создавать специальные типы матриц с заданными диагональными элементами diag(V,k) - для вектора V, состоящего из n компонентов, возвращает квадратную матрицу X порядка n+abs(k) с элементами V на k-й диагонали, при k=0 -это главная диагональ (из левого верхнего угла матрицы в правый нижний угол), при k>0 - одна из диагоналей (диагональ в терминологии Matlab - это линия, параллельная главной диагонали) выше главной диагонали, при k<0 - одна из нижних диагоналей. Остальные элементы матрицы равны нулю.
Для перестановок элементов матриц служат следующие функции:
В = fliplr(A) - зеркально переставляет столбцы матрицы А относительно вертикальной оси;
В = flipud(A) - зеркально переставляет строки матрицы А относительно горизонтальной оси;
perms(V) - возвращает матрицу Р, которая содержит все возможные перестановки элементов вектора v. каждая перестановка в отдельной строке (матрица Р содержит n! строк и n столбцов).
Несколько простых функций служат для перемножения элементов массивов:
prod(A) - возвращает произведение элементов массива, если А - вектор, или вектор-строку, содержащую произведения элементов каждого столбца, если А - матрица;
prod(A,dim) - возвращает матрицу (массив размерности два) с произведением элементов массива А по столбцам (dim=l), по строкам(dim=2), по иным размерностям в зависимости от значения скаляра dim;
cumprod(A) - возвращает произведение с накоплением;
cumprod(A,dim) - возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от значения скаляра dim;
cross(U,V) - возвращает векторное произведение векторов U и V в трехмерном пространстве, т. е. W=UxV. U и V - обязательно векторы с тремя элементами;
cross(U,V,dim) - возвращает векторное произведение U и V по размерности, определенной скаляром dim.
Определены следующие функции суммирования элементов массивов:
sum(A) - возвращает сумму элементов массива, если А - вектор, или вектор-строку, содержащую сумму элементов каждого столбца, если А - матрица;
sum(A,dim) - возвращает сумму элементов массива по столбцам (dim=1), строкам (dim=2) или иным размерностям в зависимости от значения скаляра dim;
cumsum(A) - выполняет суммирование с накоплением;
cumsum(A,dim) — выполняет суммирование с накоплением элементов по размерности, определенной скаляром dim.
Отметим, что существуют и другие возможности формирования матриц. Это в первую очередь операции типа remat, операции поворота типа rot, выделения треугольных частей - tril и др. операции над матрицами.
Система Matlab имеет возможность формировать специальные матрицы:
hadamard – вычисление матрица Адамара;
galleley – вычисление тестовых матриц;
compan – вычисление сопровождающей матрицы;
hankel – вычисление матрицы Ганкеля;
hild, invhild – вычисление матрицы Гильберта и обратной ей;
pascal – вычисление матрицы Паскаля;
toeplitz – вычисление матрицы Теплица;
wilkinson – вычисление матрицы Уилкинсона.
Перечислим основные матричные фукции линейной алгебры:
inv, pinv – обращение матриц;
cond, condeig, rcond – вычисление чисел обусловленности матрицы;
det, rank – вычисление определителя и ранга матрицы;
norm – определение векторной и матричной нормы;
balance, eig, svd – вычисление собственных значений и сингулярных чисел;
orth, null – определение ортонормального базиса матрицы;
rref, rrefmoive – функции приведения матрицы к треугольному виду;
trace – вычисление следа матрицы;
subspace – определение угла между двумя подпространствами;
chol, cholinc – разложение Холецкого;
cdf2rdf, hess, qz, rsf2csf,schur – функции приведения матриц к форме Шура и Хессенберга.
Перечислим также функции разреженных матриц:
spdags, speye,sprand,sprandn, sprandsum - элементарные разреженные матрицы;
find, full, sparse, spconvert – преобразование разреженных матриц;
nnz, nonzeros, nzmax, spalloc, spfun, spones – операции с нулевыми элементами разреженных матриц;
spy – визуализация разреженных матриц;
eigs, svds – вычисление собственных значений и сингулярных чисел разреженных матриц.
Система Мatlab позволяет работать с текстом, используя символьные массивы. Например, результатом выражения A= 'Table' будет являться не численным массивом, а символьным. Символы хранятся как числа, но не в формате с плавающей точкой.
Оператор B=double(A) преобразует массив символов в числовую матрицу, содержащую представление с плавающей точкой ASCII, а выражение A=chear(B) осуществляет обратное превращение.
Можно преобразовать заполненный символьный массив в массив ячеек из строк следующим образом С = cellstr(A). Обратное преобразование A = char(С).
В системе Matlab определено шесть базовых типов данных, каждый из которых является многомерным массивом. Шесть классов - это double, char, sparse, uint8, cell, и struct. Чаще всего приходится иметь дело только с двумя из этих типов данных: массив чисел удвоенной точности (double) и массив символов (char). Другие типы данных предназначены для таких специальных приложений, как работа с разреженными матрицами (sparse), обработка изображений (uint8), работа с массивами большой размерности (cell и struct). Тип uint8 предназначен для эффективного хранения данных в памяти.
В системе Matlab можно использовать структуры. Структуры - это многомерные массивы, элементы которого являются структурой с несколькими полями.
