2016-04-28 2 views
0

J'ai des données volumétriques u1 v1 w1 (composants de vitesse). La taille de u1 est NxNxN (N vaut 100) et la même chose est vraie frol v1 et w1.Matlab, produit croisé Multi Dim matrice

J'ai encore un cas de u2, v2, w2, chacun de taille NxNxN. ces deux ensembles de données sont obtenus à partir de TriScatteredInterp et meshgrid. Fondamentalement, je ai tracé des lignes de courant pour ces deux cas et maintenant je veux voir combien d'écart est-il entre ces lignes de courant (du cas 1 à 2.). J'ai besoin de trouver l'angle entre eux aux points donnés par meshgrid. Mais le travail croisé ne fonctionnera pas (A et B doivent avoir au moins une dimension de longueur 3.) .. toute suggestion ?? Merci beaucoup

+2

'acos' du produit scalaire? Comme dans 'acos (u1. * U2 + v1. * V2 + w1. * W2) ./ sqrt ((u1.^2 + v1.^2 + w1.^2). * (U2.^2 + v2.^2 + w2.^2)) 'ou quelque chose. –

+0

Merci Andras ... Je vais essayer ... merci beaucoup – Bineet

+0

Notez que vous pouvez calculer le produit croisé manuellement de la même manière. Le produit croisé de '(x1, y1, z1)' avec '(x2, y2, z2)' est simplement '(y1 * z2-z1 * y2, z1 * x2-x1 * z2, x1 * y2-y1 * x2) ', donner ou prendre quelques signes. –

Répondre

1

l'angle peut être trouvé en utilisant

angle = atan2(norm(cross(a,b)),dot(a,b)) 

[en utilisant la tangente à quatre quadrants inverse]; mais pour mon cas, la partie produit croisé ne fonctionnera pas comme la taille de chaque composant de vitesse dans 100x100x100. En utilisant la fonction de concaténation de Matlab, les trois composantes de Velocity1 et Velocity2 peuvent être combinées pour aboutir à une matrice de taille NxNxNx3. Maintenant, pour chaque triplet/combinaison de V1 (u1, v1, w1) et de V2 (u2, v2, w2), le produit croisé (appelez C) peut être pris en 4ème dimension, ce qui donne une matrice de taille NxNxNx3. Dans la formule mentionnée ci-dessus, pour avoir la grandeur/norme du résultat de produit croisé, nous devons prendre le produit scalaire de C avec C lui-même en 4ème dimension et le racine carrée pour obtenir la grandeur et rendre sa taille à NxNxN. donc finalement il peut être fait like--

A = cat(4,u1,v1,w1); % Combine the three components in the 4th dimension 
    B = cat(4,u2,v2,w2); % Ditto 
    C = cross(A,B,4); % Take the cross products there. 
    ang = atan2(sqrt(dot(C,C,4)),dot(A,B,4)); 

Cette solution est donnée par M. Roger Stafford (site web Matlab) et tout le crédit va à lui.

réponse se trouve ici .. http://fr.mathworks.com/matlabcentral/answers/281635-cross-product-multi-dim-data

+0

Quand je voulais dire «répondre moi-même», je voulais dire donner une réponse correcte et complète selon les standards de Stack Overflow :) Les réponses qui contiennent uniquement des liens sont de très mauvaise qualité et ont de fortes chances d'être effacées. Veuillez ajouter toutes les informations pertinentes à votre réponse, afin que la question et la réponse telles qu'elles sont ici soient instructives et utiles. –

+0

Ok, je le ferai. Mes excuses pour mon ignorance. – Bineet

+0

Ne vous inquiétez pas à ce sujet, ce qui importe est que vous êtes ici pour contribuer et que vous êtes prêt à le faire correctement :) Merci. Bienvenue sur Stack Overflow! –