R - Compute Cross Product of Vectors (Physics)

后端 未结 5 1898
半阙折子戏
半阙折子戏 2021-01-05 20:49

What am I doing wrong?

> crossprod(1:3,4:6)
     [,1]
[1,]   32

According to this website:http://onlinemschool.com/math/assistance/vecto

相关标签:
5条回答
  • 2021-01-05 21:04

    crossprod does the following: t(1:3) %*% 4:6

    Therefore it is a 1x3 vector times a 3x1 vector --> a scalar

    0 讨论(0)
  • 2021-01-05 21:07
    crossProduct <- function(ab,ac){
      abci = ab[2] * ac[3] - ac[2] * ab[3];
      abcj = ac[1] * ab[3] - ab[1] * ac[3];
      abck = ab[1] * ac[2] - ac[1] * ab[2];
      return (c(abci, abcj, abck))
    }
    
    0 讨论(0)
  • 2021-01-05 21:11

    Here is a generalized cross product:

    xprod <- function(...) {
      args <- list(...)
    
      # Check for valid arguments
    
      if (length(args) == 0) {
        stop("No data supplied")
      }
      len <- unique(sapply(args, FUN=length))
      if (length(len) > 1) {
        stop("All vectors must be the same length")
      }
      if (len != length(args) + 1) {
        stop("Must supply N-1 vectors of length N")
      }
    
      # Compute generalized cross product by taking the determinant of sub-matricies
    
      m <- do.call(rbind, args)
      sapply(seq(len),
             FUN=function(i) {
               det(m[,-i,drop=FALSE]) * (-1)^(i+1)
             })
    }
    

    For your example:

    > xprod(1:3, 4:6)
    [1] -3  6 -3
    

    This works for any dimension:

    > xprod(c(0,1)) # 2d
    [1] 1 0
    > xprod(c(1,0,0), c(0,1,0)) # 3d
    [1] 0 0 1
    > xprod(c(1,0,0,0), c(0,1,0,0), c(0,0,1,0)) # 4d
    [1]  0  0  0 -1
    

    See https://en.wikipedia.org/wiki/Cross_product

    0 讨论(0)
  • 2021-01-05 21:17

    crossprod computes a Matrix Product. To perform a Cross Product, either write your function, or:

    > install.packages("pracma") 
    > require("pracma")
    > cross(v1,v2)
    

    if the first line above does not work, try this:

    > install.packages("pracma", repos="https://cran.r-project.org/web/packages/pracma/index.html”)
    
    0 讨论(0)
  • 2021-01-05 21:21

    You can try expand.grid

    expand.grid(LETTERS[1:3],letters[1:3])
    

    Output:

     Var1 Var2
    1    A    a
    2    B    a
    3    C    a
    4    A    b
    5    B    b
    6    C    b
    7    A    c
    8    B    c
    9    C    c
    
    0 讨论(0)
提交回复
热议问题