Come calcolare un prodotto incrociato in r


Supponendo di avere un vettore A con elementi (A 1 , A 2 , A 3 ) e un vettore B con elementi (B 1 , B 2 , B 3 ), possiamo calcolare il prodotto incrociato di questi due vettori come segue:

Prodotto incrociato = [(A 2 *B 3 ) – (A 3 *B 2 ), (A 3 *B 1 ) – (A 1 *B 3 ), (A 1 *B 2 ) – (A 2 *B 1 )]

Supponiamo ad esempio di avere i seguenti vettori:

  • Vettore A: (1, 2, 3)
  • Vettore B: (4, 5, 6)

Potremmo calcolare il prodotto incrociato di questi vettori come segue:

  • Prodotto incrociato = [(A 2 *B 3 ) – (A 3 *B 2 ), (A 3 *B 1 ) – (A 1 *B 3 ), (A 1 *B 2 ) – (A 2 *B 1 )]
  • Prodotto incrociato = [(2*6) – (3*5), (3*4) – (1*6), (1*5) – (2*4)]
  • Prodotto incrociato = (-3, 6, -3)

È possibile utilizzare uno dei due metodi per calcolare il prodotto incrociato di due vettori in R:

Metodo 1: utilizzare la funzione cross() del pacchetto pracma

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

Metodo 2: Definisci la tua funzione

 #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)

Gli esempi seguenti mostrano come utilizzare ciascun metodo nella pratica.

Esempio 1: utilizzare la funzione cross() del pacchetto pracma

Il codice seguente mostra come utilizzare la funzione cross() del pacchetto pracma per calcolare il prodotto incrociato tra due vettori:

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

[1] -3 6 -3

Il prodotto incrociato risulta essere (-3, 6, -3) .

Ciò corrisponde al prodotto incrociato che abbiamo calcolato manualmente in precedenza.

Esempio 2: Definisci la tua funzione

Il codice seguente mostra come definire la propria funzione per calcolare il prodotto incrociato tra due vettori:

 #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

Il prodotto incrociato risulta essere (-3, 6, -3) .

Ciò corrisponde al prodotto incrociato che abbiamo calcolato nell’esempio precedente.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in R:

Come calcolare il prodotto scalare in R
Come creare una matrice identità in R
Come creare una matrice vuota in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *