2016-04-28 10 views
0

Ich habe u1 v1 w1 (Geschwindigkeitskomponenten) volumetrische Daten. Die Größe von u1 ist NxNxN (N ist 100) und dasselbe gilt für v1 und w1.Matlab, Cross Produkt Multi Dim Matrix

Ich habe noch einen Fall von u2, v2, w2, jeder der Größe NxNxN. Beide Datensätze stammen aus TriScatteredInterp und Meshgrid. Grundsätzlich habe ich Stromlinien für diese beiden Fälle gezeichnet und möchte nun sehen, wie groß die Abweichung zwischen diesen Stromlinien ist (von Fall 1 zu 2). Ich muss den Winkel zwischen ihnen an den durch meshgrid gegebenen Punkten finden. Aber Cross-Produkt wird nicht funktionieren (A und B müssen mindestens eine Dimension der Länge 3 haben). Vielen Dank

+2

'acos' des Skalarprodukts? Wie in acos (u1. * U2 + v1. * V2 + w1. * W2) ./ sqrt ((u1.^2 + v1.^2 + w1.^2). * (U2.^2 + v2.^2 + w2.^2)) oder etwas. –

+0

Danke Andras ... Ich werde es versuchen ... vielen Dank – Bineet

+0

Beachten Sie, dass Sie das Kreuzprodukt manuell auf die gleiche Weise berechnen können. Das Kreuzprodukt von '(x1, y1, z1)' mit '(x2, y2, z2)' ist einfach '(y1 * z2-z1 * y2, z1 * x2-x1 * z2, x1 * y2-y1 * x2) ', gib oder nimm ein paar Zeichen. –

Antwort

1

der Winkel gefunden

, lassen sich mit
angle = atan2(norm(cross(a,b)),dot(a,b)) 

[mit Vier-Quadranten-Arkustangens]; aber für meinen Fall funktioniert der Kreuzproduktteil nicht als die Größe jeder Geschwindigkeitskomponente in 100x100x100.

Mithilfe der Concatenate-Funktion von Matlab können die drei Komponenten Velocity1 und Velocity2 kombiniert werden, um eine Matrix mit der Größe NxNxNx3 zu erhalten. Nun kann für jedes Tripel/Kombination von V1 (u1, v1, w1) und V2 (u2, v2, w2) ein Kreuzprodukt (nennen wir es C) in der vierten Dimension genommen werden, was zu einer Matrix mit der Größe NxNxNx3 führt. Um in der oben genannten Formel die Größe/Norm des Ergebnisses des Kreuzprodukts zu erhalten, müssen wir das Skalarprodukt von C mit C selbst in der 4. Dimension und der Quadratwurzel nehmen, um die Größe zu erhalten und seine Größe wieder zu NxNxN zu machen. so schließlich kann es 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)); 

Diese Lösung wird von Herrn Roger Stafford (Matlab-Website) und alle Kredite geht an ihn gegeben erfolgen.

Antwort finden Sie hier .. gefunden http://fr.mathworks.com/matlabcentral/answers/281635-cross-product-multi-dim-data

+0

Wenn ich "selbst antworten" meinte, meinte ich, eine korrekte, vollständige Antwort gemäß den Standards von Stack Overflow zu geben :) Antworten, die nur Links enthalten, sind von sehr geringer Qualität und haben eine hohe Wahrscheinlichkeit, gelöscht zu werden. Bitte fügen Sie alle relevanten Informationen zu Ihrer Antwort hinzu, so dass die Frage und Antwort, wie sie hier sind, lehrreich und nützlich sind. –

+0

Ok, ich werde es tun. Ich entschuldige mich für meine Ignoranz. – Bineet

+0

Mach dir keine Sorgen, was zählt ist, dass du hier bist, um etwas beizutragen und dass du bereit bist, es richtig zu machen :) Danke. Willkommen bei Stack Overflow! –