Qu'est-ce que R est crossproduct fonction?
Je me sens stupide de demander, mais qu'est-ce que l'intention de R crossprod
fonction de vecteur d'entrées? Je voulais calculer le produit vectoriel de deux vecteurs dans l'espace Euclidien et à tort essayé d'utiliser crossprod
.
Une définition du vecteur de la croix-produit est N = |A|*|B|*sin(theta)
où theta est l'angle entre les deux vecteurs. (La direction de N
est perpendiculaire au plan A-B). Une autre façon de calculer est N = Ax*By - Ay*Bx
.
base::crossprod
clairement ne pas faire ce calcul, et en fait le produit vectoriel produit scalaire de deux entrées sum(Ax*Bx, Ay*By)
.
Donc, je peux facilement écrire mon propre vectorxprod(A,B)
fonction, mais je ne peux pas comprendre ce que crossprod
est de faire en général.
Voir aussi R - Calculer, Produit vectoriel de Vecteurs (Physique)
- Voir la
crossprod
documentation-Vectors are promoted to single-column or single-row matrices, depending on the context.
. - Je n'ai pas lu, donc je suppose que ma question devient: est-ce qu'une bonne définition pour une matrice de la croix-produit et pourquoi n'est-il pas comme un Euclidienne du vecteur de la croix-produit?
- Merci pour cette annonce, j'ai eu la même question et il a fait de moi un fou. Si vous avez écrit
vectorxprod(A, B)
seriez-vous prêt à partager (je suppose que la réponse)? Thx. - OK, voir une nouvelle réponse.
- Un peu en retard, mais l'utilisation du terme "produit vectoriel" pour se référer à la X X la matrice est assez courante dans les statistiques (qui est, après tout, où R est venu de). C'est une construction standard de régression des applications. Googler "somme des carrés et les produits croix" peut aider.
- voir ma réponse ci-dessous pour une version simple qui fonctionne également en 3D.
Vous devez vous connecter pour publier un commentaire.
Selon la fonction d'aide de R: crossprod (X,Y) = t(X)%*% Y est une mise en œuvre plus rapide que l'expression elle-même. C'est une fonction de deux matrices, et si vous avez deux vecteurs correspond au produit scalaire. @Hong-Ooi commentaires de explique pourquoi il est appelé crossproduct.
Voici un court extrait de code qui fonctionne à chaque fois que le produit croisé de sens: la version 3D renvoie un vecteur et la version 2D retourne un scalaire. Si vous voulez juste un code simple qui donne la bonne réponse sans tirer dans une bibliothèque externe, c'est tout ce dont vous avez besoin.
Ça fonctionne?
Nous allons vérifier a tout hasard j'ai trouvé en ligne:
Semble assez bon!
Pourquoi est-ce mieux que les précédentes réponses?
L'inconvénient est que le numéro " 3 " est codé en dur à plusieurs reprises. En fait, ce n'est pas une mauvaise chose, car il met en évidence le fait que le vecteur de la croix-produit est purement une construction 3D. Personnellement, je vous recommande l'amerrissage forcé la croix des produits entièrement et l'apprentissage de l'Algèbre Géométrique à la place. 🙂
L'aide
?crossprod
l'explique très clairement. Prendre la régression linéaire par exemple, pour un modèley = XB + e
vous voulez trouverX'X
, le produit deX
transposer etX
. Pour l'obtenir, un simple appel suffira:crossprod(X)
est le même quecrossprod(X,X)
est le même quet(X) %*% X
. Aussi,crossprod
peut être utilisé pour trouver le produit scalaire de deux vecteurs.En réponse à @Bryan Hanson demande, voici quelques Q&D du code pour calculer un vecteur crossproduct de deux vecteurs dans le plan. C'est un peu messier pour calculer le général 3-espace vectoriel crossproduct, ou de les étendre à N-space. Si vous avez besoin de ceux-ci, vous devrez aller sur Wikipédia 🙂 .
RFOC::cross.prod
; dans le même colis, il y a quelques autres qui acceptent les différents formats d'entrée / sortie. Aussi,RSEIS::xprod
.R
est né. Heureusement, nous les Physiciens sont vraiment bons à faire des équations dans le code 🙂Ici est un minimaliste de mise en œuvre pour la 3D vecteurs:
Si vous voulez obtenir le scalaire "de la croix-produit" de la 2D vecteurs
u
etv
, vous pouvez le faire