x- und y-Werte multiplizieren < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 16:02 Fr 05.12.2014 | Autor: | calabi |
Aufgabe | clear;
j=0;
e = 1.602e-19;
w = 1e6;
r0 = 10e-4;
m = 170 * 1.66e-27;
c1 = (m * [mm] r0^2 [/mm] * w) / (4 * e);
c2 = (m * [mm] r0^2 [/mm] * w) / (2 * e);
set(gca,'FontSize',16)
[x, D] = fourdif(32,2);
for q = 0:0.01:1
a = eig(2*q*diag(cos(2*x))-D);
j=j+1;
Q(j)=q;
A1(:,j)=a(1);
A2(:,j)=a(2);
end
hold on
plot(Q,A2,'k','LineWidth',2);
plot(Q,-A1,'k','LineWidth',2);
axis([0 1 0 0.4])
ylabel('a')
xlabel('q') |
Hallo zusammen,
mit dem code weiter oben wird eine Eigenwertproblem gelöst. Als Lösung erhält man die dimensionslosen Größen a und q (siehe Schaubild).
Nun möchte ich a und q in Volt umwandeln. Dazu muss folgende Multiplikation durchgeführt werden:
[mm] U=a*c_1
[/mm]
[mm] V=q*c_2
[/mm]
Da ich den Code nicht selber geschrieben habe und ich mich mit MATLAB überhaupt nicht auskenne, würde ich euch bitten, mir zu sagen, wie ich das machen kann.
Den Code (matplot.m und fourdif.m) habe ich hier gefunden.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Datei-Anhang
[Dateianhang nicht öffentlich]
Gruß calabi
Dateianhänge: Anhang Nr. 1 (Typ: m) [nicht öffentlich] Anhang Nr. 2 (Typ: m) [nicht öffentlich] Anhang Nr. 3 (Typ: png) [nicht öffentlich]
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:31 Fr 05.12.2014 | Autor: | Marcel |
Hallo,
> clear;
> j=0;
>
> e = 1.602e-19;
> w = 1e6;
> r0 = 10e-4;
> m = 170 * 1.66e-27;
> c1 = (m * [mm]r0^2[/mm] * w) / (4 * e);
> c2 = (m * [mm]r0^2[/mm] * w) / (2 * e);
>
> set(gca,'FontSize',16)
> [x, D] = fourdif(32,2);
> for q = 0:0.01:1
> a = eig(2*q*diag(cos(2*x))-D);
> j=j+1;
> Q(j)=q;
> A1(:,j)=a(1);
> A2(:,j)=a(2);
> end
> hold on
>
> plot(Q,A2,'k','LineWidth',2);
> plot(Q,-A1,'k','LineWidth',2);
>
> axis([0 1 0 0.4])
>
> ylabel('a')
> xlabel('q')
> Hallo zusammen,
>
> mit dem code weiter oben wird eine Eigenwertproblem
> gelöst. Als Lösung erhält man die dimensionslosen
> Größen a und q (siehe Schaubild).
>
> Nun möchte ich a und q in Volt umwandeln. Dazu muss
> folgende Multiplikation durchgeführt werden:
> [mm]U=a*c_1[/mm]
> [mm]V=q*c_2[/mm]
>
> Da ich den Code nicht selber geschrieben habe und ich mich
> mit MATLAB überhaupt nicht auskenne, würde ich euch
> bitten, mir zu sagen, wie ich das machen kann.
soweit ich das sehe, genau so, wie Du es schreibst, ich würde nur die
Reihenfolge vertauschen:
U=c_1*a; V=c_2*q
Und c_1 und c_2 musst Du noch definieren. (Edit: Siehe unten!)
In Matlab ist es so:
Ist c konstant und v ein Feld (sagen wir mal mit 3 Elementen, also v=(v(1),v(2),v(3)), so ist
c*v=[c*v(1),c*v(2),c*v(3)].
Wenn Du jetzt "Vektor mal Vektor" rechnen willst, dann hat Matlab Probleme,
weil Matlab dann sagt "das ist eine Matrixmultiplikation mit nicht passenden
Dimensionen".
Du kannst aber auch die Einträge von Vektoren nur multiplizieren, indem Du
die .* -Operation verwendest. Oben kann man also auch
(c*ones(1,3)) .* v
schreiben. Hier ist das natürlich unsinnig, weil ich ja in c*ones(1,3) sowieso
diese skalare Multiplikation habe.
Aber wenn Du etwa die [mm] "Standard-euklidische-$\IR^3$-Länge" [/mm] von $v$ haben
wolltest (dafür gäbe es auch den Befehl norm(v)):
Diese könntest Du als
sqrt(sum(v.*v))
schreiben (sum bedeutet: Summiere alle Vektoreinträge!).
P.S. Ich sehe gerade: c_1 und c_2 sind ja schon als c1 bzw. c2
gegeben, also
U=c1*a; V=c2*q
P.P.S.
http://www.fbmn.h-da.de/~bierbaum/uploads/Lehre/Num.Math.1_MN_WS10_Kurzskript_zu_MATLAB.pdf
Und U bzw. V werden dann auch Felder werden, U hat die gleiche Länge
wie a und V die gleiche wie q. Mit U(1), U(2),... bzw. V(1), V(2), ... greifst Du
dann auf das 1., 2., ... Feldelement von U bzw. V zu!
Gruß,
Marcel
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:58 Fr 05.12.2014 | Autor: | Marcel |
Hallo,
ich habe jetzt mal gerade im Code geguckt. Am besten wäre es wahrscheinlich,
wenn Du direkt die Berechnung von a und q durch die von U und V ersetzen
würdest. Da man beim Plot nur auf gewisse Teile zugreift, habe ich jetzt
einfach dort mal die Einheiten geändert. Achte aber drauf, dass ich wirklich
nur bei den Plots was verändere, d.h. es gibt kein U und V-Feld.
Hänge einfach an Deinen Code
1: | figure;
| 2: | hold on;
| 3: |
| 4: | plot(c2*Q,c1*A2,'k','LineWidth',2);
| 5: | plot(c2*Q,c1*(-A1),'k','LineWidth',2);
|
an. Nach dem ersten Plot, den Du kennst wird ein zweiter Plot angezeigt.
Ich hoffe, dass das so ist, wie Du es wolltest.
Gruß,
Marcel
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 20:13 Fr 05.12.2014 | Autor: | calabi |
Hallo Marcel,
vielen Dank! Funktioniert wenn ich deine Zeilen direkt nach dem Code anhänge. Beim zweiten Plot soll allerdings die Abszisse von 0 bis 80, die Ordinate von 0 bis 12 und Fontsize=16 dargestellt werden. Mit meiner Änderung
set(gca,'FontSize',16)
figure;
hold on;
plot(c2*Q,c1*A2,'k','LineWidth',2);
plot(c2*Q,c1*(-A1),'k','LineWidth',2);
axis([0 80 0 12])
ylabel('U[V]')
xlabel('V[V]')
saveas(gcf,'plot_UV.png')
verschwinden die Kurven und die Schriftgröße wird auch nicht auf 16 geändert.
Würdest du mir bitte hier noch helfen?
Danke!
Gruß calabi
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:55 Sa 06.12.2014 | Autor: | Marcel |
Hallo calabi,
> Hallo Marcel,
>
> vielen Dank! Funktioniert wenn ich deine Zeilen direkt nach
> dem Code anhänge. Beim zweiten Plot soll allerdings die
> Abszisse von 0 bis 80, die Ordinate von 0 bis 12 und
> Fontsize=16 dargestellt werden. Mit meiner Änderung
>
> set(gca,'FontSize',16)
>
> figure;
> hold on;
>
> plot(c2*Q,c1*A2,'k','LineWidth',2);
> plot(c2*Q,c1*(-A1),'k','LineWidth',2);
>
> axis([0 80 0 12])
>
> ylabel('U[V]')
> xlabel('V[V]')
>
> saveas(gcf,'plot_UV.png')
>
> verschwinden die Kurven und die Schriftgröße wird auch
> nicht auf 16 geändert.
>
> Würdest du mir bitte hier noch helfen?
ich guck's mir - wenn ich dazu komme - heute abend mal an. Aber soweit
ich mich erinnere, waren wir nach der Umrechnung im [mm] $10^{irgendwas}$-Bereich.
[/mm]
Dann ist's doch klar, dass Du nichts mehr siehst...
Mit der Schriftgröße kann ich nochmal gucken. Manchmal muss man bei
Matlab/Octave 'ne Reihenfolge beachten, ich denke, dass Du dieses
"set(gca,...)" nach dem figure machen musst, da sich das ja auf das
"current figure" bezieht. Wenn es dann noch nicht geht, dann mach' es
nach dem plot...
Gruß,
marcel
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:27 Sa 06.12.2014 | Autor: | calabi |
Hallo Marcel,
danke für den Tipp. Wenn man "set" nach "figure" schreibt, wird die Schriftgröße geändert.
Jetzt fehlen nur noch die Kurven. Klar, wir sind nach der Umrechnung im [mm] 10^{-7} [/mm] Bereich. Ich kenne aber das Schaubild mit Kurven für sehr große Werte für U (Ordinate von 0 bis 80) und V (Abszisse von 0 bis 12). Dieses Schaubild wollte ich mit MATLAB nachvollziehen. Liegt es vielleicht daran dass wir die Umrechnung nur im "plot" durchführen und sich das U und V Feld nicht ändert? Würdest du mit bitte sagen, wie ich die Umrechnung weiter oben im code einbauen kann, so dass ich direkt in der Berechnung der Eigenwerte das U und V Feld ändere?
Danke für deine Hilfe!
Gruß calabi
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 02:16 So 07.12.2014 | Autor: | Marcel |
Hallo,
> Hallo Marcel,
>
> danke für den Tipp. Wenn man "set" nach "figure" schreibt,
> wird die Schriftgröße geändert.
>
> Jetzt fehlen nur noch die Kurven. Klar, wir sind nach der
> Umrechnung im [mm]10^{-7}[/mm] Bereich. Ich kenne aber das Schaubild
> mit Kurven für sehr große Werte für U (Ordinate von 0
> bis 80) und V (Abszisse von 0 bis 12).
Du musst aber immer gucken, was im Code steht, was denn geplottet
werden soll!
> Dieses Schaubild
> wollte ich mit MATLAB nachvollziehen. Liegt es vielleicht
> daran dass wir die Umrechnung nur im "plot" durchführen
> und sich das U und V Feld nicht ändert? Würdest du mit
> bitte sagen, wie ich die Umrechnung weiter oben im code
> einbauen kann, so dass ich direkt in der Berechnung der
> Eigenwerte das U und V Feld ändere?
Du kannst in
clear;
j=0;
e = 1.602e-19;
w = 1e6;
r0 = 10e-4;
m = 170 * 1.66e-27;
c1 = (m * $ [mm] r0^2 [/mm] $ * w) / (4 * e);
c2 = (m * $ [mm] r0^2 [/mm] $ * w) / (2 * e);
set(gca,'FontSize',16)
[x, D] = fourdif(32,2);
for q = 0:0.01:1
a = eig(2*q*diag(cos(2*x))-D);
j=j+1;
Q(j)=q;
A1(:,j)=a(1);
A2(:,j)=a(2);
end
hold on
plot(Q,A2,'k','LineWidth',2);
plot(Q,-A1,'k','LineWidth',2);
axis([0 1 0 0.4])
ylabel('a')
xlabel('q')
ja den Code ändern in
clear all; close all;
j=0;
e = 1.602e-19;
w = 1e6;
r0 = 10e-4;
m = 170 * 1.66e-27;
c1 = (m * [mm] r0^2 [/mm] * w) / (4 * e);
c2 = (m * [mm] r0^2 [/mm] * w) / (2 * e);
set(gca,'FontSize',16)
[x, D] = fourdif(32,2);
for V = c2*[0:0.01:1]
u = c1*eig(2*(V/c2)*diag(cos(2*x))-D);
j=j+1;
V(j)=V;
U1(:,j)=u(1);
U2(:,j)=u(2);
end
hold on
plot(V,U2,'k','LineWidth',2);
plot(V,-U1,'k','LineWidth',2);
%axis([0 1 0 0.4])
ylabel('u')
xlabel('v')
Aber irgendwas ist da noch faul, schau' aber mal, vielleicht siehst Du an
den Änderungen ja, was Du noch abändern musst... ("axis..." ist extra erst
mal auskommentiert)!
Gruß,
Marcel
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:14 So 07.12.2014 | Autor: | calabi |
Hallo Marcel,
ich habe nur noch in den Plots die Umrechnung eingefügt:
plot(V/c2,U2/c1,'k','LineWidth',2);
plot(V/c2,-U1/c1,'k','LineWidth',2);
Von der Skalierung her passt es jetzt, nur sieht das Schaubild jetzt ganz anders aus. Die U(V)-Kurven müssen wie die a(q)-Kurven aussehen! Ich weiß nicht wo da noch der Wurm begraben ist. Außerdem ändert sich das Schaubild nicht, wenn z.B. r0 oder [mm] \Omega [/mm] in dem Code geändert werden. Das ist doch auch ein Beweis, dass es noch nicht richtig ist.
Kannst du mir bitte erneut weiterhelfen?
Gruß calabi
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:00 So 07.12.2014 | Autor: | Marcel |
Hallo calabi,
> Hallo Marcel,
>
> ich habe nur noch in den Plots die Umrechnung eingefügt:
>
> plot(V/c2,U2/c1,'k','LineWidth',2);
> plot(V/c2,-U1/c1,'k','LineWidth',2);
>
> Von der Skalierung her passt es jetzt, nur sieht das
> Schaubild jetzt ganz anders aus. Die U(V)-Kurven müssen
> wie die a(q)-Kurven aussehen! Ich weiß nicht wo da noch
> der Wurm begraben ist. Außerdem ändert sich das Schaubild
> nicht, wenn z.B. r0 oder [mm]\Omega[/mm] in dem Code geändert
> werden. Das ist doch auch ein Beweis, dass es noch nicht
> richtig ist.
>
> Kannst du mir bitte erneut weiterhelfen?
ich weiß nicht, wann ich dazu komme. Ich hatte ja gesagt, dass da wohl
noch irgendwas so nicht stimmen kann. Das kann ich aber nur durch
Probieren rausfinden, denn einen Logikfehler habe ich so direkt nicht
gesehen, und werde den dann auch immer wieder übersehen.
Gruß,
Marcel
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:27 So 07.12.2014 | Autor: | Marcel |
Hallo,
> Hallo Marcel,
>
> ich habe nur noch in den Plots die Umrechnung eingefügt:
>
> plot(V/c2,U2/c1,'k','LineWidth',2);
> plot(V/c2,-U1/c1,'k','LineWidth',2);
da verstehe ich aber den Sinn nicht mehr: Es war doch [mm] $U=c1*a\,$ [/mm] und [mm] $V=c2*q\,.$
[/mm]
Du rechnest ja jetzt wieder das Ganze bzg. q und a zurück?
> Von der Skalierung her passt es jetzt, nur sieht das
> Schaubild jetzt ganz anders aus. Die U(V)-Kurven müssen
> wie die a(q)-Kurven aussehen! Ich weiß nicht wo da noch
> der Wurm begraben ist. Außerdem ändert sich das Schaubild
> nicht, wenn z.B. r0 oder [mm]\Omega[/mm] in dem Code geändert
> werden. Das ist doch auch ein Beweis, dass es noch nicht
> richtig ist.
>
> Kannst du mir bitte erneut weiterhelfen?
Der folgende Code funktioniert nun bei mir:
clear all; close all;
j=0;
e = 1.602e-19;
w = 1e6;
r0 = 10e-4;
m = 170 * 1.66e-27;
c1 = (m * [mm] r0^2 [/mm] * w) / (4 * e);
c2 = (m * [mm] r0^2 [/mm] * w) / (2 * e);
set(gca,'FontSize',16)
[x, D] = fourdif(32,2);
for v = c2*[0:0.01:1]
a = c1*eig(2*(v/c2)*diag(cos(2*x))-D);
j=j+1;
V(j)=v;
U1(:,j)=a(1);
U2(:,j)=a(2);
end
hold on
plot(V,U2,'k','LineWidth',2);
plot(V,-U1,'k','LineWidth',2);
%axis([0 1*c2 0 0.4*c1])
ylabel('u')
xlabel('v')
Den "axis"-Teil kannst Du einblenden. Die Größenordnung müßte nun
passen - zumindest habe ich nur das gemacht, was Du gesagt hattest!
Gruß,
Marcel
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:37 So 07.12.2014 | Autor: | Marcel |
Hallo nochmal,
> Hallo Marcel,
>
> ich habe nur noch in den Plots die Umrechnung eingefügt:
>
> plot(V/c2,U2/c1,'k','LineWidth',2);
> plot(V/c2,-U1/c1,'k','LineWidth',2);
>
> Von der Skalierung her passt es jetzt, nur sieht das
> Schaubild jetzt ganz anders aus. Die U(V)-Kurven müssen
> wie die a(q)-Kurven aussehen! Ich weiß nicht wo da noch
> der Wurm begraben ist. Außerdem ändert sich das Schaubild
> nicht, wenn z.B. r0
Bei mir ändert sich was - wenngleich es auch den Anschein hat, dass es
überwiegend die Skalierung ist. Du musst halt gucken, welche Änderung
Du bei einer r0-Änderung erwartest!
> oder [mm]\Omega[/mm]
Welches Omega? Ich finde keins!
Gruß,
Marcel
> in dem Code geändert
> werden. Das ist doch auch ein Beweis, dass es noch nicht
> richtig ist.
>
> Kannst du mir bitte erneut weiterhelfen?
>
> Gruß calabi
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:23 Mo 08.12.2014 | Autor: | calabi |
Danke, Marcel!
Das w in dem Code ist ein [mm] \Omega! [/mm]
Gruß
calabi
|
|
|
|