Как сделать из вектора матрицу в матлаб

Обновлено: 03.07.2024

1. Матрица строка. Указывается переменная, ставится знак присвоения и в квадратных скобках через запятую или пробел перечисляются элементы:

3. Квадратная или прямоугольная матрица:

>> C = [5 6 9; 56 45 73; 15,21,36];

4. Генерация вектора. Синтаксис: = : : . Если не указать шаг, то по умолчанию он принимается за 1.

5. Единичная матрица. Синтаксис: =ones( , ).

6. Нулевая матрица. Синтаксис: =zeros( , );

Доступ к ячейкам матрицы. Синтаксис: ( , ). Необходимо помнить, что нумерация строк и столбцов начинается с 1.

Операции с матрицами:

2. Сложение и вычитание матриц. Данная операция выполнима только с матрицами одинакового размера. При выполнении операции действие выполняется с соответствующими друг другу ячейками.

3. Произведение матриц. Производится последовательное умножение строки первой матрицы на столбец второй. Для реализации данной операции необходимо выполнение условия (количество строк первой матрицы ровно количеству столбцов во второй матрице). Матрица результата будет иметь столько же строк сколько и в первой матрице, и количество столбцов равное количеству столбцов во второй матрице.

4. Удаление отдельных столбцов или строк. Для удаления отдельных столбцов или строк матрицы используются: пустые квадратные скобки [] и оператор двоеточие (:).

>> C = [24 33 42; 34 47 60; 44 61 78]

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 3. Программирование в среде Matlab 5

3.5. Индексы и подындексы

Индексы. Элемент массива А, расположенный на пересечении строки i и столбца j, обозначается как А(i, j).

Пример
Рассмотрим в качестве массива А матрицу magic(4):

А = magic(4)
А =

162313
511108
97612
414151

Тогда А(4, 3) — это элемент, расположенный на пересечении строки 4 и столбца 3, равный 15.

Можно также вычислить сумму элементов четвертого столбца

A(1, 4) + A(2, 4) + A(3, 4) + A(4, 4)
ans = 34

На элементы массива А можно ссылаться, используя единственный индекс, А(k). Это обычный способ ссылки на элементы векторов. Но точно так же можно ссылаться на элементы двумерного массива, и в этом случае этот массив рассматривается как один длинный вектор-столбец, сформированный из столбцов исходного массива. В рассматриваемом примере А(12) — это другой способ ссылки на значение 15, соответствующее элементу А(4, 3).

Если будет сделана попытка обратиться к элементу вне матрицы, то программа выдаст ошибку:

t = A(4, 5)
. Index exceeds matrix dimensions. Индекс превышает размерность матрицы.

Если же выполняется присвоение значения элементу с индексами, выходящими за пределы массива, то система MATLAB автоматически увеличивает размер матрицы.

Пример:

X = A;
X (4, 5) = 17
X =

162313
511108
97612
41415117

Выделение подблоков массива. Если в индексных выражениях использовать двоеточие, то можно ссылаться на подблоки массива. Так индексное выражение A(1:k, j) ссылается на блок из k элементов столбца j.

Пример:

A(1:4,3)
ans =

Здесь выделен столбец 3 матрицы magic(4).

sum(A(1:4, 3))
ans = 34

вычисляет сумму элементов столбца 3.

Однако существует способ лучше. Поскольку двоеточие само по себе ссылается на все элементы строки или столбца, то последнюю сумму можно вычислить так

sum(A(:,3))
ans = 34

Кроме того, начиная с версии 5.0, на последнюю строку или столбец массива можно ссылаться с помощью ключевого слова end. Таким образом, оператор

sum(A(:, end))
ans = 34

вычисляет сумму элементов в последнего столбца матрицы A.

Объдинение подблоков в массив. Операция объединения отдельных подблоков в массив называется конкатенацией. Даже при формировании исходной матрицу, когда объдиняются отдельные элементы, осуществляется операция конкатенации.Оператор конкатенации — это пара квадратных скобок [ ], внутри которых указываются отдельные элементы или блоки массива.

Пример.
Используя матрицу A, равную magic(4), образуем новую матрицу B размера 8×8

B = [A A+32; A+48 A+16]
B =

16231348343545
51110837434240
9761241393844
41415136464733
6450516132181929
5359585621272624
5755546025232228
5262634920303117

Эта матрица состоит из четырех блоков размера 4×4

163213
510118
96712
415141
48353445374243404138394436474633 64515061535859565754556052636249 32191828212623282522232820313017

Эта матрица есть половина другого волшебного квадрата, элементы которого находятся в диапазоне целых чисел 1:64. Суммы по столбцам уже имеют правильное значение для волшебного квадрата размера 8х8:

sum(B)
ans = 260 260 260 260 260 260 260 260

Однако сумма строк

sum (B’)
ans = 196 196 196 196 324 324 324 324

Попробуйте найти те перестановки элементов, которые приводят матрицу B к истинному волшебному квадрату порядка 8.

Удаление строк и столбцов. Используя понятие пустого массива, можно легко удалять строки, столбцы и целые подблоки.

X = A
X =

162313
511108
97612
414151

Чтобы удалить второй столбец массива X достаточно применить оператор

X (:, 2) = [ ]
X =

16313
5108
9612
4151

При попытке улалить отдельный элемент массива возникает ошибка, поскольку результат не является массивом:

X (1, 2) = []
. Indexed empty matrix assignment is not allowed.
Запрещено присвоение пустой матрицы индексному выражению
.

Однако использование единственного индекса позволяет удалить одиночный элемент или последовательность элементов, при этом остающиеся элементы преобразуются в вектор-строку.

X = A;
X(:, 2) = [ ]
X =

16313
5108
9612
4151

X(2:1:12) = [ ]
X = 16
или
X = A;
X(:, 2) = [ ]
X =

16313
5108
9612
4151

X(2 : 2 : 10) = [ ]
X = 16 9 3 6 13 12 1

Индексация многомерных массивов. В системе MATLAB принято хранить каждый массив, независимо от его размерности, как вектор-столбец. Этот вектор образован объединением (конкатенацией) столбцов исходного массива.

Пример.
Система MATLAB хранит массив A

A = [2 6 9; 4 2 8; 3 0 1]

в виде следующего вектора-столбца

При обращении к массиву А с указанием единственного индекса происходит непосредственное обращение к этому вектору-столбцу. Обращение A(3) ссылается на третье значение в столбце; А(7) — на седьмое и так далее.

Если количество индексов массива больше 1, то MATLAB вычисляет индекс в столбце хранения, используя значения размерностей массива. Если двумерный массив А имеет размер [d1 d2], где d1 — число строк, а d2 — число столбцов, то для элемента с номером (i, j) его позиция в векторе хранения определяется как (j-1)*d1+i.

Пример

Для элемента A(3, 2) MATLAB вычисляет следующую позицию в векторе хранения (2-1)*3+3 = 6. Элементу с номером 6 соответствует значение 0.
Этот способ хранения и индексная схема распространяются и на многомерные массивы. В этом случае MATLAB использует схему постраничного объединения, чтобы создать столбец хранения.
Использование единственного индекса приводит к непосредственному обращению к вектору хранения.
Если задано два индекса (i, j), то MATLAB вычисляет позицию описанным выше способом, причем только для первой страницы многомерного массива и при условии, что эти индексы находятся внутри диапазона размерностей исходного массива.
Если задано более двух индексов, схему индексации усложняется. Если задано четыре индекса (i, j, k, l) для четырехмерного массиву размера d1xd2xd3xd4, то позиция элемента в векторе хранения вычисляется следующим образом
s = (l-1)(d3)(d2)(d1)+(k-1)(d2)(d1)+(j-1)(d1)+i.
Общая формула для позиции элемента в векторе хранения, соответствующего элементу (j1 j2 . jn-1 jn) n-мерного массива размера d1xd2xd3x . xdn, имеет вид
s = (jn-1)(dn-1)(dn-2). (d1)+(jn-1-1)(dn-2). (d1)+. +(j2-1)(d1)+j1.

Пример

Рассмотрим многомерный массив C размера 5х4х3х2. На рис. 3.2 показаны форматы вывода на экран и хранения.

пример

MATLAB позволяет несколько методов индексировать (получать доступ) элементы матриц и массивов:

  • Индексация индексов — где вы указываете позицию элементов, которые вы хотите в каждом измерении матрицы, отдельно.
  • Линейное индексирование — где матрица рассматривается как вектор, независимо от ее размеров. Это означает, что вы указываете каждую позицию в матрице с одним номером.
  • Логическая индексация — где вы используете логическую матрицу (и матрицу true и false значений) с одинаковыми размерами матрицы, которую вы пытаетесь индексировать в качестве маски, чтобы указать, какое значение нужно вернуть.

Эти три метода теперь описано более подробно с помощью следующего 3 на 3 матрицы M в качестве примера:

Индексация индексов

Самый простой способ доступа к элементу — указать его индекс столбца строки. Например, доступ к элементу во второй строке и третьем столбце:

Количество предоставленных индексов точно соответствует числу размеров M (два в этом примере).

Обратите внимание, что порядок индексов совпадает с порядком математического соглашения: индекс строки является первым. Более того, индексы MATLAB начинаются с 1 а не 0 как большинство языков программирования.

Вы можете индексировать сразу несколько элементов, передавая вектор для каждой координаты вместо одного числа. Например, чтобы получить всю вторую строку, мы можем указать, что нам нужны первый, второй и третий столбцы:

В MATLAB вектор [1,2,3] легче создать с помощью оператора двоеточия, т. Е. 1:3 . Вы можете использовать это и в индексировании. Чтобы выбрать целую строку (или столбец), MATLAB предоставляет ярлык, позволяя вам просто указать : Например, следующий код также вернет всю вторую строку

MATLAB также предоставляет ярлык для указания последнего элемента измерения в форме ключевого слова end . Ключевое слово end будет работать точно так же, как если бы это был номер последнего элемента в этом измерении. Поэтому, если вы хотите, чтобы все столбцы от столбца 2 до последнего столбца, вы можете использовать следующее:

Индексация индексирования может быть ограничительной, поскольку она не позволит извлекать отдельные значения из разных столбцов и строк; он будет извлекать комбинацию всех строк и столбцов.

Например, индексирование индексов не может извлекать только элементы M(2,1) или M(3,3) . Для этого мы должны рассмотреть линейную индексацию.

Линейная индексация

MATLAB позволяет обрабатывать n-мерные массивы как одномерные массивы при индексировании с использованием только одного измерения. Вы можете напрямую получить доступ к первому элементу:

Обратите внимание, что массивы хранятся в основном порядке в MATLAB, что означает, что вы получаете доступ к элементам, сначала спустившись по столбцам. Таким образом, M(2) является вторым элементом первого столбца, который равен 3 а M(4) будет первым элементом второго столбца, т.е.

Существуют встроенные функции в MATLAB для преобразования индексов индексов в линейные индексы и наоборот: sub2ind и ind2sub соответственно. Вы можете вручную преобразовать индексы ( r , c ) в линейный индекс на

Чтобы понять это, если мы находимся в первом столбце, линейный индекс будет просто индексом строки. Вышеприведенная формула верна для этого, поскольку для c == 1 , (c-1) == 0 . В следующих столбцах линейный индекс — это номер строки и все строки предыдущих столбцов.

Обратите внимание, что ключевое слово end прежнему применяется и теперь относится к самому последнему элементу массива, т.е. M(end) == M(end, end) == 2 .

Вы также можете индексировать несколько элементов с помощью линейной индексации. Обратите внимание: если вы это сделаете, возвращаемая матрица будет иметь ту же форму, что и матрица индексных векторов.

M(2:4) возвращает вектор строки, потому что 2:4 представляет вектор строки [2,3,4] :

В качестве другого примера M([1,2;3,4]) возвращает матрицу 2 на 2, потому что [1,2;3,4] является матрицей 2 на 2. Посмотрите приведенный ниже код, чтобы убедить себя:

Обратите внимание, что индексирование с помощью : alone всегда будет возвращать вектор-столбец:

Этот пример также иллюстрирует порядок, в котором MATLAB возвращает элементы при использовании линейной индексации.

Логическая индексация

Третий метод индексирования — использовать логическую матрицу, т. Е. Матрицу, содержащую только true или false значения, в качестве маски для фильтрации элементов, которые вы не хотите. Например, если мы хотим найти все элементы M , которые больше 5 мы можем использовать логическую матрицу

для индекса M и возвращать только значения, превышающие 5 следующим образом:

Если вы хотите, чтобы этот номер оставался на месте (т. Е. Сохранял форму матрицы), тогда вы могли бы назначить логический комплимент

Мы можем уменьшить сложные кодовые блоки, содержащие операторы if и for , используя логическую индексацию.

Возьмите не-векторизованный (уже сокращенный до одного цикла с помощью линейной индексации):

Это можно сократить до следующего кода, используя логическую индексацию:

Или даже короче:

Подробнее об индексировании

Более высокие размерные матрицы

Все упомянутые выше методы обобщаются на n-мерные. Если мы используем в качестве примера трехмерную матрицу M3 = rand(3,3,3) , то вы можете получить доступ ко всем строкам и столбцам второго среза третьего измерения, написав

Вы можете получить доступ к первому элементу второго среза с помощью линейной индексации. Линейное индексирование будет двигаться только ко второму срезу после всех строк и всех столбцов первого среза. Таким образом, линейный индекс для этого элемента равен

N-мерную матрицу можно также индексировать, используя m индексов (где m M(1,1) и M(2,3) но также вернет M(1,3) и M(2,1) . Это может показаться неинтуитивными , когда вы ищете элементы для списка пар координат , но рассмотрим пример большей матрицы A = rand(20) (заметим , теперь A 20 матрицу с размерностью 20 ), где вы хотите получить верхний правый квадрант. В этом случае вместо того, чтобы указывать каждую пару координат в этом квадранте (и этот случай равен 100 парам), вы просто указываете 10 строк и 10 столбцов, которые вы хотите, так что A(1:10, 11:end) . Нарезка такой матрицы гораздо более распространена, чем запрос списка пар координат.

В случае, если вы хотите получить список пар координат, самым простым решением является преобразование в линейную индексацию. Рассмотрим проблему, в которой у вас есть вектор индексов столбцов, который вы хотите вернуть, где каждая строка вектора содержит номер столбца, который вы хотите вернуть для соответствующей строки матрицы. Например

Поэтому в этом случае вы действительно хотите вернуть элементы в (1,3) , (2,2) и (3,1) . Таким образом, используя линейное индексирование:

Возвращение элемента несколько раз

С индексом и линейной индексацией вы также можете вернуть элемент несколько раз, повторяя его индекс так

Вы можете использовать это, чтобы дублировать целые строки и столбец, например, чтобы повторить первую строку и последний столбец

MatLab – одна из популярных и тщательно проработанных систем автоматизации математических расчетов. Этот пакет широко используется во всем мире при решении задач, связанных с матричными вычислениями. Название пакета образовано путем сокращения от MATrix LABoratory (матричная лаборатория). Операции и команды в MatLab достаточно естественны и записываются аналогично математическим формулам на бумаге.

Система MatLab может быть отнесена к современной и высокопроизводительной системе программирования, ориентированной на технические расчеты.

Основные отличительные особенности системы MatLab:

Основным элементом, которым оперирует система является двухмерный массив матрица. Даже число представляется как матрица размером 1х1. Это позволяет эффективно решать многие технические вычислительные задачи.

MatLab обеспечивает интерактивную работу в режиме командной строки, что практически соответствует мощному калькулятору, и в режиме выполнения программ m-файлов. Это существенно упрощает понимание работы системы и отладку программ.

Построить вектор-строку с параметрами – от минус последняя цифра № студенческого до плюс последняя цифра № студенческого с шагом – 0,2 (Например: № студенческого 04/5050 – получаемый интервал – от –10 до +10).

Определить длину вектора.

Преобразовать вектор-строку в вектор-столбец.

Создайте матрицу 4*4: строка простых чисел; строка месяц и день рождения; строка год рождения; строка № студенческого. Строки можно располагать в любом порядке (Пример: Дата рождения – 5 марта 1987года, № студенческого – 04/5050. получаемая матрица:

1 9 8 7 – год рождения

3 5 17 23 – простые числа

5 0 5 0 – № студенческого

0 5 0 3 – день и месяц рождения).

Создайте матрицу, транспонированную от исходной, и с уменьшенным каждым элементом на 7.

(Транспонирование меняет строки и столбцы.)

Перемножьте данные матрицы по правилам вычисления матриц и поэлементно. Сравните полученные результаты.

Задание 3.

Построить на одной сетке графики экспоненциальных функций с различными коэффициентами.

Построить на новой сетке графики затухающих гармонических колебаний с различными коэффициентами:

В полярной системе координат построить свёртывающуюся спираль с различными коэффициентами;

Создать синусоидную и косинусоидную матрицы и построить в 3-х мерной плоскости график суммы этих двух функций (интервал переменной можно задать от –10 до 10 с шагом 0,2.

Дьяконов В.П. Справочник по применению системы MatLab – М., 1993г.. 112стр.

Всемирнова Е. Информатика. Учебное пособие.-:СПб, ГУАП

Некоторые справочные сведения по применению системы MatLab

Команда L=length(x) возвращает длину вектора х.

Точка используется и для указания поэлементных операций умножения и деления матриц.

Y=A*B - умножение матриц A и B по правилам матричной алгебры.

Y=A.*B - перемножает одноименные элементы матриц А и В.

>> S=[1 8 -31 80 94 -20]

1 8 -31 80 94 -20

>> roots(S) – решение заданного многочлена:

где ans—название результирующей переменной по умолчанию.

Операции с матрицами можно выполнять по правилам вычисления матриц, а так же выполнять действия по элементно – сравните:

Читайте также: