Hallo, ich habe in Matlab ein 2d-Vektorfeld in Form eines Arrays vorliegen. Die einzelnen Vektoren(dx|dy) haben ihren Startpunkt (x|y): dx = Array(x,y,1); dy = Array(x,y,1). Wie kann ich das in Matlab darstellen? Quiver geht nicht, da hier ein Meshgrid benötigt wird. Jemand eine Idee?
Ich verstehe leider noch nicht genau, wie deine Daten aussehen. Du hast zwei Vektoren dx und dy mit den Gradienten? An welchen Koordinaten sollen die ausgewertet werden? Sollten x und y kein grid sein, kannst du ja eins mit
1 | [X Y]=meshgrid(x,y) |
erzeugen, aber das weißt du vermutlich schon ;-) Wenn es nur darum geht, die Vektoren zu Matrizen zu machen, ist reshape dein Freund. Schreib mal ruhig in matlab Syntax hin was du hast, vllt auch mit den Dimensionen :) Schöne Grüße, Jan
:
Bearbeitet durch User
Also ich habe ein 3-dimensionales Array berechnet, in dem Index 1 für die x-koordinate steht, Index 2 für die y-koordinate des startpunktes der einzelnen Vektoren und der 3. Index unterteilt in dx und dy, also die Komponenten der Vektoren. Der Eintrag ist die Länge der Komponente. Jetzt suche ich eine Möglichkeit dies in matlab darstellen zu können. Ich bin gerade unterwegs deshalb kann ich den Code nicht sofort reinstellen.
:
Bearbeitet durch User
Ich muss ein meshgrid erzeugen, das zu meinem Array passt und die zugehörige Matrix dann mit dem meshgrid und meinem Array berechnen öder?
Problem erledigt, ich habs jez zum laufen gebracht. Es geht um die Visualisierung des Magnetfeldes einer bewegten Ladung. Einerseits soll die Richtung des Feldes mit Vektoren angezeigt werden und außerdem die Intensität zusätzlich mit einer Einfärbung. Das berechnete Feld liegt in einem Array vor. Ich musste erst ein meshgrid und die zugehörigen Matrizen erzeugen. In die Matrizen mussten die Werte aus dem Array umsortiert werden. Trotzdem vielen Dank für die Hilfe!
Ist das schon Matlab 2014b? Und irgendwie weicht die Aufgabenstellung etwas von oben ab ;-) Ich fragte ja mehrmals, wie die Daten angeordnet sind und schrieb auch, dass du vermutlich ein meshgrid erzeugen musst. Wieso musstest du was umordnen?
Ja is 2014b. Das Problem ist, dass ich mehr Vektoren für die intensitätswerte (einfärbung) berechnet habe als ich für die angezeigten Vektoren brauche. Deshalb musste ich das Array auf das meshgrid skalieren. Ist eig keine große Sache, aber so viel hab ich mit matlab noch nicht gemacht.
M. M. schrieb: > Problem erledigt, ich habs jez zum laufen gebracht. Es geht um die > Visualisierung des Magnetfeldes einer bewegten Ladung. Einerseits soll > die Richtung des Feldes mit Vektoren angezeigt werden und außerdem die > Intensität zusätzlich mit einer Einfärbung. Das berechnete Feld liegt in > einem Array vor. Ich musste erst ein meshgrid und die zugehörigen > Matrizen erzeugen. In die Matrizen mussten die Werte aus dem Array > umsortiert werden. Trotzdem vielen Dank für die Hilfe! Evtl. möchtest Du Deine Lösung als Matlab Codebeispiel zeigen, damit andere lernen können? Würde mich auch interessieren.
clc; close all; clear var; clear; %input data Q1=[-2.1 -2.1 0]; charge1=3; direction1=[1 0 0]; speed1=1; Q2=[2.1 2 -2]; charge2=7; direction2=[0 0.2 1]; speed2=-1.4; %options FEM z=0; xmax=10; ymax=10; dotsx=100; Bmax=1; vectors=30; %calculate constants dx = xmax/dotsx; dotsy = ymax/dx; velocity1=(direction1/norm(direction1))*speed1; velocity2=(direction2/norm(direction2))*speed2; %create array B[x,y,B] and directionB[x,y,dx,dy] B = zeros(dotsx, dotsy); directionB = zeros(dotsx, dotsy, 3); %loop x for i=1:(xmax/dx) %loop y for ii=1:(ymax/dx) %calculate B(x,y) x=(i*dx-xmax/2); y=(ii*dx-ymax/2); OP=[x y z]; %calculate field of Q1 OPQ1=Q1-OP; distance=norm(OPQ1); velocityorthogonal1=velocity1-(((OPQ1/distance)*velocity1')*(OPQ1/distan ce)); BintensityQ1 = (charge1*norm(velocityorthogonal1))/distance^2; %calculate direction x,y dVector1=cross(OPQ1,velocity1)/norm(cross(OPQ1,velocity1)); %calculate field of Q2 OPQ2=Q2-OP; distance=norm(OPQ2); velocityorthogonal2=velocity2-(((OPQ2/distance)*velocity2')*(OPQ2/distan ce)); BintensityQ2 = (charge2*norm(velocityorthogonal2))/distance^2; %calculate direction x,y dVector2=cross(OPQ2,velocity2)/norm(cross(OPQ2,velocity2)); %add fieldx dVector=dVector1*BintensityQ1+dVector2*BintensityQ2; dVectorlog=(dVector/norm(dVector))*log(norm(dVector+1)); directionB(i,ii,1)=dVectorlog*[1 0 0]'; directionB(i,ii,2)=dVectorlog*[0 1 0]'; directionB(i,ii,3)=dVectorlog*[0 0 1]'; if 0 < dVector(3) B(ii,i) = norm(dVector); else B(ii,i) = -norm(dVector); end if Bmax < abs(B(ii,i)) if 0>B(ii,i) B(ii,i) = -Bmax; else B(ii,i) = Bmax; end end end end %create meshgrids [X1,Y1,Z1]=meshgrid(0:xmax/dotsx:xmax,0:ymax/dotsy:ymax,0); [X2,Y2,Z2]=meshgrid(xmax/(vectors*2):xmax/vectors:xmax,ymax/(vectors*2): ymax/vectors:ymax,0); %x2 for i=1:vectors %y2 for ii=1:vectors accx=fix(-dotsx/(vectors*2)+i*dotsx/vectors); accy=fix(-dotsy/(vectors*2)+ii*dotsy/vectors); Valuesdx(ii,i)=directionB(accx,accy,1); Valuesdy(ii,i)=directionB(accx,accy,2); Valuesdz(ii,i)=directionB(accx,accy,3); end end figure(1); axis on axis([0 xmax 0 ymax -xmax/2 xmax/2]) hold on h1 = surf(X1,Y1,Z1,B); h2 = quiver3(X2,Y2,Z2,Valuesdx,Valuesdy,Valuesdz) colormap jet xlabel('x'); ylabel('y'); zlabel('B'); set(h1, 'FaceAlpha', 0.8, 'EdgeAlpha', 0.0) set(h2, 'color', [0 0 0]) colorbar; clc;
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.