Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Pseuo Zufallszahlen mit Sage » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Pseuo Zufallszahlen mit Sage
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
die dumme Blondine die dumme Blondine ist weiblich
Grünschnabel


images/avatars/avatar-52.jpg

Dabei seit: 16.12.2012
Beiträge: 4

Pseuo Zufallszahlen mit Sage Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
16.12.2012 17:00 die dumme Blondine ist offline E-Mail an die dumme Blondine senden Beiträge von die dumme Blondine suchen Nehmen Sie die dumme Blondine in Ihre Freundesliste auf
eulerscheZahl
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
die dumme Blondine die dumme Blondine ist weiblich
Grünschnabel


images/avatars/avatar-52.jpg

Dabei seit: 16.12.2012
Beiträge: 4

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
19.12.2012 15:31 die dumme Blondine ist offline E-Mail an die dumme Blondine senden Beiträge von die dumme Blondine suchen Nehmen Sie die dumme Blondine in Ihre Freundesliste auf
die dumme Blondine die dumme Blondine ist weiblich
Grünschnabel


images/avatars/avatar-52.jpg

Dabei seit: 16.12.2012
Beiträge: 4

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

mit ner kleinen Änderung (vgl. http://www.matheboard.de/thread.php?post...866#post1719866) klappts doch smile Vielen Dank nochmal!
19.12.2012 16:48 die dumme Blondine ist offline E-Mail an die dumme Blondine senden Beiträge von die dumme Blondine suchen Nehmen Sie die dumme Blondine in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Pseuo Zufallszahlen mit Sage