Hier ist eine verallgemeinerte Kreuzprodukt:
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)
})
}
Für Ihr Beispiel:
> xprod(1:3, 4:6)
[1] -3 6 -3
Diese für jede Dimension funktioniert:
> 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
Siehe https://en.wikipedia.org/wiki/Cross_product
diese Funktion ist nur '1: 3% *% 4: 6 ', nicht crossproduct in der Physik Sinne – jenesaisquoi
Ich stimme wieder zu öffnen, da die Frage scheint zu sein, wie Cross-Produkt in R zu tun und nicht darüber, was 'crossprod' tut. – nicola
@nicola Nichtsdestoweniger erklären die Antworten dort, wie man Kreuzprodukte macht ... – Frank