Длина вектора и скалярное произведение

Скалярное произведение — одно число, в котором спрятаны и длины векторов, и угол между ними.

Скалярное произведение $\vec{a} \cdot \vec{b}$ — сумма произведений соответствующих координат; результат — число, а не вектор.

Длина вектора $\vec{a} = (a_1, a_2)$ — это длина стрелки, и находится она по теореме Пифагора. Скалярное произведение — чуть более хитрая, но фантастически полезная операция: оно связывает длины и угол, и именно из него вырастают понятия проекции, ортогональности и косинусной близости.

Длина вектора

Длина (или норма) — расстояние от начала до конца стрелки:

$$\lVert \vec{a} \rVert = \sqrt{a_1^2 + a_2^2}$$

В $n$ измерениях под корнем просто стоит сумма квадратов всех координат. Это прямое обобщение теоремы Пифагора.

Скалярное произведение

Определение через координаты предельно простое:

$$\vec{a} \cdot \vec{b} = a_1 b_1 + a_2 b_2 + \dots + a_n b_n$$

А его глубокий смысл раскрывает вторая формула, связывающая его с углом $\theta$ между векторами:

$$\vec{a} \cdot \vec{b} = \lVert \vec{a} \rVert \, \lVert \vec{b} \rVert \cos\theta$$

Отсюда сразу следует важнейший факт: если $\vec{a} \cdot \vec{b} = 0$ (и векторы ненулевые), то $\cos\theta = 0$, значит угол прямой — векторы перпендикулярны.

import math

def dot(a, b):
    return sum(x * y for x, y in zip(a, b))

def length(v):
    return math.sqrt(dot(v, v))

a = [3, 4]
b = [4, -3]
print("dot(a, b) =", dot(a, b))
print("len(a)    =", length(a))
print("len(b)    =", length(b))

Вывод:

dot(a, b) = 0
len(a)    = 5.0
len(b)    = 5.0

Заметили?

Скалярное произведение получилось ровно нулём — значит $\vec{a}$ и $\vec{b}$ перпендикулярны. А длину вектора удобно выразить через само скалярное произведение: $\lVert \vec{a} \rVert = \sqrt{\vec{a} \cdot \vec{a}}$. Поэтому в коде функция length просто вызывает dot(v, v).

Как работает под капотом

Функция dot — это тот же zip по парам координат, только теперь мы их перемножаем и складываем результаты в одно число. Геометрический смысл «длины через корень из суммы квадратов» виден в length: dot(v, v) даёт $a_1^2 + a_2^2$, а корень превращает это в длину. Заметьте, что скалярное произведение симметрично ($\vec{a} \cdot \vec{b} = \vec{b} \cdot \vec{a}$) и линейно по каждому аргументу — эти свойства мы будем использовать постоянно.

Частые ошибки

  • Путать скалярное произведение с покоординатным умножением: результат скалярного произведения — одно число, а не вектор.
  • Забывать корень в формуле длины: $a_1^2 + a_2^2$ — это квадрат длины, сама длина — корень из него.
  • Считать, что нулевое скалярное произведение означает «один из векторов нулевой». Нет: чаще всего это значит, что они перпендикулярны.

Итог

  • Длина вектора — корень из суммы квадратов координат (теорема Пифагора).
  • Скалярное произведение — сумма произведений координат; результат — число.
  • $\vec{a} \cdot \vec{b} = \lVert \vec{a} \rVert \lVert \vec{b} \rVert \cos\theta$ связывает алгебру с геометрией.
  • Если скалярное произведение ненулевых векторов равно нулю — они перпендикулярны.
Проверьте себя
1. Чему равно скалярное произведение (1, 2, 3) и (4, 0, -1)?
A1
B7
C(4, 0, -3)
D0
2. Длина вектора (6, 8) равна:
A14
B10
C100
D48
3. Если скалярное произведение двух ненулевых векторов равно нулю, то они:
Aравны
Bколлинеарны (параллельны)
Cперпендикулярны
Dоба нулевые