Pseuo Zufallszahlen mit Sage

Neue Frage »

Auf diesen Beitrag antworten »
die dumme Blondine 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 [latex]n\in \mathbb N [/latex] sukzessive eine Folge [x1,x2...] von
Pseudo-Zufallszahlen in [latex]\mathbb Z_{n}[/latex] generiert, und bei jedem Aufruf das jeweils nächste Folgenglied
zurückgibt. Verwenden Sie dazu folgenden Algorithmus:

Für Parameter[latex]a\in \mathbb Z_{n}^{*} [/latex]und [latex]b\in \mathbb Z_{n} [/latex] und einem Startwert [latex]x_{0}\in \mathbb Z_{n} [/latex] sei [latex]x_{i}:=ax_{i-1}+b\in \mathbb Z_{n} [/latex] für [latex]i\in \mathbb N  [/latex] 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
 
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
die dumme Blondine

Hi,
danke für die Hilfe, aber leider funktioniert das so nicht... traurig
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
Auf diesen Beitrag antworten »
die dumme Blondine

mit ner kleinen Änderung (vgl. http://www.matheboard.de/thread.php?post...866#post1719866) klappts doch smile Vielen Dank nochmal!
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »