Randomisierung

Mit dem Begriff Randomisierung ist die zufällige Erzeugung von Werten für die 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 [modifica]

In STACK gibt es folgende Befehle, um zufällige Zahlen zu erzeugen:

  • rand(n) → Zufällige ganze Zahl zwischen \(0\) und \(n-1\)
    • Beispiel: rand(5) → Zahl aus der Menge \( \{ 0,\ 1,\ 2,\ 3,\ 4 \} \)
  • 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\)
  • 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\} \)
  • rand([a,b,c,d]) → Zufälliges Element aus der Liste \( [a,\ b,\ c,\ d] \)
    • Beispiel: rand([sin(x), cos(x), exp(x)])

Randomisierung bestimmter mathematischer Konstrukte [modifica]

Im folgenden Abschnitt sollen die Befehle zur Randomisierung konkret angewendet werden.


Matrix

Zu STACK-Aufgaben mit Matrizen beachten Sie 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 unter Umständen auch unübersichtlich werden. Daher ist es sinnvoll, folgende Möglichkeit zu benutzen:

Der Befehl rand( ) kann auf den matrix( )-Befehl angewandt 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 Einträgen zwischen 0 und 4 */


Wichtig: Diese Möglichkeit funktioniert nur mit dem Befehl rand(), nicht aber mit den Befehlen rand_with_step() oderrand_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 Einträgen zwischen -5 und 5 */ 

M2: 2*rand(matrix([6,6],[6,6]); /* 2x2-Matrix mit zufälligen geraden Zahlen von 0 bis 10 */ 



Polynom

Polynome lassen sich am besten ĂĽber ihre Nullstellen randomisieren, wie es das folgende Beispiel zeigt, bei dem ein Polynom dritten Grades erzeugt wird:

n1: rand_with_step(-5,5,1); /* Erzeugung der drei Nullstellen des Poylnoms */

n2: rand_with_prohib(-5,5,[n1]);

n3: rand_with_prohib(-5,5,[n1,n2]);

P: (x-n1)*(x-n2)*(x-n3); /* Erzeugung des Polynoms aus Linearfaktoren */

P: expand(P); /* 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 Fuktion rand(1000) erzeugt eine zufällige Zahl zwischen 0 und 999. Der Befehl float() 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( ).

makelist(f,i,k,n) → Erzeugt eine Liste mit Elementen \(f(i)\), \(\mathbb{N }\ni i=k,\ ...,\ n\),  also \( [ f(k),\ f(k+1),\ f(k+2),\ ...,\ f(n) ] \)


Beispiel: makelist(i^2,i,1,10) → Erzeugt eine Liste mit den Quadratzahlen von \(1^2\) bis \(10^2\), also \( [1,\ 4,\ 9,\ ...,\ 100] \)


Mit dem Befehl  random_permutation(L) kann eine Liste \(L\) zufällig permutiert werden.

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\} \)