Verfasst am: 22.10.2012, 16:18
Titel: Matrix in for Schleife speichern und plotten
Hallo liebe Matlab Community,
der im folgenden gezeigte Code ist mein ertes Matlab Programm und noch sehr umständlich. Damit ich meine Ergebnisse auch direkt sehen kann, möchte ich die Eigenvektoren komponentenweise mit dem jeweiligen Magnetfeld B plotten (Ich bekomme dann 5 Kurven).
Dazu muss ich aber C =eigs(S) in jedem Iterationsschritt in der for-Schleife speichern.
Dies ist mein erstes Problem.
Anschließend möchte ich C(B)=eigs(S) über B plotten.
Vielleicht kann mir jemand von Euch erklären, wie ich mein Programm umschreiben muss um dies zu erreichen.
Vielen Dank
redXtream
Code:
% Eingabe des Spins disp('Geben Sie den Spin ein');
S = input('');
disp('');
% Eingabe der Nullfeldaufspaltung disp('Geben Sie den Wert der Nullfeldaufspaltung in WZ ein');
D = input('');
disp('');
% Eingabe der Rhombizität disp('Geben Sie den Wert der Rhombizität ein');
F = input('');
disp('');
% Eingabe des g-Wertes disp('Geben Sie den g-Wert in z-Richtung ein');
g = input('');
disp('');
% Eingabe des Magnetfeldes disp('');
i = (2*S)+1;
j = S*(S+1)*0.33; %Berechnung der Multipliztät i (2S+1) und j=S*(S+1)*0.33
a = S+1;
for B=0:0.05:1 for q = 1:i % linke Basis for p = 1:i %rechte Basis, wendet man Operator Sz an so kommt p heraus
a =a-1;
if(a<=-S-1)
a = S;
else
a;
end if(q==p) %Fall 1, hier muss der Operator Sz ansetzen
E(q,p)=D*a*a-D*j+ 0.4661*g*B*a;
elseif(q+2==p)% Fall 2, hier setzt der Sx Operator an
E(q,p)=D*0.5*F*(j/0.33-(a*(a+1)));
elseif(q-2 == p)% Fall 3, hier setzt der Sy Operator an
E(q,p)=D*0.5*F*(j/0.33-(a*(a-1)));
else% Ansonsten bleibt nur die Null
E(q,p)=0;
end
Eine Frage allerdings noch. Wenn ich jetzt keine verbundenen Linien haben möchte, sondern nur Punkte und alle Punkte einfarbig. Wie kann ich dies realisieren?
Nochmals Danke
Gruß
redXtream
redXtream
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.10.2012, 14:15
Titel: Error linie 53
Hallo an alle. In diesem Code liegt der folgende Fehler vor:
Error using plot
Vectors must be the same lengths.
Error in version1 (line 53)
plot(alleB, C)
Ich weiß nicht worand dies liegt. Die Programm heißt version 1
Code:
Code:
% Eingabe des Spins disp('Geben Sie den Spin ein');
S = input('');
disp('');
% Eingabe der Nullfeldaufspaltung disp('Geben Sie den Wert der Nullfeldaufspaltung in WZ ein');
D = input('');
disp('');
% Eingabe der Rhombizität disp('Geben Sie den Wert der Rhombizität ein');
F = input('');
disp('');
% Eingabe des g-Wertes disp('Geben Sie den g-Wert in z-Richtung ein');
g = input('');
disp('');
% Eingabe des Magnetfeldes disp('');
i = (2*S)+1;
j = S*(S+1)*0.33; %Berechnung der Multipliztät i (2S+1) und j=S*(S+1)*0.33
a = S+1;
alleB = 0:0.05:1 for I = 1:length(alleB) for q = 1:i % linke Basis for p = 1:i %rechte Basis, wendet man Operator Sz an so kommt p heraus
a =a-1;
if(a<=-S-1)
a = S;
else
a;
end if(q==p) %Fall 1, hier muss der Operator Sz ansetzen
E(q,p)=D*a*a-D*j+ 0.4661*g*alleB(I)*a;
elseif(q+2==p)% Fall 2, hier setzt der Sx Operator an
E(q,p)=D*0.5*F*(j/0.33-(a*(a+1)));
elseif(q-2 == p)% Fall 3, hier setzt der Sy Operator an
E(q,p)=D*0.5*F*(j/0.33-(a*(a-1)));
else% Ansonsten bleibt nur die Null
E(q,p)=0;
end
Dieser Befehl sollte dann außerhalb der for-Schleife über I stehen, weil alles auf einmal geplottet wird.
Grüße,
Harald
redXtream
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 29.10.2012, 22:15
Titel: Problem besteht immer noch
Liebe Matlab Community, lieber Harald
es ist immer noch der folgende Fehler im Code:
??? Subscripted assignment dimension mismatch.
Error in ==> Diagonalisierungsprogramm3 at 53
C(:,I) = eigs(E);
ich weiß nicht woran es liegt. Bitte helft mir weiter:
Code:
% Eingabe des Spins disp('Geben Sie den Spin ein');
S = input('');
disp('');
% Eingabe der Nullfeldaufspaltung disp('Geben Sie den Wert der Nullfeldaufspaltung in WZ ein');
D = input('');
disp('');
% Eingabe der Rhombizität disp('Geben Sie den Wert der Rhombizität ein');
F = input('');
disp('');
% Eingabe des g-Wertes disp('Geben Sie den g-Wert in z-Richtung ein');
g = input('');
disp('');
% Eingabe des Magnetfeldes disp('');
i = (2*S)+1;
j = S*(S+1)*0.33; %Berechnung der Multipliztät i (2S+1) und j=S*(S+1)*0.33
a = S+1;
alleB = 0:0.05:1 plot(alleB, C', '.k') for I = 1:length(alleB) for q = 1:i % linke Basis for p = 1:i %rechte Basis, wendet man Operator Sz an so kommt p heraus
a =a-1;
if(a<=-S-1)
a = S;
else
a;
end if(q==p) %Fall 1, hier muss der Operator Sz ansetzen
E(q,p)=D*a*a-D*j+ 0.4661*g*alleB(I)*a;
elseif(q+2==p)% Fall 2, hier setzt der Sx Operator an
E(q,p)=D*0.5*F*(j/0.33-(a*(a+1)));
elseif(q-2 == p)% Fall 3, hier setzt der Sy Operator an
E(q,p)=D*0.5*F*(j/0.33-(a*(a-1)));
else% Ansonsten bleibt nur die Null
E(q,p)=0;
end
der Fehler deutet generell darauf hin, dass eine Zuweisung mit nicht kompatiblen Dimensionen erfolgt.
Setze doch mal einen Haltepunkt in die Zeile, in der der Fehler auftritt, und schau dir C und eigs(E) an.
Falls das nicht weiterhilft, bitte die eingegebenen Parameter S,D,F,g posten.
mit diesen Parametern läuft dein Code bei mir durch. Einzige Änderung: der Plot-Befehl muss naheliegenderweise ans Ende des Codes. Man kann ja nichts plotten, was es noch gar nicht gibt.
Verfasst am: 30.10.2012, 15:19
Titel: Leider nicht
Hallo Harald,
wenn ich den Code eingebe und erneut abspeichere, dann läuft das Programm bei mir ebenfalls durch. Wenn ich dann aber folgende Parameter eingebe:
S = 2.5
D = 3
F = 0
g = 2
dann funktioniert das Programm nicht. Dies ist auch in Ordnung. Wenn ich aber dann wieder
S = 2
D = 3
F = 0.33
g = 2
eingebe. Erscheint folgender Fehler:
Subscripted assignment dimension mismatch.
Error in Test_2 (line 53)
C(:,I) = eigs(E);
Ich bin zu sehr Anfänger um aus dieser Sacher selber herauszukommen. Vielleicht nimmst du Dir kurz die Zeit und versuchst es ebenfalls.
jetzt verstehe ich, wo das Problem liegt. Nach einem Durchlauf liegt das alte C noch im Speicher, womit die Dimensionen nicht mehr zusammenpassen.
Mögliche Abhilfe:
a) als Funktion speichern
b) vor dem erneuten Ausführen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.