Как рассчитать перекрестный продукт в 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