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

Способы задания векторов

Как мы уже знаем, вектор – это одномерный массив данных. Вектор в ML – это матрица из одного столбца или одной строки. Вектор может быть вектором-столбцом или вектором-строкой.

Для задания вектора в системе ML можно воспользоваться одним из приведенных ниже способов.

1. Можно задать значения вектора поэлементно, записав:

<имя пер.>=[<значение1> <значение2> ….<значениеN>]

Например,

>>P=[3 5 7 12]

Значения элементов записываются через пробел или через запятую.

В результате выполнения этой команды создается вектор-строка:

P =

3 5 7 12

Если записать:

P=[3 5 4.15e-5 12]

получим:

P =

3.0000 5.0000 0.0000 12.0000

Выводится 0, т.к. по умолчанию установлен формат Short. Для вывода с большей точностью необходимо установить другой формат отображения.

Если при задании вектора значения элементов разделить точкой с запятой, то получим вектор-столбец:

<<A=[1; 2; 3]

A=

   1

   2

   3

Элементы вектора можно задавать выражениями. Например,

>>B=[5+5^2 4-1 2*4-2]

B =

30 3 6

В таком случае элементы вектора для большей наглядности лучше разделять запятой.

B=[5+5^2, 4-1, 2*4-2]

B =

30 3 6

2. Если элементы вектора являются арифметической прогрессией, то можно задать вектор так:

<имя пер.>=<нач. значение>:<шаг>:<конечное значение>

Например,

>> X=0:4: 25

В результате будет сформирован вектор со значениями:

X =

0 4 8 12 16 20 24

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

>>Х = 1: 5

X =

1 2 3 4 5

Чтобы изменить форму вектора (в данном случае из вектора-строки получить вектор-столбец), можно использовать операцию транспонирования. Для этого надо записать Х’ – тогда вектор примет форму столбца.

Например,

>> Х=X'

Х =

1

2

 3

 4

 5

3. Также для формирования арифметической прогрессии можно использовать функцию linspace:

linspace (<нач. значение>,<кон. значение>,<кол. значений>)

Например,

>>B=linspace(0,pi,5)

B =

    0 0.7854 1.5708 2.3562 3.1416

Для доступа к элементу вектора необходимо указать его имя и в круглых скобках номер элемента. Например, D(3). Для обращения к последнему элементу вектора, если неизвестна его длина, можно записать: D(length(D)) или D(end).

length – функция, определяющая размер вектора.

Задание матриц

При задании матриц данные строк записываются через пробел или через запятую. Элементы разных строк разделяются знаком точка с запятой (;) или записываются каждая с новой строки.

Зададим матрицу:

>> A=[1 2 3; 4 5 6;7 8 9]

A =

1 2 3

4 5 6

7 8 9

Или

>> A=[1 2 3

       4 5 6

       7 8 9]

A =

1 2 3

4 5 6

7 8 9

Как мы уже знаем, обращение к элементу матрицы будет иметь следующий вид: <имя> (<индексы через запятую>), например, А (2,3).

Операции

Как уже говорилось, в ML можно не только выполнять обычные арифметические операции над числами и вычислять значения функций, но и производить операции над векторами и матрицами.

Для матриц Матлаб определяет операции:

Сложение и вычитание матриц

Умножение матрицы на число

Умножение матрицы на матрицу

Транспонирование, деление

Над матрицами возможны поэлементные операции и матричные, соответствующими правилам матричного исчисления.

При поэлементном умножении и делении матрицы должны быть одинаковых размеров. При матричных операциях их размеры должны быть согласованы. При умножении матриц число столбцов первой матрицы должно быть равно числу строк второй. Результат операций – матрица.

Все арифметические операции являются “матричными” и осуществляются по правилам матричной алгебры. ( В ML возможно как выполнять операции поэлементной обработки, так и использовать операции, соответствующие правилам матричного исчисления.)

Кроме уже известных +, -, *, / и ^, в ML существуют операции транспонирования (ʹ) и обратного деления (\).

Зададим исходные матрицы:

>> A=[1 2 3; 4 5 6]

A =

1 2 3

4 5 6

 

>> B=[1 1 1; 1 1 1]

B =

1 1 1

1 1 1

 

Например, транспонирование

>> A'

ans =

1 4

2 5

3 6

 

>> C= B'

C =

1 1

1 1

1 1

Если матрица содержит комплексные числа, то кроме транспонирования по операции ʹ выполняется комплексное сопряжение элементов.

Сложение и вычитание (по правилам матричной алгебры – поэлементно)

>> E=A+B       % Размеры матриц должны совпадать

E =

2 3 4

5 6 7

Умножение ( по правилам матричной алгебры)

Умножение матриц. При умножении A*B должно выполняться условие: число столбцов матрицы A равно числу строк матрицы B:

 

A(n, m) * B(m, k) → C(n, k)

 

Элементы результирующей матрицы вычисляются по правилу: каждый элемент строки матрицы A умножается на соответствующий элемент столбца матрицы B, затем произведения складываются и получается один элемент матрицы С:

 

При использовании операций над матрицами (и векторами) необходимо соблюдать правила согласования их размеров. Например, можно перемножить матрицу A размера 2х3 на матрицу C размера 3х2, т.к. они согласованы по размеру.

>> Y=A*C       %Размеры матриц должны согласовываться

Y =

6 6

15 15

Если попытаться перемножить две матрицы в наших примерах, матрицу A (размер 2х 3) и матрицу B (размер 2 х3), то будет выведено сообщение об ошибке:

>> X=A*B          %размеры не согласованы

??? Error using ==> *

Inner matrix dimensions must agree.

Возведение в степень. Если возвести матрицу A в квадрат, то выдается сообщение об ошибке.

>> Z=A^2       % A^2=A*A

??? Error using ==> ^

Matrix must be square.

Матричное возведение в степень возможно только для квадратных матриц.

Например,

>> Z=[1 2;3 4]

Z =

1 2

3 4

>> Z^2

ans =

7 10

15 22

При необходимости поэлементного выполнения операций над матрицами и векторами перед знаками операций ^, *, /, \ следует ставить точку:.^,.*,./,.\

  При поэлементном умножении матриц результат получается другой:

Например,

>> X=A.*B % Размеры матриц должны совпадать. У нас обе матрицы одинакового размера 2х3.

X =

1 2 3

4 5 6

Поэлементное возведение в степень:

>> Z=A.^2

Z =

1 4 9

16 25 36

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

Деление (правое и левое). В ML имеются две разновидности операции деления матриц: правое (/) и левое (\).

Операция левого деления – это «обратное деление»

Правое (обычное) деление:

>> Z=A./B

Z =

1 2 3

4 5 6

Поэлементное обратное деление (.\) – деление 2-го операнда на первый. Для наших матриц:

>> Z=B.\A

Z =

1 2 3

4 5 6

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

В матричной алгебре

X= B/A = B*A-1 (решает уравнение X*A=B)

X= B\A = B-1 *A    

X= A\B = A-1 *B (решает уравнение A*X=B)

С помощью этой операции решается система линейных уравнений.

С векторами и матрицами – иначе. Пусть A – матрица, а Х – вектор. А * Х = В и Х * А = В – разные уравнения.

Для решения уравнения Х * А = В используется обычное деление:

Х = B / A = В *А-1

Для решения уравнения А * Х = В  используется обратное деление:

Х = А \ В = А-1 * В

Операция обратного деления используется для решения системы линейных уравнений. Например:

2x1 + 3x2 = 11

3x1 – 4x2 = 8

A – матрица коэффициентов левой части.

B – вектор правых частей.

Решается уравнение вида A*X=B:

 

>> A=[2 3;3 -4];

>> B=[11 8 ];

>> Х=A\B'

Х =

4.0000

1.0000

 

Для проверки можно выполнить умножение A*X:

 

>> A*X

ans =

11.0000

8.0000

 

В результате получили вектор правых частей, что доказывает правильность найденного решения.

 

Также возможно умножение и деление матрицы на число, результат – матрица.

>> Z=2*A

Z =

2 4 6

8 10 12

Операции отношения используются для поэлементного сравнения двух операндов (чисел, матриц, векторов одинакового размера). Результатом операции отношения может быть соответственно число, матрица или вектор, состоящие из элементов, обозначающих «истина» или «ложь». В ML это 1 и 0 соответственно:

>>A=[1 0 3; -2 5 -6];

>> B=[8 -9 1; 7 2 2];

>> A>B

ans =

0 1 1

0 1 0

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

То же самое можно сказать о логических операциях. Логические операции могут использоваться для выполнения поэлементных логических операций над векторами и матрицами одинаковых размеров. К ним относятся логическое И(&), логическое ИЛИ (|), логическое НЕ (~).

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

>> F=log(A)

F =

    0        0.6931 1.0986

1.3863 1.6094 1.7918

>> E=2*sin(A.^2)

E =

1.6829 -1.5136 0.8242

-0.5758 -0.2647 -1.9836

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

 

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

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

Векторное исчисление предусматривает следующие операции над векторами: сложение и вычитание векторов одинакового размера, транспонирование векторов, умножение и деление вектора на число, вектора на вектор (одинакового размера, если один из них вектор–столбец, другой – вектор–строка или наоборот), скалярное и векторное произведение векторов. (векторное произведение выполняется для векторов длиной 3)

Операция + и - определена только для сложения/ вычитания одинаковых векторов (можно суммировать или вычитать вектор - строки или вектор – столбцы одинаковой длины).

Зададим 2 вектора:

>> X=[1 2 3]; %Исходные данные

>> Y=[4 5 6];

>> X+Y

ans =

5 7 9

Транспонирование

>> X'

ans =

1

2

3

Умножение вектора на число осуществляется обычной операцией *

>> b=5;

>> X*b

ans =

5 10 15

>> b*X

ans =

5 10 15

Деление вектора на число производится операцией обычного деления (/). Деление числа на вектор невозможно.

>> X/b

ans =

0.2000 0.4000 0.6000

При делении числа на вектор- ошибка

>> b/X

??? Error using ==> mldivide

Matrix dimensions must agree.

Произведение 2-х векторов в математике можно вычислить только если они имеют одинаковую длину. Если один вектор-строка, а другой вектор-столбец, то   результат – число.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: