Autor Nachricht
dachdecker2
BeitragVerfasst am: 03. Jul 2004 16:30    Titel:

Hatte gestern nachmittag etwas zeit, und hab mal schnell die erste bifurkation bei b=3 stark vergrößert. das sichtbare Fenster hat folgende Abmessungen b=2,995..3,0025, y=0,65..0,68. Es wurden die letzten 4900 von 5000 Zeitschritten gezeichnet, die späteren sind dabei "röter".


<BC++ 5>

double xmin = 2.995,
xmax = 3.0025,
ymin = 0.65,
ymax = 0.68,
steps = 5000,
usedsteps = 4900;

long double xx, *yy;
int x, y, step, rot, gruen, blau;
img->~TImage();
img = new TImage(Owner);
img->ClientWidth = ClientWidth;
img->ClientHeight= ClientHeight;
yy = new long double[steps+1];

for (x=0;x<ClientWidth;x++)
{
yy[0] = 0.5;
xx = xmin + x*(xmax-xmin)/ClientWidth;
for (step=1;step<steps;step++)
yy[step] = yy[step-1] * xx * (1-yy[step-1]/1);
for (step=steps-usedsteps;step<steps;step++)
{
y = ClientHeight-int((yy[step]-ymin)/(ymax-ymin)*ClientHeight);
rot = 255 * (step-steps+usedsteps) / usedsteps;
gruen= 0;
blau = 0;
img->Canvas->Pixels[x][y] = rot+256*gruen+65536*blau;
}
}
Canvas->StretchDraw(ClientRect, img->Picture->Bitmap);
</BC++ 5>

Für interessenten würd ich das noch mit einer kleinen Oberfläche versehen Augenzwinkern und dann hochladen.

EDIT: Wäre sicherlich cool, wenn ich den Link aufschreiben würde Augenzwinkern
http://www.websamba.com/dachdecker2/feigenbaum3.gif
BlackJack
BeitragVerfasst am: 29. Jun 2004 14:57    Titel:

also hatte mal ein delphi-programm geschrieben, dass das feigenbaum-diagram auf einem Celeron 633MHz in ca. 5 sekunden gezeichnet hat - und das mit maximal 1800 iterationen, von denen ich die letzten 1700 auch zeichnen liess... hier mal der code; man braucht nur einen button, 4 edits (edit1/2 für den zu berechnenden bereich, edit3 für die iterationen, edit4, ab wievielen iterationen der punkt aufgetragen werden soll) und eine checkbox (ob man ne skala haben will oder nicht). die farbe eines punktes richtet sich dabei danach, wieviele iterationen er schon hinter sich hat:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var fx,n,max,zeichn:integer;
    x,r,ab_wo,bis_wo:extended;
    s: string;
begin
  Refresh;
  ab_wo  := strtofloat(edit1.text);
  bis_wo := strtofloat(edit2.text);
  max    := strtoint(edit3.text);
  if max<=0 then
    exit;
  zeichn := strtoint(edit4.text);
  for fx := 0 to clientwidth-1 do
    begin
    r := ab_wo+fx/clientwidth*(bis_wo-ab_wo);
    x := 1/max;
    for n := 0 to max-1 do
      begin
      x := r*x*(1-x);
      if n>zeichn then
        canvas.pixels[fx,round(x*clientheight)] := {round(r*255/4)}
          round(n/max*255);
      end;

    if (fx mod (ClientWidth div 10) = 0) and (CheckBox1.Checked) then
      begin
      s := floattostr(r);
      Canvas.MoveTo(fx,ClientHeight);
      Canvas.LineTo(fx,ClientHeight-10);
      Canvas.TextOut(fx-Canvas.TextWidth(s) div 2,
        ClientHeight-10-Canvas.TextHeight(s),s);
      end;
    end;
end;


edit:
wenn man bei edit4 null angibt, sieht das echtmal total geil aus!!!
Gast
BeitragVerfasst am: 29. Jun 2004 12:40    Titel:

ja sicher, geht es bei dir nicht? Mein alter Mobilrecher brauch für sowas etwa 5 Minuten pro Bild und jede Menge Speicher (könnte ich noch optimieren)...

Bestimmt interpretiert MatLab die Befehle nur, ich hab schon extra mit ganzen Matrizen (statt mit Einzelwerten) rechnen lassen, da das die Spezialstrecke von MatLab sein soll und trotzdem ist es so langsam...

Bei etwas langer Weile mach ich noch ein C-Programm draus und Poste es mal smile
Nikolas
BeitragVerfasst am: 29. Jun 2004 06:19    Titel:

hast du das mit MatLab gezeichnet??
dachdecker2
BeitragVerfasst am: 28. Jun 2004 23:02    Titel:

Ich hab da einige schicke Vergrößerungen des Feigenbaumdiagramms für euch:

http://www.websamba.com/dachdecker2/feigenbaum.gif
22kb groß, ist auch für Modemuser kein Problem smile

Hier das "große Ganze":
http://www.websamba.com/dachdecker2/feigenbaum1.gif
mit 46kb schon deutlich größer...

Und hier die Vergrößerung einer "Insel der Ordnung":
http://www.websamba.com/dachdecker2/feigenbaum2.gif
mit 97kb noch größer
dachdecker2
BeitragVerfasst am: 28. Jun 2004 00:04    Titel:

Irgendwie hab ich nicht so richtig zum Thema beigetragen... (Asche auf mein Haupt)

Man kann einen bestimmten Kontrollparameter nicht für deine Bedingungen berechnen. Wenn du das Programm mal hernimmst, und die erste Bifurkation sehr stark vergrößerst, siehts du, dass diese Bifurkationen nicht exakt einem b zuzuordnen sind, sondern eher einem Bereich von b. Auf diesem Rechner hab ich kein MatLab drauf, ich werd morgen (wenn ichs nicht vergesse) das ganze mal auf dem anderen Rechner rechnen lassen und einen Screeny posten.

Man könnte natürlich mal Probieren, ob man Funktionen findet, mit denen man die Abschnitte zwischen den Bifurkationen (exakt) darstellen kann. Wenn es sowas geben sollte, dann kannst du das gesuchte b berechnen.
dachdecker2
BeitragVerfasst am: 27. Jun 2004 16:04    Titel:

nun, da werd ich mal die Bedeutung der ganzen Wörter veröffentlichen Augenzwinkern

b ist ein eindimensionales Array, dass die Kontrollparameter, bei mir von begin bis ende mit der Schrittweite schrittweite enthält

ymin und ymax begrenzen die Vertikale Achse, alle Werte die auftreten, liegen zwischen 0 und 1

Es ist richtig, dass es kein "begin" wie in Pascal hier in MatrixLaboratory gibt. Die "end"s gehören zu den Forschleifen.

y ist ein zweidimensionales Array, das zu jedem b die 200 berechneten Funktionswerte enthält, aus dem Schließlich die hinteren 100 in das Diagramm kommen (2. Schleife).

mit hold on (im Gegensatz zu hold off) verhindert man, dass das ein neues Diagramm für jeden Schleifendurchlauf erstellt wird. Die neuen Punkte werden zu den bereits gezeichneten hinzugefügt.

der axis-Befehl legt die Skalierungen der Achsen fest, damit strecke ich das Diagramm auf "volle Größe" Augenzwinkern

Was besonders wichtig bei MatLab ist: der Doppelpunktoperator, den habe ich noch nicht in anderen Sprachen gesehen. mit : kann man Bereiche und Schrittweiten angeben:
1:5 wählt die Zahlen 1,2,3,4 und 5 aus
0:2:10 wählt 0,2,4,6,8 und 10
das geht natürlich auch mit Kommazahlen. Auf diese Weise kann man zb. von großen Matrizen (viele) einzelne Spalten oder Elemente ohne großen Aufwand selektieren.
Nikolas
BeitragVerfasst am: 27. Jun 2004 15:44    Titel:

Zitat:
b(m2)=m*schrittweite;
hold on;
for n=2:200 (for i:=2 to 200 [in Pascal?])
axis([begin ende ymin ymax]);
Was bedeutet das? Ich kenne MathLab nicht und hab da ein paar Probleme. Gibt's in Mathlab nur end's und keine begin's??
dachdecker2
BeitragVerfasst am: 27. Jun 2004 14:44    Titel:

Ich hab da was für die interressierten, ein MatLab-Programm mit dem man sich das Feigenbaumdiagramm "von nahem anschauen kann.

Es berechnet für jeden Kontorllparameter, bei mir b, 200 Werte, von denen die letzten 100 (der "eingeschwungene" Zustand der logistischen Gleichung soll erreicht sein; je weiter hinten, desto besser) über dem aktuellen b aufgetragen werden.


Wenn es jemanden interessiert, könnte ich das ganze in ein C-Gewand werfen, was auch um längen schneller laufen würde.

Da Matlab-Dateien als Anhang nicht erlaubt sind, nutz ich mal Copy&Paste. Leider weiss ich nicht wie man hier die Einrückung macht, Tab und Space geht nicht.

<Matlab 5.3>
ymin=0;
ymax=1;

begin=3.82
ende=3.87
schrittweite=0.0001

schrittanzahl = (ende-begin)/schrittweite

for m=begin/schrittweite + 2:ende/schrittweite
m2 = m - begin/schrittweite;
b(m2)=m*schrittweite;
y(1,m2)=0.1;
for n=2:200
y(n,m2)=y(n-1,m2)*b(m2)*(1 - y(n-1,m2)/ymax);
end
end

for m=begin/schrittweite + 2:ende/schrittweite
m2 = m - begin/schrittweite;
plot(b(m2),y(100:200,m2));
hold on;
end

axis([begin ende ymin ymax]);
</Matlab 5.3>
Nikolas
BeitragVerfasst am: 28. Mai 2004 15:03    Titel:

Das mit dem Berechnen ist schon möglich. Wenn du dir das Grafik zu dieser Funktion anschaust, siehst du ja bis zum gesuchten r verschiedene Bifurkationen. Wo die auftreten müsste man eigentlich errechnen können. Nach der dritten Bifurkation hat man schon 8 mögliche Zustände und nach der nächsten dann unendlich viele (Anfang des Chaos). Ich hab zwar keine Ahnung, wie man diese Bifurkationen errechnen kann, aber so könnte man was probieren. Ich hab mal in einem Buch über komplexe Systeme mit meinem Geo nachgemessen (tolle Methode, ich weiss) und bin so auf auf r(unendlich)=3,48888.. gekommen.
Zum Zusammenhang zur Feigenbaumkonstanten:
Wenn du dir die Bifurkationen bei r=3,488.. mit dem Faktor 4,67^3 vergrößerst, müssten sie so aussehen, wie die erste Bifurkation.
(Alles aus dem Buch 'Komplexe Systeme' on Klaus Richte und Jan-Michel Rost; Fischer Taschenbuchverlag 2002).

Viel Glück noch.
BlackJack
BeitragVerfasst am: 28. Mai 2004 14:20    Titel:

ich glaube, berechnen wird aufgrund der chaotischen struktur eher schwierig, oder? wenn du was von programmieren verstehst, dann schreib dir ein programm, das diesen feigenbaum zeichnet (ziemlich einfach), und schau dann nach, ab wo es chaotisch wird, und bestimme das zugehörige r.
stammel
BeitragVerfasst am: 28. Mai 2004 14:01    Titel:

wie berechne ich denn r (kritische konstante) beim übergang zum chaos?
Thomas
BeitragVerfasst am: 28. Mai 2004 11:12    Titel:

Wo liegt denn genau dein Problem?

Gruß,
Thomas
stammel
BeitragVerfasst am: 28. Mai 2004 10:26    Titel: Feigenbaum-Übergang ins Chaos

hallo.
ich hab hier ne tolle aufgabe! wer kann mir helfen?
Bestimmen sie den kritischen Kontrollparameter r für den Übergang zum chaos.vergleichen sie mit literaturwerten.Wie ist der zusammenhang zur Feigenbaum-konstante?können sie angaben zum skalenverhalten machen?

grübelnd

Powered by phpBB © 2001, 2005 phpBB Group