www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - x- und y-Werte multiplizieren
x- und y-Werte multiplizieren < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

x- und y-Werte multiplizieren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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.

[a]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]
        
Bezug
x- und y-Werte multiplizieren: Antwort
Status: (Antwort) fertig Status 
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

Bezug
        
Bezug
x- und y-Werte multiplizieren: Antwort
Status: (Antwort) fertig Status 
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

Bezug
                
Bezug
x- und y-Werte multiplizieren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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

Bezug
                        
Bezug
x- und y-Werte multiplizieren: Antwort
Status: (Antwort) fertig Status 
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

Bezug
                                
Bezug
x- und y-Werte multiplizieren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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

Bezug
                                        
Bezug
x- und y-Werte multiplizieren: Antwort
Status: (Antwort) fertig Status 
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

Bezug
                                                
Bezug
x- und y-Werte multiplizieren: Frage (beantwortet)
Status: (Frage) beantwortet Status 
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

Bezug
                                                        
Bezug
x- und y-Werte multiplizieren: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
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

Bezug
                                                        
Bezug
x- und y-Werte multiplizieren: Antwort
Status: (Antwort) fertig Status 
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

Bezug
                                                        
Bezug
x- und y-Werte multiplizieren: Antwort
Status: (Antwort) fertig Status 
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


Bezug
                                                                
Bezug
x- und y-Werte multiplizieren: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 10:23 Mo 08.12.2014
Autor: calabi

Danke, Marcel!

Das w in dem Code ist ein [mm] \Omega! [/mm] :-)

Gruß

calabi

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]