Matlab Vektorfeld

OP #3926122
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?
#3926138
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
#3926360
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.
OP #3927220
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!
Angehängte Dateien:
#3927813
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?
#3927888
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.
Gast #3927899
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.
OP #3928424
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;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.