plot: Punkte verbinden < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Hey,
ich möchte mittels folgendem Programm:
t=input('t: ');
x=input('x: ');
i=1;
for n=10^13:10^13:10^14;
[mm] x_i=newton(f, [/mm] df, x,n, t);
i=i+1;
figure(1)
[mm] plot(n,x_i);
[/mm]
hold on;
end
Nullstellen mittels des Newtonverfahrens berechnen, klappt auch alles wunderbar, allerdings ist die Grafik nicht wie gewünscht. Ich hätte gerne , dass er mir einen normalen 2D Plot, also als Kurve die Ergebnisse darstellt. Leider werden nur die Punkte im Plot dargestellt. Gibt es eine Möglichkeit diese zu verbinden?
mfg piccolo
PS: '-' bringt leider nichts, wenn ich es im Plotbefehl mit eingebe
|
|
|
|
Hallo piccolo86,
wenn du den Plot-befehl ausserhalb der Schleife setzt, dann wird Matlab die Kurve interpolieren.
Du gibst ja in jedem Schleifendurchlauf nur den Befehl einen Punkt zu plotten, und die Grafik offen zu halten. Du müsstest dann natürlich die einzelnen Iterationswerte in einem Array (oder Vektor) speichern, z.B. x(i) = ...
...
end
plot(n,x),grid;
Gruß Christian
|
|
|
|
|
> müsstest dann natürlich die einzelnen Iterationswerte in
> einem Array (oder Vektor) speichern, z.B. x(i) = ...
Hey, könntest du mir vllt. noch kurz erläutern, wie ich die Werte in einem Vektor speichern kann?
mfg piccolo
|
|
|
|
|
Hi,
hatte ich doch geschrieben! x(i) = ....
schreibt an die i-te Stelle des Vektors x den aktuellen Wert. Wenn du dann die Schleife verlässt, kannst du dir den Vektor ausgeben lassen, indem du einfach x eintipperst. Plotten mit plot(i,x)
Gruß Christian
|
|
|
|
|
> Hi,
>
> hatte ich doch geschrieben! x(i) = ....
> schreibt an die i-te Stelle des Vektors x den aktuellen
> Wert. Wenn du dann die Schleife verlässt, kannst du dir
> den Vektor ausgeben lassen, indem du einfach x eintipperst.
> Plotten mit plot(i,x)
>
> Gruß Christian
Hey,
danke für den Tipp, funktioniert jetzt super mit dem plotten. Allerdings habe ich mir überlegt, dass ich diese Schleife gerne über mehrere Werte für t durchlaufen lassen würde, also es würde wie z.B. folgt aussehen:
i=0;
j=0;
for t=5:5:50;
j=j+1;
for n=10^13:10^13:10^14;
i=i+1;
[mm] x_i=newton(f, [/mm] df, x,n, t);
[mm] x=x_i;
[/mm]
[mm] xvector(i)=x_i;
[/mm]
nvector(i)=n;
end
-> Hier müsste der Plot rein<-
end
Ich hätte also noch sowas, wie eine Abhängigkeit von j, bzw. ich würde ja für jedes j einen anderen x Vektor erhalten. Gibt es da auch eine Möglichkeit diesen Index mit einzubauen, sodass mir immer wieder ein neues Bild geplottet wird. Oder müssen die Daten dann als Matrix abgespeichert werden??
mfg piccolo
|
|
|
|
|
> > Hi,
> >
> > hatte ich doch geschrieben! x(i) = ....
> > schreibt an die i-te Stelle des Vektors x den aktuellen
> > Wert. Wenn du dann die Schleife verlässt, kannst du dir
> > den Vektor ausgeben lassen, indem du einfach x eintipperst.
> > Plotten mit plot(i,x)
> >
> > Gruß Christian
>
> Hey,
> danke für den Tipp, funktioniert jetzt super mit dem
> plotten. Allerdings habe ich mir überlegt, dass ich diese
> Schleife gerne über mehrere Werte für t durchlaufen
> lassen würde, also es würde wie z.B. folgt aussehen:
>
>
> i=0;
> j=0;
>
> for t=5:5:50;
> j=j+1;
>
> for n=10^13:10^13:10^14;
> i=i+1;
> [mm]x_i=newton(f,[/mm] df, x,n, t);
> [mm]x=x_i;[/mm]
> [mm]xvector(i)=x_i;[/mm]
> nvector(i)=n;
> end
> -> Hier müsste der Plot rein<-
>
> end
>
>
> Ich hätte also noch sowas, wie eine Abhängigkeit von j,
> bzw. ich würde ja für jedes j einen anderen x Vektor
> erhalten. Gibt es da auch eine Möglichkeit diesen Index
> mit einzubauen, sodass mir immer wieder ein neues Bild
> geplottet wird. Oder müssen die Daten dann als Matrix
> abgespeichert werden??
Ich kenne leider keine andere Möglichkeit, als eine Matrix zu nutzen...
>
> mfg piccolo
>
Gruß Christian
|
|
|
|
|
könntest du nocheinmal angeben, wie ich die daten als Matrix abspeichern kann?
mfg
piccolo
|
|
|
|
|
in jedem Schleifendurchlauf (mit Laufvariable i) ergibt sich ein Zeilenvektor, also im ersten Durchlauf [mm] x_{1i} [/mm] im zweiten [mm] x_{2i} [/mm] usw.
Nun ist der erste Index dein j (äussere Schleife).
Somit weist du die Werte in die Matrix x folgendermassen zu:
x(j,i) = ... (in den Schleifen)
zum auswerten nach den Schleifen willst du immer einen Zeilenvektor plotten richtig?
Einen Zeilenvektor kannst du dir mit x(1,:) ausgeben. Dieses Beispiel gibt dir die erste Zeile aus! Analog gibt dir x(:,1) die erste Spalte.
Du kannst jetzt wieder eine Schleife schreiben, in der dann alle j Plots ausgegeben werden mit z.B.
for j=1:n
figure %macht dir für jeden Vektor eine neue Grafik auf
plot(i,x(j,:)),grid %oder so aehnlich
end
Gruß Christian
|
|
|
|
|
Danke, funktioniert jetzt alles soweit, nur eine Kleinigkeit hab ich noch, ich stelle die Ergebnisse mit einem Pseudo-color Bild (in Matlab: pcolor(...) )dar und würde gerne die colorbar genau wie die Achsen beschriften, ist das möglich??
Mfg
piccolo
|
|
|
|
|
sorry, da habe ich keine Ahnung...mit pcolor() habe ich noch nicht gearbeitet.
Gruß Christian
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:22 Do 07.07.2011 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|