Вычисление угла между двумя векторами с использованием внутреннего произведения - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу создать функцию для вычисления угла между двумя векторами x, y, используя определение Внутреннего произведения как x @ A @ y, где A - положительно определенная матрица.

Моя функция следующая:

def angle(A, x, y):

    import numpy as np
    from numpy.linalg import norm

    nominator = x@A@y
    denominator = (x@A@x)*(y@A@y)

    angle = np.arccos(nominator/denominator)

    return(angle)

Однако правильный ответ не возвращается.

Например,

y = np.array([0, -1])
x = np.array([1, 1])
A = np.array([
    [1, -1/2],
    [-1/2, 5]
])
angle(A, x, y)
1.7517827780414443

Что не является правильным ответом.

1 Ответ

0 голосов
/ 11 сентября 2018

Вам необходимо взять квадратный корень из знаменателя, поскольку норма вектора v определяется как sqrt(innerprod(v, v)).Это дает вам ожидаемый ответ?

import numpy as np

def angle(A, x, y):
    nominator = x@A@y
    denominator = np.sqrt((x@A@x)*(y@A@y))
    angle = np.arccos(nominator/denominator)
    return(angle)

angle(A, x, y)
2.6905658417935308
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...