Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 4. Элементы матричной алгебры

На заметку

 

 

 

 

 

 

 

 

= (a ,a

,a

 

= (b ,b ,b ) называ-

Скалярным произведением векторов a

3

) и b

 

 

 

1 2

 

 

1 2 3

ется число a

b

= a1b1 +a2b2 +a3b3 .

 

 

 

 

 

На заметку

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

Вычислить скалярное произведение можно с помощью функции dot(). Аргументы функции – векторы, для которых вычисляется скалярное произведение. Примеры приведены в документе на рис. 4.2.

Рис. 4.2. Вычисление скалярного произведения

Операция вычисления скалярного произведения коммутативна – аргументы функции dot() можно указывать в произвольном порядке. Здесь мы использовали такой код:

>>a=[1 -2 3];

>>b=[3;1;-1];

>>dot(a,b)

151

Самоучитель Matlab

ans = -2

>>dot(b,a) ans =

-2

>>dot(a,a) ans =

14

>>dot(b,b) ans =

11

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

Достаточно просто скалярное произведение вычисляется и без использования функции dot().

Рис. 4.3. Альтернативный способ вычисления скалярного произведения

Соответствующий программный код приведен ниже:

152

Глава 4. Элементы матричной алгебры

>>a*b ans =

-2

>>sum(a.*a) ans =

14

>>a*a'

ans = 14

>> sum(b.*b) ans =

11

Так, значение переменной a есть вектор-строка, а значением переменной b является вектор-столбец. Скалярное произведение можно вычислить командой a*b. Здесь, фактически, речь идет о произведении двух матриц (см. далее). В соответствии с правилом вычисления произведения матриц принципиально важно, чтобы количество столбцов первой матрицы равнялось количеству строк второй матрицы. В отношении векторов это означает, что первый вектор - это вектор-строка, а второй – вектор-столбец.

В результате выполнения команды a.*a получаем массив, элементы которого равны попарным произведениям соответствующих элементов первого и второго вектора, то есть квадратам элементов вектора a. Чтобы получить скалярное произведение (квадрат модуля вектора), используем функцию sum(). Другой способ получить тот же результат – воспользоваться командой a*a'. Здесь мы командой a' транспонировали вектор-строку, получив в результате вектор-столбец. Поэтому мы этот вектор можем умножить (указав его вторым в произведении) на вектор-строку a.

Команда sum(b.*b) вычисляется по тому же принципу, что и команда sum(a.*a), только теперь речь идет о векторах-столбцах.

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

На заметку

 

 

 

 

 

 

 

Векторным произведением двух векторов a и b является вектор c

= a

×b ,

элементы которого

вычисляются по следующему правилу. Если

векторы

 

 

 

 

 

 

a = (a1,a2,a3) и b

= (b1,b2,b3), то компоненты вектора c = (c1,c2,c3) вы-

числяются как ck

= ak +1bk +2 ak +2bk +1 . Индексы k

пробегают значения 1,

2 и 3, причем имеет место циклическая "перестановка" индекса. То есть, например, если k = 3 , то формальное значение k +1 = 4 следует заменить на 1, а значение k + 2 = 5 следует заменить на 2.

153

Самоучитель Matlab

Векторное произведение вычисляется с помощью функции cross(). Аргументами указываются векторы, для которых вычисляется векторное произведение. Векторы могут быть как строками, так и столбцами. Если среди аргументов есть вектор-строка, то результатом также будет вектор-строка. Если оба вектора являются столбцами, то результатом будет вектор-столбец. Примеры вызова функции cross() приведены в документе на рис. 4.4.

Рис. 4.4. Вычисление векторного произведения

Для удобства ниже приведен соответствующий программный код (жирным шрифтом выделен ввод пользователя):

>>a=[-1 2 1];

>>b=[2 -1 3];

>>cross(a,b) ans =

7 5 -3 >> cross(a',b) ans =

7 5 -3

154

Глава 4. Элементы матричной алгебры

>> cross(a,b') ans =

7 5 -3 >> cross(a',b') ans =

7

5 -3

Думается, что особых комментариев этот код не требует. Единственное, на

что стоит обратить внимание, – это то, что векторное произведение анти-

коммутативно, то есть b ×a = −a ×b .

На заметку

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

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

- Эти сведения недорого стоят. - Ну, какие есть.

К/ф "Клуб самоубийц, или Приключения титулованной особы"

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

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

155

Источник: https://studfile.net/preview/16433384/