Pseuo Zufallszahlen mit Sage |
|
Pseuo Zufallszahlen mit Sage |
|
Meine Frage:
Hi,
dieses Jahr ist Computeralgebra bei uns ganz schwer und meine Freundin und ich kommen bei dem einen Übungsblatt bei der 1. Aufgabe einfach nicht weiter. Aufgaben 2-4 basieren jedoch leider auf 1!
Implementieren Sie eine SAGE-Funktion, die für sukzessive eine Folge [x1,x2...] von
Pseudo-Zufallszahlen in generiert, und bei jedem Aufruf das jeweils nächste Folgenglied
zurückgibt. Verwenden Sie dazu folgenden Algorithmus:
Für Parameterund und einem Startwert sei für gegeben. Dabei bietet es sich an, das jeweils aktuelle Folgenglied, mit dem SAGE-
Kommando global, als globale Variable zu deklarieren.
Überlegen Sie sich zudem (in Ihrem Arbeitsheft), in welchem Sinne diese Folge zufällig ist.
Meine Ideen:
sage: def pseudo(n):
....:____i=1
....:____x=1
....:____for a in range(0,1):
....:________for b in range(1,n-1):
....:____________x=x*a+b%n
....:____________i=i+1
....:____________return x
das ist unser Ansatz, jedoch gibt es jedes mal nur eine 1 heraus. Wir würden uns sehr freuen, wenn ihr uns da weiterhelfen könntet, da wir als FüBas in dem Kurs doch leicht überfordert sind.
Danke schonmal im Voraus und LG
Die dumme Blondine
|
|
16.12.2012 17:00 |
|
|
eulerscheZahl unregistriert
|
|
Hallo,
vorab: ich kann kein Sage, habe es auch nicht installiert, um meinen Vorschlag zu testen. Im Folgenden nur Mutmaßungen, wie es bei anderen, mir bekannten Sprachen wäre.
In deiner Funktion wir x=1 zugewiesen (und zwar bei jedem Aufruf)
Danach kommen 2 Schleifen, aber für (a=0, b=1) wird bereits ein x berechnet und zurückgegeben, es kommt also nicht zu weiteren Schleifendurchläufen -> die Schleifen sind überflüssig.
Es ist dann: x=1 (3. Zeile) und daraus wird x=x*a+b=1*0+1=1 (6. Zeile). Diese 1 wird dann zurückgegeben.
Du solltest das vorherige x als globale Variable abspeichern, und dann mit diesem arbeiten
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
sage: global x=1
sage: def pseudo(n):
a=214013
b=2531011
global x
x=(x*a+b)%n
return x
|
|
a und b sind "zufällig" gewählt (Es gibt Zahlen die sich besser eignen als andere, diese hier habe ich von rand() der Sprache C).
Das x*a+b habe ich geklammert, da ich nicht vermute, dass sonst erst b%n berechnet und dann zu a*x addiert wird, weshalb die Zufallszahl zu hoch werden könnte (so macht es zumindest C).
Wäre nett zu wissen, ob es so klappt, ich bitte um Rückmeldung.
|
|
17.12.2012 18:52 |
|
|
|
Hi,
danke für die Hilfe, aber leider funktioniert das so nicht...
er nimmt das global x=1 nicht. Er lässt die Funktion Pseudo(n) zwar so definieren, wenn man für das n dann aber eine Zahl einsetzt, so zeigt er ein Error.
Schade eigentlich, weil sage mit C und Python verwandt sein soll.
Wenn noch jemand Ideen hat, würden wir uns aber sehr darüber freuen. Leider wird uns sage nicht beigebracht, uns werden nur sehr schwere Aufgaben (im Vergleich zu den letzten Jahren) und das Online- Handbuch zur verfügung gestellt.
LG die dumme Blondine
|
|
19.12.2012 15:31 |
|
|
|