Глава 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