R で外積を計算する方法


要素 (A 1 、 A 2 、 A 3 ) を含むベクトル A と要素 (B 1 、 B 2 、 B 3 ) を含むベクトル B があると仮定すると、これら 2 つのベクトルの外積を次のように計算できます。

外積= [(A 2 *B 3 ) – (A 3 *B 2 )、(A 3 *B 1 ) – (A 1 *B 3 )、(A 1 *B 2 ) – (A 2 *B 1 )]

たとえば、次のベクトルがあるとします。

  • ベクトル A: (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 の 2 つのベクトルの外積を計算するには、2 つの方法のいずれかを使用できます。

方法1: pracmaパッケージのcross()関数を使用する

 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: pracmaパッケージのcross()関数を使用する

次のコードは、 pracmaパッケージのcross()関数を使用して 2 つのベクトル間の外積を計算する方法を示しています。

 library (pracma)
  
#definevectors
A <- c(1, 2, 3)
B <- c(4, 5, 6)
  
#calculate cross product
cross(A, B)

[1] -3 6 -3

外積は(-3, 6, -3)となります。

これは、前に手動で計算した外積に対応します。

例 2: 独自の関数を定義する

次のコードは、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)])
}

#definevectors
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 で空の行列を作成する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です