Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Массивы и матрицы



В системе Matlab массивы являются основными объектами. Среди них выделим скаляр (он имеет размерность 1´1), одномерный массив - вектор и двумерный массив матрица. Элемент в строке 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] - матрица размера 2´3. Точка с запятой разделяет первую и вторую строки;

§ А = [ ] - сохраняет пустую матрицу в А;

§ А(m,:) = [ ] - удаляет строку m из матрицы А;

§ А(:,n) = [ ] - удаляет столбец n из матрицы А.

Изучим возможности системы Matlab для создания матриц с заданными свойствами. Для создания единичной матрицы (она обычно обозначается как Е) служит функция eye:

§ еуе(n) - возвращает единичную матрицу размера n´n;

§ eye(m,n) или еуе([m n]) - возвращают матрицу размера m´n с единицами по диагонали и нулями в остальных ячейках;

§ eye(size(A)) - возвращает единичную матрицу того же размера, что и А.

Единичная матрица не определена для многомерных массивов.

Для создания матриц, все элементы которых - единицы, используется функция ones:

§ ones(n) - возвращает матрицу размера nхn, все элементы которой - единицы. Если n - не скаляр, то появится сообщение об ошибке;

§ ones(m.n) или ones([m n]) - возвращают матрицу размера mxn, состоящую из единиц;

§ ones(dl,d2,d3....) или ones([d1 d2 d3...]) - возвращает массив из единиц с размером d1´d2´d3´...;

§ 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...]) - возвращают массив из нулей размера d1´d2´d3´...;

§ 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 имеет возможность формировать специальные матрицы:

Перечислим основные матричные фукции линейной алгебры:

Перечислим также функции разреженных матриц:

Система М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 можно использовать структуры. Структуры - это многомерные массивы, элементы которого являются структурой с несколькими полями.





Дата публикования: 2014-10-29; Прочитано: 1910 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...