STACK-Wiki
Randomisierung
Inhaltsübersicht
1. Maxima-Befehle für die Randomisierung [Bearbeiten]
2. Randomisierung bestimmter Objekte [Bearbeiten]
2.1. Matrix
2.1.1. Erzeugung von Matrizen allgemein
2.1.2. Randomisierung von Matrizen
2.2. Polynom
2.3. Dezimalzahl
2.4. Liste oder Menge
Mit dem Begriff Randomisierung ist die zufällige Erzeugung von Werten für Variablen in STACK-Aufgaben gemeint.
In diesem Artikel geht es um die verschiedenen Arten und Möglichkeiten der Randomisierung.
Maxima-Befehle für die Randomisierung [Bearbeiten]
In STACK gibt es folgende Befehle, um zufällige Zahlen zu erzeugen:
rand(n)
→ Zufällige ganze Zahl zwischen \(0\) und \(n-1\)- Beispiel 1:
rand(5)
→ Zahl aus der Menge \(\{0,1,2,3,4\}\) - Beispiel 2:
rand(5)+1
→ Zahl aus der Menge \(\{1,2,3,4,5\}\)
- Beispiel 1:
rand_with_step(n,m,k)
→ Zufällige Zahl aus der Menge \(\{n,n+k,n+2k,...,m\}\)- Beispiel 1:
rand_with_step(-5,5,1)
→ Zufällige Zahl aus der Menge \(\{-5,-4,...,4,5\}\) - Beispiel 2:
rand_with_step(2,10,2)
→ Zufällige gerade Zahl zwischen \(2\) und \(10\)
- Beispiel 1:
rand_with_prohib(n,m,[a,b,c])
→ Zufällige Zahl zwischen \(n\) und \(m\) (Schrittweite \(1\)), wobei die Elemente der Liste \([a,b,c]\) ausgeschlossen sind- Beispiel:
rand_with_prohib(-2,2,[0])
→ Zufällige Zahl aus der Menge \(\{-2,-1,1,2\}\)
- Beispiel:
rand([a,b,c,d])
→ Zufälliges Element aus der Liste \([a,b,c,d]\)- Beispiel:
rand([sin(x), cos(x), exp(x)])
- Hinweis: Der Befehl funktioniert analog für Mengen, z. B.
rand({a,b,c,d})
- Beispiel:
Randomisierung bestimmter Objekte [Bearbeiten]
Im folgenden Abschnitt sollen die Befehle zur Randomisierung konkret angewendet werden.
Matrix
Bitte beachten Sie zu STACK-Aufgaben mit Matrizen auch den separaten Artikel.
Erzeugung von Matrizen allgemein
Matrizen können mit dem Befehl matrix(a1,a2,...,an)
erzeugt werden, wobei die \(a_i\) die Zeilenvektoren der Matrizen sind, die als Listen eingegeben werden.
Beispiel: Die \(2\times 3\)-Matrix \( \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{pmatrix} \) wird mit dem Befehl matrix([1,2,3],[4,5,6])
erzeugt.
Randomisierung von Matrizen
Sicherlich ist es möglich, die einzelnen Einträge einer Matrix zu randomisieren und die Matrix dann aus diesen zusammenzustellen. Gerade bei größeren Matrizen ist dies aber zeitaufwendig und kann auch unübersichtlich werden. Daher ist es sinnvoll, folgende Möglichkeit zu benutzen:
Der Befehl rand
kann auf den matrix
-Befehl angewendet werden. Der rand
-Befehl bezieht sich dann auf jeden Eintrag der Matrix.
Beispiel: M: rand(matrix([5,5],[5,5]));
→ 2x2-Matrix mit zufälligen ganzzahligen Einträgen zwischen 0 und 4
Hinweis: Diese Möglichkeit funktioniert nur mit dem Befehl rand
, nicht aber mit den Befehlen rand_with_step
oder rand_with_prohib
. Daher gibt es erst einmal nur eingeschränkte Möglichkeiten für die Randomisierung von Matrizen, denn zum Beispiel können mit rand
keine negativen Zahlen erreicht werden.
Dieses Problem lässt sich aber mit einem Trick umgehen: Man kann die mit rand
randomisierten Matrizen einfach mit anderen nicht randomisierten Matrizen addieren oder mit einem Faktor multiplizieren.
Beispiele:
M1: rand(matrix([11,11],[11,11])) - matrix([5,5],[5,5]);
→ 2x2-Matrix mit zufälligen ganzzahligen Einträgen zwischen -5 und 5M2: 2*rand(matrix([6,6],[6,6]);
→ 2x2-Matrix mit zufälligen geraden Zahlen zwischen 0 und 10 als Einträgen
Polynom
Polynome lassen sich am besten über ihre Nullstellen randomisieren, wie es das folgende Beispiel zeigt, bei dem ein Polynom dritten Grades erzeugt wird:
/* Erzeugung der drei Nullstellen des Poylnoms: */
n1: rand_with_step(-5,5,1);
n2: rand_with_prohib(-5,5,[n1]);
n3: rand_with_prohib(-5,5,[n1,n2]);
pol: (x-n1)*(x-n2)*(x-n3); /* Erzeugung des Polynoms aus Linearfaktoren */
pol: expand(pol); /* Wahlweise kann das Polynom über den Befehl expand() noch ausmultipliziert werden */
Dezimalzahl
float(rand(1000))/1000
→ Dezimalzahl zwischen 0 und 1 mit 3 Nachkommastellen (Die Fuktionrand(1000)
erzeugt eine zufällige Zahl zwischen 0 und 999. Der Befehlfloat
wandelt diese in eine Dezimalzahl um.)float(rand(10^n))/10^n
→ Dezimalzahl zwischen \(0\) und \(1\) mit \(n\) Nachkommastellen
Liste oder Menge
Wenn Sie eine Liste oder Menge mit zufälligen Elementen, die einem bestimmten Muster folgen sollen, erstellen möchten, hilft in beiden Fällen der Befehl makelist
.
Beispiele:
makelist(i^2,i,1,10)
→ Erzeugt eine Liste mit den Quadratzahlen von \(1^2\) bis \(10^2\), also \( [1,\ 4,\ 9,\ ...,\ 100] \)makelist(i^2,rand(5),1,10)
→ Erzeugt eine Liste mit zehn zufälligen Zahlen zwischen 0 und 4.makelist(i^2,rand_with_step(-4,4,2),1,10)
→ Erzeugt eine Liste mit zehn zufälligen Zahlen aus der Menge \(\{-4,-2,0,2,4\}\).
Für zufällige Listen und Mengen existieren zudem folgende Befehle:
random_permutation(L)
→ Zufällige Permutation einer Liste \(L\).random_subset(M)
→ Zufällige Teilmenge einer Menge \(M\).random_subset_n(M,n)
→ Zufällige \(n\)-elementige Teilmenge einer Menge \(M\) (falls möglich).random_ne_subset(M)
→ Zufällige nichtleere Teilmenge einer Menge \(M\).rand_selection(A,n)
→ Liste mit zufällig ausgewählten \(n\) Elementen einer Menge oder Liste \(A\). Die Elemente sind unterschiedlich, im Fall doppelter Einträge in \(A\) können diese aber auch doppelt in der zufälligen Liste erscheinen.rand_selection_with_replacement(A,n)
→ Liste mit zufällig ausgewählten \(n\) Elementen einer Menge oder Liste \(A\), die nicht unterschiedlich sein müssen.
Eine Liste kann mit dem Befehl setify()
in eine Menge umgewandelt werden, z. B.:
setify(makelist(i^2,i,1,10))
→ Macht aus der Liste \([1,4,9,...,100]\) die Menge \(\{1,4,9,...,100\}\)