MAIN Experimente mit „Zufallspermutationen“ in DERIVE Franz Schlöglhofer, Universität Linz, Pädagogische Akademie des Bundes Linz In DERIVE können durch die Anweisung RANDOM Pseudo-Zufallszahlen erzeugt werden. Damit ist es möglich, Simulationen von Zufallsexperimenten durchzuführen. Die einfache Verwendung von RANDOM entspricht einem Zufallsexperiment „mit Zurücklegen“. Ein Beispiel dafür ist das Würfeln mit einem Würfel. Diese Form eines Zufallsexperiments ist sehr verbreitet und wird auch oft beschrieben (etwa [Klingen L.,1995], [Kayser H.,1997]). Zufallsexperimente „ohne Zurücklegen“ können mit „zufällig“ erzeugten Permutationen simuliert werden. Mit der Programmierfähigkeit ab Version DERIVE 5 kann man dafür Hilfsprogramme erstellen. Im Folgenden werden einige solcher Programme beschrieben und in Simulationen eingesetzt. Der Vorteil der Simulation ist, dass nicht in jedem Fall schwierige kombinatorische Überlegungen angewendet werden müssen. Oft sind allerdings größere Rechenzeiten erforderlich. Außerdem erhält man durch die Simulationen anstelle von Erwartungswerten relative Häufigkeiten und anstelle von Erwartungswerten Mittelwerte. Die vorliegenden Beispiele zum Unterricht der Wahrscheinlichkeitsrechnung entstanden in Diskussionen mit Kollegen Schoberleitner von der Universität Linz, wofür ich ihm sehr danken möchte. Die DERIVE-Anweisung RANDOM(n) Bei jedem Aufruf liefert RANDOM(n) mit n∈Ν und n>1 zufällig eine der Zahlen {0, 1, 2, 3, .., n-1}, RANDOM(6) liefert eine der Zahlen {0, 1, 2, 3, 4, 5}. Ein Zufallsexperiment, bei dem 20 mal mit einem Würfel mit den Seitenbezeichnungen 1,2,...,6 gewürfelt wird, könnte folgendermaßen durchgeführt werden: Die Addition von 1 bei der Berechnung der Zufallszahlen bewirkt, dass man als mögliche Ergebnisse 1,2,3,4,5,6 (statt 0,1,2,3,4,5) erhält. Mit vector werden die so erzeugten Zahlen in einem Vektor gespeichert. Vor dem Beginn der Simulationen sollte die Anweisung RANDOM(0) eingegeben und vereinfacht werden, damit bei jedem Neustart mit neuen Zufallszahlen begonnen wird. Zufallspermutationen Mit der selbst geschriebenen Anweisung rperm(n,a) kann man die Erzeugung von Zufallspermutationen simulieren. Das Verfahren beruht auf der Verwendung von RANDOM auf der Grundlage eines einfachen Algorithmus in [Engel A., 1991]. 1 MAIN Beispielsweise werden durch rperm(10,10) in Zeile #7 bis #10 die Zahlen 1,2,...,10 zufällig angeordnet. Mit rperm(45,6) werden 6 Zahlen aus 1,2,3,...,45 zufällig ausgewählt und auch zufällig angeordnet Zeile #11 bis #13. Der so gebildete Vektor kann mit der DERIVE-Anweisung SORT sortiert werden Zeile #14 bis #16. In rperm wird zunächst ein geordneter Vektor [1,2,3,...n] gebildet. Die Elemente dieses Vektors werden dann anschließend mit RANDOM ausgewählt, in diesem Vektor gelöscht und einem weiteren Vektor angefügt. Übereinstimmungen in zwei Vektoren Eine weitere für die Simulationen wichtige Aufgabe ist die Ermittlung von Übereinstimmungen in zwei Permutationen. Mit der Anweisung vinv(u,v) kann diese Anzahl ermittelt werden. Die Anwendung von vinv ergibt hier 2 bzw. 0 Übereinstimmungen. 2 MAIN Häufigkeitsverteilung Mit dem Aufruf f_dist(v) kann eine Häufigkeitsverteilung von in einem Vektor gespeicherten ganzzahligen Werten erzeugt werden. Als Beispiel werden hier 1000 Lotto-Ziehungen durchgeführt und das Ergebnis jeweils mit einem selbst gewählten Tipp verglichen. Aufgrund des Aufbaus von f_dist werden im Ergebnis die Ausfälle des Experiments nur vom Minimum bis zum Maximum der vorkommenden Werte berücksichtigt. Fünfmalige bzw. sechsmalige Übereinstimmung sind hier nicht aufgetreten, daher auch in der Häufigkeitsverteilung nicht vertreten.. Mit einer etwas abgewandelten Form der Häufigkeitsverteilung können die Grenzen für den Vektor eingegeben werden. Ein neuerlicher Durchlauf lieferte die Werte: Wenn im Unterricht die hypergeometrische Verteilung behandelt wurde, so könnten auch die entsprechenden Wahrscheinlichkeiten für 0 bis 6 richtige Tipps berechnet werden und mit den Ergebnissen der Simulation verglichen werden: 3 MAIN Für den Unterricht besteht eine Variante noch im Ziehen von drei Zahlen aus zehn. In diesem Fall findet man für die Berechnung der Wahrscheinlichkeiten das Auslangen mit Überlegungen anhand eines Baumdiagramms. Im Folgenden werden noch die Ergebnisse einer Simulation und die Berechnung der Wahrscheinlichkeiten für 3 aus 10 dargestellt. Anhand der nächsten Aufgaben werden weitere DERIVE-Anweisungen beschrieben, die für Simulationen verwendet werden können: Fehlersuche Von einer Lieferung von 50 Geräten weiß man, dass 12 defekt sind. Zur Untersuchung der Lieferung werden zufällig 4 Geräte herausgegriffen. Mit welcher Wahrscheinlichkeit erhält man kein einziges defektes Gerät? [Kütting, S. 183] Für die Simulation werden zwei Auswahlen getroffen. Einmal werden aus den 50 Geräten 12 zufällig ausgewählt (defekte Geräte) und dann 4 Geräte (untersuchte Geräte). Dafür wird zweimal ein Vektor mit rperm erzeugt. Anschließend ermittelt man mit vinv die Anzahl der Übereinstimmungen. Bei der folgenden zweimaligen Durchführung gab es 0 bzw. 2 Übereinstimmungen. Mit VECTOR werden nun bei zwanzigmaliger Ausführung die Anzahlen der Übereinstimmungen zusammengefasst. 4 MAIN Mit der DERIVE-Anweisung select können wir die Ergebnisse „kein defektes Geräte wurde gefunden“ zusammenfassen. Durch select(Bedingung, Variable, Vektor) können die Werte eines Vektors, die einer bestimmten Bedingung genügen, zu einem neuen Vektor zusammengefasst werden. Die Anzahl der Ergebnisse mit 0 Übereinstimmungen kann nun mit der DERIVE-Anweisung DIM ermittelt werden. Der Versuch wurde 1000-mal durchgeführt. Es ergab sich die relative Häufigkeit 0,327, dass keine Übereinstimmung aufgetreten ist. Die Berechnung der Wahrscheinlichkeit erfolgt über die hypergeometrische Verteilung: Durch Änderung der SELECT-Anweisung können mit der Simulation leicht Aussagen über das Auffinden von 1, 2, 3 oder 4 defekten Geräten gemacht werden. In der folgenden Simulation wird näherungsweise die Wahrscheinlichkeit für den Fall ermittelt, dass höchstens zwei defekte Geräte gefunden werden. Neben der Simulation wird hier auch die Berechnung der Wahrscheinlichkeit gezeigt. Die relative Häufigkeit 973/1000 ist in guter Näherung zur berechneten Wahrscheinlichkeit. Wer beschenkt sich selbst? Zu einer gemeinsamen Feier bringt jeder Teilnehmer ein Geschenk mit. Die Geschenke werden zufällig in der Gruppe verteilt, wobei jeder ein Geschenk erhält. Wie viele der Teilnehmer werden sich bei so einer Feier im Mittel selbst beschenken? Wir führen dieses Zufallsexperiment zunächst für eine Gruppe von 20 Personen aus. Die Anweisung vector(i,i,1,20) erzeugt den Vektor [1,2,3,...20], also eine geordnete Liste der Teilnehmer. Mit rperm(20, 20) erhält man eine Zufallspermutation. Dies entspricht einer zufälligen Verteilung der Geschenke auf die 20 Teilnehmer. Um die Anzahl der Übereinstimmungen in den beiden Vektoren zu ermitteln (Anzahl der Personen, die sich selbst beschenken) subtrahiert man die beiden Vektoren. Eine Stelle mit dem Wert 0 bedeutet im Differenzvektor, dass der Teilnehmer sich selbst beschenkt hat. Ein dreimaliger Versuch hat hier keine, eine bzw. drei Übereinstimmungen gebracht. 5 MAIN Um diesen Zufallsversuch mehrfach auszuführen, wird mit der Anweisung DIM die Anzahl der Übereinstimmungen berechnet. Diese Anzahlen werden durch VECTOR zu einem neuen Vektor zusammengefasst. Bei hundertmaliger Durchführung haben sich die folgenden Anzahlen von Übereinstimmungen ergeben: Zur Berechnung des Mittelwerts der Anzahl der Übereinstimmungen kann der folgende Funktionsaufruf mue(v) auf den berechneten Vektor angewendet werden: Die folgenden Berechnungen wurden für eine Gruppengröße von 20, 10 bzw. 50 Personen ausgeführt. Interessanterweise erhält man jedesmal (ab einer gewissen Gruppengröße) den Mittelwert in der Größenordung 1 unabhängig von der Anzahl der Teilnehmer. Die Berechnung der Wahrscheinlichkeit ist hier wesentlich schwieriger als die Simulation. Es ergibt sich (mit dem Grenzwert der Gruppengröße nach unendlich) der Erwartungswert 1. 6 MAIN Fehlerhafte Medikamentenausgabe eines Apothekers Ein Apotheker gibt Medikamente an 100 Personen aus. Später bemerkt er, dass er zwei Personen (unabhängig voneinander) ein falsches Medikament gegeben hat. Es ist notwendig, beide ausfindig machen. Wie viele der 100 Personen muss er im Mittel kontaktieren? (Andere Möglichkeit: In 100 Dokumenten sucht man zwei Dokumente. Wie viele muss man im Mittel durchsehen?) In der Simulation ordnen wir den gesuchten Personen (ohne Beschränkung der Allgemeinheit) die Nummern 1 und 2 in einer Zufallspermutation zu. Es geht jetzt nicht nur darum, Werte in einem Vektor zu suchen, die einer bestimmten Bedingung genügen (Anweisung select), zusätzlich muss auch deren Position ermittelt werden. Zur Lösung dieser Aufgabe werden wir weitere programmierte Anweisungen kennenlernen.. Mit select_pos kann man Positionen in einem Vektor suchen, die einer bestimmten Bedingung genügen, mit last_pos das letztmalige Eintreten einer Bedingung. Die folgenden Beispiele zeigen die Verwendung von select_pos: Zunächst werden im Vektor [1,6,3,2,7,5,4] die Positionen für die Bedingung x<4 gesucht (Stellen 1, 3 und 4), anschließend die Stellen, an denen die Zahlen kleiner als 3 sind, in einer Zufallspermutation von den Zahlen 1 bis 100. Aufbau der Anweisung select_pos: Auf select_pos aufgebaut sind die Anweisungen first_pos und last_pos. Beim Aufruf müssen eine Bedingung, eine Variable und ein Vektor angegeben werden. Man kann mit dieser Anweisung die Stelle in einem Vektor finden, an der zum ersten (letzten) Mal eine Bedingung erfüllt ist. 7 MAIN Nun suchen wir mit last_pos die letzte Stelle, an der sich die letzte der beiden Zahlen in einer Zufallspermutation befindet. Bei 100 Personen war dies an den Stellen 81 bzw. 73. Zur Wiederholung des Experiments kann aus den Ergebnissen von last_pos ein Vektor gebildet werden und der Mittelwert berechnet werden. Ergebnisse sind in den Zeilen 29 bis 31. (Als theoretisches Ergebnis für diese Aufgabe erhält man ca. 67,3) Kartenspiele Auch Wahrscheinlichkeitsaufgaben zu Kartenspielen lassen sich durch Simulation behandeln. Für das „Durchmischen“ ist eine weitere Anweisung notwendig. Das Hilfsprogramm vperm(v,a) wirkt auf einen bereits vorgegebenen Vektor v. Einerseits wird er durchmischt, andererseits werden die ersten a Elemente des Vektors herausgegriffen. Wir verwenden den folgenden Vektor v zur Simulation des Ziehens einer bestimmten Farbe. In diesem Kartenspiel verwendet man 20 Karten in 4 verschiedenen Farben. Der Kartenwert wird nicht in die Simulation einbezogen. Der Aufruf vperm(v,5) hat in diesem Fall alle vier Farben gebracht, die Farbe 3 zweimal. Die Anweisung vperm ist folgendermaßen aufgebaut: 8 MAIN Mit den gegebenen Karten soll nun durch Simulation untersucht werden, welche Anzahl von Karten der Farbe 1 man sich beim Ziehen von fünf Karten erwarten kann. Durch DIM(SELECT(x=1,x,vperm(v,5))) wird die Anzahl der Karten mit der Farbe 1 gezählt. Bei hundertmaliger Durchführung ergaben sich die folgenden Anzahlen: Mit der bereits verwendeten Anweisung f_dist kann von diesem Vektor eine Häufigkeitsverteilung erstellt werden. Hier wurde dies 10000mal durchgeführt. Es ergab sich eine gute Übereinstimmung mit den Wahrscheinlichkeiten Anzahl mit der Farbe 1 Wahrscheinlichkeit 0 0,21 1 0,44 2 0,29 3 0,067 4 0,0048 5 0,00006 Bildersuche Ein Bogen (oder eine Mappe) enthält eine bestimmte Anzahl von Leerstellen, an denen ein Satz von Bildern eingeklebt werden soll. Man kann aber nicht alle Bilder auf einmal erwerben, sondern man kauft sie in geschlossenen Kleinpackungen, die nur wenige zufällig ausgewählte Bilder enthalten. Welche Bilder man kauft, kann man erst nach der Öffnung erkennen. Auf diese Art wird manchmal die Sammelleidenschaft von Kindern ausgenützt. Besorgte Eltern könnten sich fragen, wie viele Packungen sie kaufen müssen, damit so ein ganzer Bogen voll wird. Während einige der bisherigen Aufgaben auch mit theoretischen Berechnungen in der Wahrscheinlichkeitsrechnung gelöst werden konnten, sind Aussagen zu dieser Frage praktisch nur mit der Simulation möglich. In den folgenden Beispielen wird dieses Problem auf verschiedenen Ebenen behandelt. Zufällige Auswahl der Bilder Wir setzen voraus, dass die Bilder in den Kleinpackungen zufällig ausgewählt sind. Zur Simulation dieser Auswahl der Bilder in einer Packung verwenden wir die Anweisung v01(n,a). Durch diese Anweisung wird ein Vektor mit n Zahlen erzeugt. An zufällig ausgewählten a Stellen wird im Vektor 1 gesetzt, sonst 0. Durch v01(10,3) wird in einem Vektor mit 10 Elementen dreimal die Zahl 1 gesetzt. 9 MAIN Simulation des „Bildereinklebens“ Wir verwenden die DERIVE-Anweisung ITERATES. Beim Start wird für w der Nullvektor VECTOR(0,i,1,10) gesetzt (es sind noch keine Bilder eingeklebt). Anschließend wird zum Vektor w bei jedem Durchgang der Vektor v01(10,3) addiert und wieder auf w gespeichert. Jedesmal kommen drei Bilder dazu. Bald wird man auch Bilder mehrfach haben. Im folgenden Versuch fehlen nach siebenmaliger Durchführung noch 2 Bilder, ein Bild wurde bereits fünfmal gekauft. Wird statt ITERATES nun ITERATE verwendet, so wird nur die letzte Zeile ausgegeben. Schon mit diesem einfachen Aufbau können Schüler bereits einige Beobachtungen machen, etwa Vermutungen aufstellen, wie lange es bis zum vollständigen Satz dauern kann bzw. wie die Verteilung auf die einzelnen Bilder ist (z.B. maximale Anzahl). Ein Funktionsaufruf für die Simulation Wenn man den Vorgang für verschiedene Anzahlen simulieren möchte, so kann man den folgenden Funktionsaufruf samm(n,a,k) verwenden 10 MAIN Ist man nur an der Anzahl der fehlenden Bilder interessiert, so sucht man mit der Anweisung SELECT die Stellen im Vektor mit dem Wert 0 und ermittelt anschließend ihre Anzahl mit DIM. Wie viele Packungen muss man für einen gesamten Satz im Mittel kaufen? Mit dem bisherigen Verfahren kann man eine bestimmte Anzahl von Durchgängen festlegen, aber den Vorgang nicht mit der Bedingung abschließen, dass alle Bilder vorhanden sind, also der Satz vollständig ist. Möchte man diese Anzahl ermitteln, so ist der Aufbau mit Hilfe eines kleinen Programms günstig. Der Aufruf samm2(n,a) hat eine ähnliche Struktur wie der obige Aufruf mit ITERATES. Mit w:=w+v01(n,a) werden die Bilder in den Vektor w eingetragen. Bei jeder Wiederholung der Eintragung wird die Zahl d als Anzahl der Stellen mit dem Wert 0 ermittelt. Wenn d=0 (Abbruchbedingung) wird die Schleife mit der Ausgabe der Anzahl der Schritte z beendet. An den wenigen Ergebnissen könnte man vermuten, dass große Unterschiede in der Anzahl der notwendigen Berechnungsschritte auftreten. Will man die Anzahl der besetzten Stellen für den gesamten Vorgang aufzeichnen, so ist das Programm samm3(n,a) dafür geeignet. 11 MAIN Als Ergänzung ist hier noch durch sammplot die Möglichkeit gegeben, die Entwicklung der Anzahl der besetzten Stellen tabellarisch oder graphisch darzustellen. Die Graphik wurde für verschiedene Durchläufe angefertigt. Unterschiedliche Anzahlen zur Erreichung des vollständigen Satzes (10 Bilder) waren notwendig. . Unterrichtsziele und Durchführung Behandlung interessanter Aufgabenstellungen Vielfach sind Aufgaben der Wahrscheinlichkeitsrechnung zwar interessant, aber wegen der auftretenden kombinatorischen Probleme im Unterricht nicht leicht zugänglich. Auch wenn durch die Methode der Simulation nur näherungsweise Lösungen möglich sind, kann man damit relativ schwierige Aufgaben behandeln und Gefühl für stochastische Fragestellungen entwickeln. 12 MAIN Vergleich der Simulation mit Wahrscheinlichkeitsmodellen Vertrautmachen der Schüler mit der Methode der Simulation, die in der angewandten Wissenschaft vielfach verwendet wird bzw. Vergleich verschiedener Methoden zur Behandlung von Aufgabenstellungen der Wahrscheinlichkeitsrechnung. Die Verwendung der Simulation sollte durchaus auch kritisch betrachtet werden, beispielsweise in der Interpretation der Simulationsergebnisse und in der Problematik der Verwendung von PseudoZufallszahlen, die mit RANDOM erzeugt werden. Querverbindungen zum Fach Informatik Eine Grundlage kann hier als das Arbeiten mit Computeralgebrasystem-Bausteinen [Lehmann E, 2002] gesehen werden. Hervorgehoben wird der Bausteincharakter in der Computeranwendung. Durch das Erstellen und Verwenden von Prozeduren (Funktionsaufrufen) ändert sich die Aufgabenstellung. Neben der Erstellung ist das Experiment, die Analyse, die Strukturierung und Kombination verschiedener Bausteine wichtig und auch eine Grundlage des Arbeitens mit Computern. Damit kann der Mathematikunterricht einen Beitrag zur Arbeitsweise am Computer leisten. Entwickelt man jedoch selbst Modelle zur Simulation, so benötigt man sehr bald programmtechnische Grundlagen wie etwa Erstellung von Funktionsaufrufe, IF-Abfragen, Schleifen,... . Damit könnte für interessierte Schüler eine gute Verbindung zum Programmieren im Fach Informatik geschaffen werden. Unterrichtsdurchführung Computeralgebrasysteme haben für viele Standardaufgaben des Mathematikunterrichts fertige Funktionen eingebaut. Für die Simulation kann man sich mit einfachen vorgefertigten Modellen begnügen und Schüler zu Experimenten und Beobachtungen anregen. Schüler sollen anhand von Arbeitsblättern Aufgaben behandeln, Beobachtungen machen, eigene Vermutungen mit den Ergebnissen der Simulation vergleichen. Voraussetzung ist die Grundlage der Bedienung von DERIVE. Der Unterricht kann sich auf wenige Modelle beschränken, der Zeitaufwand kann gering gehalten werden. Eine andere Art der Beschäftigung ist das Erstellen der Modelle selbst. Dazu sind an der Programmierung interessierte Schüler notwendig, die auch Grundkenntnisse bereits mitbringen. Dann kann dieser Unterricht zu interessanten Ergebnissen an flexiblen Aufgabenstellungen führen. Literatur: Engel, Arthur; Mathematisches Experimentieren mit dem PC; Klett Verlag, Stuttgart 1991 Kayser, Hans-Jürgen; DERIVE als Simulant - Zufallsversuche; Praxis der Mathematik 2/39, 1997, Schwerpunktthemenheft 16: Computer-Einsatz III. Klingen, Leo H.; Experimentieren in stochastischen Situationen mit DERIVE; MU 4, 1995, S 57-64. Kütting, Herbert; Elementare Stochastik; Spektrum Akademischer Verlag GmbH, Heidelberg Berlin, 1999 13 MAIN Lehmann, Eberhard; Mathematiklehren mit Computeralgebrasystem-Bausteinen; Verlag Franzbecker, Hildesheim, Berlin; 2002 Scheid, Harald; Stochastik in der Kollegstufe; Bibliographisches Institut, Mannheim, Wien, Zürich, 1986. Schlöglhofer F., Schoberleitner F.; Computer im Mathematikunterricht, Skriptum zur Lehrerfortbildung, Pädagogisches Institut des Bundes in Oberösterreich, 2002 14