Создание векторов

Существуют различные способы создания векторов и матриц. Самый простой способ задание вектора – в квадратных скобках [ ]. Например:

a = [1 4 5]
a =
   1   4   5
b = [2, 1, 0]

или b = [2,1,0] (без пробелов)

b =
   2   1   0
c = [4; 7; 10]

или c = [4;7;10] (без пробелов)

c =
    4
    7
   10

или через перенос строки:

c = [
1
2
3
]
c =
    1
    2
    3

Список чисел, разделенных пробелами или запятыми внутри квадратных скобок, определяет вектор-строку. Числа, разделенные точкой с запятой или переносом строки определяют вектор-столбец.

Можно создать вектор из уже существующего, добавив его в определение. Например:

a = [1 4 5]
a =
   1   4   5
d = [a 6]
b =
   1  4  5  6

Нотация с двоиточием

Удобный способ создания вектора из последовательных чисел — использование символа двоеточия “:”, например:

e = 2:6
e =
   2  3  4  5 6

Двоеточие указывает Matlab создать вектор чисел, начиная с первого числа и заканчивая вторым числом (включительно). Также можно добавить третье число между первым и вторым, получая a : b : c. Среднее число в этом случае задает шаг между элементами вектора.

e = 2:0.3:4
e =
    2.0000    2.3000    2.6000    2.9000    3.2000    3.5000    3.8000

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

e = 4:-0.3:2
e =
    4.0000    3.7000    3.4000    3.1000    2.8000    2.5000    2.2000

Функции создания векторов

Matlab также предлагает набор функций для создания векторов:

  • zeros(M,N) – cоздает матрицу, в которой каждый элемент равен нулю. Для вектора-строки размера n установите M = 1, N = n;
  • ones(M,N) – cоздает матрицу, в которой каждый элемент равен единице. Для вектора-строки размера n установите M = 1, N = n;
  • linspace(x1, x2, N) – cоздает вектор из N элементов, равномерно распределенных между x1 и x2;
  • logspace(x1, x2, N) – cоздаeт вектор из N элементов, логарифмически распределенных между \(10^{x1}\) и \(10^{x2}\).

Первые две функции, zeros и ones, также работают для матриц, и два аргумента функции, M и N, указывают количество строк и столбцов в матрице соответственно. Вектор-строка — это матрица, которая имеет одну строку и столько же столбцов, каков размер вектора.

Отображение больших векторов и матриц

При работе с большими векторами и матрицами полезно иметь возможность выводить результаты постранично. Для включения постраничного просмотра:

more on

Нажмите пробел (или ‘f’), чтобы просмотреть следующую страницу значений, и используйте клавишу “q”, чтобы закрыть отображение и вернуться к командной строке Matlab. Вы также можете использовать клавишу ‘b’ для прокрутки назад вверх по отображаемым значениям.

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

more off

Извлечение элементов из вектора

Индивидуальные элементы вектора извлекаются обычными скобками ( ) и нумеруются с 1, а не с 0. Создадим вектор:

a = [1:2:6 -1 0]
a =
    1   3    5    -1    0

тогда, чтобы извлечь 3-ий элемент:

a(3)
ans = 
    5

Нотация с двоеточием может использоваться для извлечения элементов индексы которых принадлежат заданному диапазону:

a(3:5)
ans = 
    5   -1   0
a(1:2:5)
ans = 
    1   5   0

Фильтрация значений вектора

v = [1 : 20];
v(mod(v, 2) == 1 & v > 10)

Выдаст нечетные числа больше 10:

ans =

    11    13    15    17    19

Операции с векторами

Сохранение чисел в одном векторе в Matlab позволяет эффективно проводить расчеты. В отличие от некоторых других Я.П., где для умножения каждого элемента на 2 нужен цикл for, в Matlab можно использовать векторные операции. Умножение всех чисел вектора на одно число сводится к умножению всего вектора на это число:

a = [1 3 5 -1 0]
a * 2
ans = 
    2   6   10   -2   0

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

Умножение двух векторов в Matlab следует правилам умножения матриц и не является поэлементным умножением. Чтобы вполнить поэлементное умножение двух векторов, Matlab определяет операторы .* и ./, например:

\[\begin{align} \begin{pmatrix} a_1 \\ a_2 \\ a_3 \\ \end{pmatrix} \space .* \space \begin{pmatrix} b_1 \\ b_2 \\ b_3 \\ \end{pmatrix} = \begin{pmatrix} a_1 * b_1 \\ a_2 * b_2 \\ a_3 * b_3 \\ \end{pmatrix} \end{align}\]

Точка перед символами указывает на поэлементную операцию. Так, элементы вектора a можно умножить на разные числа:

b = [1 2 3 4 5]
a .* b
ans = 
    1   6   15   -4   0

Оператор поэлементного возведения в степень .^ бывает полезен. Он может быть использован для возведения вектора чисел в степень или для возведения числа в разные степени, в зависимости от того, как он используется (аналогично возможно при работе с другими операторами):

b .* 2
ans = 
    1   4   9   16   25
2 .* b
ans = 
    2   4   8   16   32

В первом примере каждый элемент b возведен в квадрат; во втором число 2 возведено в степени, указанные в b.

Все поэлементные команды для векторов (+ - ./ .* .^) могут быть использованы между двумя векторами, при условии что они имеют одинаковый размер и форму. В противном случае соответствующие элементы не будут найдены, и будет выдана ошибка.

Большинство функций в Matlab работают с векторами. Например, чтобы создать список значений синуса с интервалами в 60 градусов, вам просто нужно передать вектор углов функции sin:

angles = [0:pi/3:2*pi]
angles =
        0   1.0472   2.0944   3.1416   4.1888   5.2360   6.2832
y = sin(angles)
y =
        0   0.8660   0.8660   0.0000  -0.8660  -0.8660  -0.0000

Изменение значений в векторе

Изменение одного значения

Для изменения одного конкретного элемента в векторе в Matlab указывается индекс этого элемента и присваивается новое значение. Например:

v = [1, 2, 3, 4, 5];
v(2) = 10
v =
    1   10    3    4    5

Изменение нескольких значений

Если требуется изменить несколько элементов в векторе:

v(2:4) = [20, 30, 40]
v =
    1   20   30   40    5

Изменение значений с шагом

Можно также изменять значения с определенным шагом. Например, для замены всех элементов на нечетных позициях на 0:

v(1:2:end) = 0
v =
    0   20    0   40    0

1:2:end – Эта часть создаёт новую последовательность индексов, которая начинается с первого элемента (1), увеличивается с шагом 2 и продолжается до последнего элемента (end) вектора v.

Использование условных операторов для изменения значений

Для изменения элементов, удовлетворяющих определенному условию, применяются условные операторы. Например, для замены всех элементов больше 30 на 0:

v(v > 30) = 0
v =
    0   20    0    0    0

Итерации по вектору

Пример 1. Печать каждого второго элемента в векторе

arr = [1 2 3 4 5 6];
for i = 1:2:6
    fprintf("%d ", arr(i));
end
1 3 5 
arr = [1 2 3 4 5 6];
disp(arr(1:2:end));
    1     3     5

Пример 2. Требуется сдвинуть элементы массива на одну позицию влево, а первый элемент поставить на последнее место.

arr = [1 2 3 4 5 6];
n = length(arr);
c = arr(1);
for i = 1:n-1
    arr(i) = arr(i+1);
end
arr(n) = c;
arr
arr =
    2     3     4     5     6     1
arr = [1 2 3 4 5 6];
arr = [arr(2:end) arr(1)]
arr =
    2     3     4     5     6     1