logistische gleichung: wie fixpunkt/periode bestimmen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
musik
User
Beiträge: 2
Registriert: Sonntag 4. Februar 2007, 15:20

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
Zuletzt geändert von musik am Montag 5. Februar 2007, 04:05, insgesamt 1-mal geändert.
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

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.
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

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.
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. ;-)
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

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).
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.
musik
User
Beiträge: 2
Registriert: Sonntag 4. Februar 2007, 15:20

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
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

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...
Antworten