Seite 1 von 1

logistische gleichung: wie fixpunkt/periode bestimmen?

Verfasst: Sonntag 4. Februar 2007, 15:28
von musik
HALLO!

ich möchte für die logistische gleichung , bei 400 iterationen

xn+1=xn*r(1-xn)


mathematisch feststellen, ob und wo es einen fixpunkt gibt, bzw. ob eine 2er, 3er oder 4er periode vorliegt.


so schaut meine log-gl. aus:
wobei 1>start>0
und 4>r>0

Code: Alles auswählen

for i in range (400):
 start=start*r*(1-start)
 
graphisch hab ich es schon hingekriegt, es mit graphics.py darzustellen, aber wie ich fixpunkte oder perioden untersuche?? ich bin am verzweifeln...

Bitte helft mir, ich bin ein Anfänger!
Vielen Dank!

lg
musik

Fixpunkt

Verfasst: Sonntag 4. Februar 2007, 21:13
von sunmountain
war nicht das

f(x) = x

der Fixpunkt ?

Dann sollte die Sache einfach sein ...

Die Peridizität kann ja darüber festgestellt werden,
ob sich Werte wiederholen.

Verfasst: Sonntag 4. Februar 2007, 22:15
von Bernhard
Sorry, keine Ahnung, was ein Fixpunkt ist. Aber muss eine Periode in einer Zahlenfolge nicht immer genau dann eintreten, wenn ein x genau den Wert hat, den ein früheres x auch schon hatte? würde es nicht reichen, bei jedem x das Du errechnest zu schauen, ob es in der Liste der bisherigen (maximal vierhundert) x schon drin ist?

Hab mal folgenden Code geschrieben. Problem ist aber, dass Du die Formel einmal mit "*" und einmal mit "+" angegeben hast. Was stimmt denn? Ggf. Zeile 7 ändern...

Code: Alles auswählen

# -*- coding: cp1252 -*-
x = [ float(raw_input("Startwert x0? ")) ]
r = float( raw_input("Wert für r? "))
periodisch = False

for i in range(400):
    y = x[i]*r*(1-x[i])
    # beim Berechnen der Reihe wird auf früheres Vorkommen geprüft
    if (y in x) and not periodisch:
        print "Periodenkriterium erfüllt bei n=",i
        periodisch = True
    x.append(y)

if not periodisch:
    print "War nicht periodisch!"

Bernhard


Edit: Ist natürlich unsinnig, ständig wieder zu gucken, ob es periodisch ist, wenn es schon einmal periodisch war. Also eher die for-Schleife abbrechen, wenn sich ein Wert ergibt, der schon in der WErteliste steht und dann nachschauen, nach wieviel Schritten es sich wiederholt hat. Schon hast Du die Periode. Aber im Prinzip muss es so gehen.

Verfasst: Sonntag 4. Februar 2007, 22:38
von BlackJack
Deine Definition von "periodisch" funktioniert nicht:

Code: Alles auswählen

In [10]: math.pi
Out[10]: 3.1415926535897931

In [11]: str(math.pi)[2] == str(math.pi)[4]
Out[11]: True
Demnach ist π periodisch. Glaub' ich nicht. ;-)

Verfasst: Sonntag 4. Februar 2007, 22:44
von Bernhard
Du kannst Pi als eine Ziffernfolge auffassen, die nicht periodisch ist. Die Zahlenfolge von oben ist aber nicht eine beliebige Zahlenfolge, sondern die nächste Zahl ergibt sich immer aus der vorherigen durch eine eindeutige Funktion.

Wenn ich in die Formel mit derselben Zahl eingehe, dann kommt auch dieselbe heraus.

Wenn ich einmal mit einer Zahl x1 hereingehe, und es entwickelt sich daraus eine Folge, in deren Verlauf wieder x1 entsteht, dann muss sich erneut dieselbe Folge ergeben. Bei beliebiger Wiederholung also eine Periodizität, oder?

Meine Definition gilt nicht für beliebige Zahlenfolgen, wohl aber für solche, die nach der Form
x "n+1" = f( x "n" ) entstehen (sorry, krieg das nicht besser geschrieben).

Verfasst: Montag 5. Februar 2007, 00:14
von BlackJack
Ups, stimmt. :oops:

Man kann dann nicht nur prüfen *ob* ein Ergebnis schon einmal vorkommt, sondern auch gleich bei welchem Index es steht. Wenn man die Differenz zwischen dem Index und der Länge der Liste (+ 1?) ausrechnet, hat man die Länge der Periode. Ausserdem braucht man dann nicht mehr weiterrechnen, sondern kann mit Slicing und Multiplikation den Rest der Liste einfach ergänzen.

Verfasst: Montag 5. Februar 2007, 04:08
von musik
Vielen Dank für Eure Hilfe !
Ihr seid die Besten!

ich überleg mir das mal, und versuch es zu verstehen.
Macht euch schon auf weitere Fragen bereit :)

danke!!
lg
musik

Verfasst: Montag 5. Februar 2007, 18:48
von Bernhard
Sehr gerne, vergiss aber nicht zu schreiben, ob das jetzt ein Mal oder ein Plus sein soll, und ob diese Reihe irgend etwas mit dem echten Leben zu tun hat, oder nur eine Aufgabe zu reinen Rechen-/Ausbildungszwecken ist.

Ach ja, und irgendwer muss natürlich auch mal schreiben, dass sich bei vierhundert Iterationen ggf. auch erhebliche Rundungsfehler anhäufen können. Nur mal so am Rande...