Как рассчитать перекрестный продукт в R


Предполагая, что у нас есть вектор A с элементами (A 1 , A 2 , A 3 ) и вектор B с элементами (B 1 , B 2 , B 3 ), мы можем вычислить векторное произведение этих двух векторов как:

Перекрестное произведение = [(A 2 *B 3 ) - (A 3 *B 2 ), (A 3 *B 1 ) - (A 1 *B 3 ), (A 1 *B 2 ) - (A 2 *B 1 )]

Например, предположим, что у нас есть следующие векторы:

  • Вектор А: (1, 2, 3)
  • Вектор B: (4, 5, 6)

Мы могли бы вычислить векторное произведение этих векторов как:

  • Перекрестное произведение = [(A 2 *B 3 ) - (A 3 *B 2 ), (A 3 *B 1 ) - (A 1 *B 3 ), (A 1 *B 2 ) - (A 2 *B 1 )]
  • Кросс-произведение = [(2*6) – (3*5), (3*4) – (1*6), (1*5) – (2*4)]
  • Перекрестное произведение = (-3, 6, -3)

Вы можете использовать один из следующих двух методов для вычисления векторного произведения двух векторов в R:

Способ 1: используйте функцию cross() из пакета pracma

library (pracma)

#calculate cross product of vectors A and B
cross(A, B)

Способ 2: Определите свою собственную функцию

#define function to calculate cross product 
cross <- function (x, y, i=1:3) {
 create3D <- function (x) head (c(x, rep (0, 3)), 3)
 x <- create3D(x)
 y <- create3D(y)
 j <- function (i) (i-1) %% 3+1
 return (x[j(i+1)]\*y[j(i+2)] - x[j(i+2)]\*y[j(i+1)])
}

#calculate cross product
cross(A, B)

В следующих примерах показано, как использовать каждый метод на практике.

Пример 1: Использование функции cross() из пакета pracma

В следующем коде показано, как использовать функцию cross() из пакета pracma для вычисления перекрестного произведения двух векторов:

library (pracma)

#define vectors
A <- c(1, 2, 3)
B <- c(4, 5, 6)

#calculate cross product
cross(A, B)

[1] -3 6 -3

Взаимное произведение оказывается (-3, 6, -3) .

Это соответствует перекрестному произведению, которое мы вычислили ранее вручную.

Пример 2: Определите свою собственную функцию

В следующем коде показано, как определить собственную функцию для вычисления векторного произведения двух векторов:

#define function to calculate cross product 
cross <- function (x, y, i=1:3) {
 create3D <- function (x) head (c(x, rep (0, 3)), 3)
 x <- create3D(x)
 y <- create3D(y)
 j <- function (i) (i-1) %% 3+1
 return (x[j(i+1)]\*y[j(i+2)] - x[j(i+2)]\*y[j(i+1)])
}

#define vectors
A <- c(1, 2, 3)
B <- c(4, 5, 6)

#calculate cross product
cross(A, B)

[1] -3 6 -3

Взаимное произведение оказывается (-3, 6, -3) .

Это соответствует перекрестному произведению, которое мы рассчитали в предыдущем примере.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в R:

Как рассчитать скалярный продукт в R
Как создать матрицу идентичности в R
Как создать пустую матрицу в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.