ALGORITHMEN - Teil XIV: Jetzt noch irrer!

    Information: Wir verlosen 3 x das Buch "Nur noch dieses Level!" Spiel mit!

    • Neu

      Abt. Aus einem Mathe-Wettbewerb
      ===========================
      stammt folgende Frage: Wie hoch ist die Wahrscheinlichkeit, daß ein zufällig gewähltes Dreieck, dessen Ecken auf dem Einheitskreis mit Radius 1 liegen, den Keismittelpunkt enthält?

      Also ich wußte mir nicht anders zu helfen, als diese Situatioin zu simulieren. Hellere Köpfe (wie z.B. der Ersteller dieses Videos) lösen das durch geometrische Anschauung im Kopf - sogar für den dreidimensionalen Fall. Seufz ...
      Gruss

      Quellcode

      1. WindowTitle "Problem aus einem Mathe-Wettbewerb"
      2. 'Q: https://www.youtube.com/watch?v=OkmNXy7er84
      3. 'Gewählt: MonteCarlo-Methode (Stichproben ziehen)
      4. WindowStyle 24:CLS:font 2:randomize:set("Decimals",17):set("Numwidth",23)
      5. print "\n Wie hoch ist die Wahrscheinnlichkeit, daß ein Zufällig gewähltes Dreieck,"
      6. print "\n dessen Ecken am Einheitskreis liegen, den Keismittelpunkt enthält?\n"
      7. declare N&,Z&,w2!,w3!,x2!,y2!,x3!,y3!,pi2!,fbc!
      8. pi2!=2*pi()
      9. Whileloop 1000000
      10. inc N&
      11. w2!=pi2!*rnd():x2!=cos(w2!):y2!=sin(w2!)
      12. w3!=pi2!*rnd():x3!=cos(w3!):y3!=sin(w3!)
      13. fBC!=y2!*(x2!-x3!)+x2!*(y3!-y2!)
      14. if ((y2!*fBC!)>0) & ((fBC!*(-y3!))>0)
      15. inc Z&
      16. if rnd()<0.0002
      17. locate 7,1
      18. print Z&/N&,
      19. endif
      20. endif
      21. ENDWHILE
      22. cls:print "\n Ergebnis nach 1.000.000 Versuchen: ";Z&/N&,
      23. print "\n Genaues Ergebnis aus geometrischen Überlegungen: ";0.25
      24. beep
      25. Waitinput
      26. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von p. specht ()

    • Neu

      Abt. Etwas für Schuldirektoren :lol:
      ==========================
      Das Nicht-Abschreibenlasser-Problem
      Wie hoch ist die Wahrscheinlichkeit, daß bei im Kreis sitzenden Schülern, die gleichwahrscheinlich alle entweder vom rechten oder linken Nachbarn abschreiben, ausgerechnet VON einem Schüler NICHT abgeschrieben wird?
      Gruss

      P.S.: Mit nackter Simulation, diesmal von Klassen, gelöst ...

      Quellcode

      1. WindowTitle "Das Nicht-Abschreibenlasser-Problem"
      2. 'Q: https://www.youtube.com/watch?v=OkmNXy7er84
      3. 'Gewählt: MonteCarlo-Methode (Stichproben as Klassensamples ziehen)
      4. CLS:font 2:randomize:set("Decimals",17):set("Numwidth",23):declare N&,Z&,S&,A&[]
      5. print "\n Wie hoch ist die Wahrscheinlichkeit, daß bei im Kreis sitzenden Schülern,"
      6. print "\n die gleichwahrscheinlich alle entweder vom rechten oder linken Nachbarn"
      7. print "\n abschreiben, ausgerechnet VON einem Schüler NICHT abgeschrieben wird?\n"
      8. S&=28 'Klassengröße
      9. Whileloop 50000:N&=&Loop 'N. Versuch
      10. clear A&[]:setsize A&[],s&+2
      11. A&[]=1-2*(rnd()<0.5)
      12. A&[0]=A&[s&]
      13. A&[s&+1]=A&[1]
      14. whileloop s&
      15. if (A&[&Loop-1]<0) AND (A&[&Loop+1]>0)
      16. inc Z&
      17. if rnd()<0.0002
      18. locate 9,10
      19. print Z&/N&/s&,
      20. endif
      21. endif
      22. endwhile
      23. ENDWHILE
      24. cls:print "\n Ergebnis nach 50.000 beobachteten Klassen: ";Z&/N&/s&,
      25. print "\n Genaues Ergebnis aus logischen Überlegungen: ";0.25
      26. beep
      27. Waitinput
      28. End
      Alles anzeigen
    • Neu

      Abt. Fibonacci-Zahlen schneller
      =======================
      Die Fibonacci-Zahlen ergeben sich aus der Addition des letzten und des vorletzten Wertes der Folge; Startwerte sind Null und Eins: [ 0 1 1 2 3 5 8 13 21 34 55 89 144 ... ]. Wenn man aber z.B. nach der 1474. Fibonnacci-Zahl fragt, wird die Sache etwas mühsam. Da tauchen Zahlen mit über 300 Stellen auf.

      XProfan kann das zwar Größenordnungsmäßig noch, dennoch verginge ziemlich Zeit, wenn man die Berechnung jedesmal von Null weg starten würde. Da gibt es aber die berühmte Formel von Binet, die nachstehend verwendet wurde. ;-)
      Gruss

      Quellcode

      1. WindowTitle "Die N.te Fibonnacci-Zahl berechnen"
      2. WindowStyle 24:CLS:font 2:declare w!
      3. whileloop -2,1476
      4. w!=N_FIB(&Loop)
      5. print " ";int(&Loop),tab(20);
      6. if w!<0:Print "*** OVERFLOW ERROR! ***"
      7. else: print format$("%g",N_FIB(&Loop))
      8. endif
      9. if %csrlin>33:waitinput 3000*(&Loop<100):cls:endif
      10. endwhile
      11. beep
      12. waitinput
      13. end
      14. proc N_FIB :parameters n&
      15. case n&<1:return 0:case n&=1:return 1:case n&>1474:return -1
      16. var phi!=1.6180339887498949
      17. var wd!=0.44721359549995793
      18. if n& mod 2:return -1*floor((phi!^n&)*-1*wd!)
      19. else :return floor((phi!^n&)*wd!)
      20. endif
      21. endproc
      22. proc floor :parameters x!
      23. ' Gaussklammer-Funktion
      24. case abs(x!)<(10^-35):return 0
      25. case x!>0:return intf(x!)
      26. return (abs(x!-intf(x!)) < 10^-35)-intf(abs(x!-1))
      27. endproc
      28. proc frac :parameters x!
      29. var s!=(x!>0)-(x!<0):x!=abs(x!)
      30. x!=x!-round(x!,0):case x!<0:x!=1+x!
      31. return s!*x!
      32. endproc
      33. proc intf :parameters x!
      34. var s!=(x!>0)-(x!<0)
      35. x!=abs(x!)
      36. x!=x!-frac(x!)
      37. return s!*x!
      38. endproc
      Alles anzeigen
    • Neu

      Abt. Imaginäre Potenz
      =================
      Nein, nichts mit virtuellem Sex. Es geht (mit %i als "Imaginäre Einheit" bei komplexen Zahlen) lediglich um die Frage, wieviel eigentlich %i hoch %i ist. Das erstaunliche Ergebnis: Es handelt sich um eine ganz konkrete, reelle Zahl:
      0.20787957635076193.... - also weit und breit nichts Imaginäres. Wovon man sich auch in diesem Youtube-Beitrag überzeugen kann. Sachen gibt´s ...
      Gruss

      Quellcode

      1. WindowTitle "Imaginäre Einheit %i hoch sich selbst?"
      2. 'Q:https://www.youtube.com/watch?v=9tlHQOKMHGA
      3. WindowStyle 24:CLS:set("decimals",17):font 2
      4. locate 3,3:print "%i^%i = exp(-Pi()/2) = ";exp(-Pi()/2)
      5. clearclip:putclip str$(exp(-Pi()/2))
      6. locate 5,3:print " %i^-%i = 1/exp(-Pi()/2) = ";1/exp(-Pi()/2)
      7. waitinput:End
      8. '%i^%i = exp(ln(%i^%i%)) = exp(%i*ln(%i)).
      9. 'Bekanntlich: exp(phi*%i)=cos(phi)+%i*sin(phi)
      10. 'aber auch: exp(%i*Pi())+1=0 >>>> exp(%i*Pi())=-1
      11. 'Zusammen:
      12. '%e^(%i*%Pi)+1 = 0 >>>> %e^(%i*%Pi)= -1 >>>> %i*%Pi = ln(-1)
      13. '(((Nebenergebnis: %Pi = ln(-1) - %i )))
      14. 'Es ist:
      15. '%i^-2 = -1, %i^-1 = -%i, %i^0 = 1, %i^1 = +%i, %i^2 = -1,
      16. '%i^3 = -%im %i^4 = +1, %i^5 = +%i
      17. 'exp(0) = 1, exp(%i*%Pi*1/2) = %i, exp(%i*%Pi*2/2) = -1, exp(%i*%Pi*3/2) = -%i,
      18. 'exp(%i*%Pi*4/2) = 1, wobei 2*Pi() ident mit 0: exp(%i*%Pi*0/2)=exp(0) = 1
      19. '
      20. 'Somit gilt: exp(%i*%Pi/2) = %i >>>> %i*%Pi/2 = ln(%i)
      21. 'Eingesetzt in unsere Erweiterung: %i^%i = exp(%i*ln(%i))
      22. 'gibt das: %i^%i = exp(%i*%i*%Pi/2) = exp(-1*%Pi/2)
      23. '%i^%i = exp(-1*%Pi/2) = 0.20787957635076193
      Alles anzeigen
    • Neu

      Abt. Neue Rätselecke NR 37: Aus einer Norwegischen Mathe-Olympiade
      ====================================================
      a, b und c seien positive ganze Zahlen größer Null.
      Ein Apfel kostet a $, eine Banane b $, eine Kirsche c $

      Auf einer handschriflichen Rechnung finden wir folgendes:
      b Äpfel + b Bananen + (a + b) Kirschen = 77 $

      Frage: Was kosten 1 Apfel + 2 Bananen + 1 Kirschen
      Gruss :evil3:
    • Neu

      Für Neugierige: Mein brute-Force Lösungsprogramm zu NR 37 (Nicht die offizielle Lösung!)
      Spoiler anzeigen

      Brainfuck-Quellcode

      1. WindowTitle "Neue Rätselecke NR 38"
      2. 'https://www.youtube.com/watch?v=yBW-saaH-PQ
      3. 'Abt. Neue Rätselecke NR 37: Aus der Norwegischen Mathe-Olympiade
      4. '================================================================
      5. 'a, b und c seien positive ganze Zahlen größer Null.
      6. 'Ein Apfel kostet a $, eine Banane b $, eine Kirsche c $
      7. 'Auf einer handschriflichen Rechnung finden wir folgendes:
      8. 'b Äpfel + b Bananen + (a + b) Kirschen = 77 $
      9. 'Frage: Was kosten 1 Apfel + 2 Bananen + 1 Kirsche?
      10. '----------------------------------------------------------
      11. 'Lösungsansatz:
      12. 'b*a + b*b + (a+b)*c = 77
      13. 'b*b + b*a + a*c + b*c = 77
      14. 'b*b + a*(b+c) + b*c = 77
      15. 'b*b + b*c - 77 = -1*a*(b+c)
      16. '(b*(b+c)-77)/(b+c) = -1*a
      17. '-1*(b*(b+c)-77)/(b+c) = a: ganzzahlig?
      18. 'Weiteres Vorgehen: probieren!
      19. CLS:font 1:set("numwidth",4)
      20. appendmenubar 100,"Apfelpreis Bananenpreis Kirschpreis Antwort"
      21. declare a!,b&,c&
      22. whileloop 77:b&=&Loop
      23. whileloop 77:c&=&Loop
      24. a!=-1*(b&*(b&+c&)-77)/(b&+c&)
      25. if (a!>0)
      26. if (a!=int(a!))
      27. print "\n ";int(a!),"$, ",b&,"$, ",c&,"$ Antwort:",int(a!+2*b&+c&),
      28. print "$, Probe: Check Nebenbed.: ";format$("%g", b&*a! + b&*b& + (a!+b&)*c& )
      29. waitinput 1000
      30. endif
      31. endif
      32. endwhile
      33. endwhile
      34. print "\n---\n"
      35. beep
      36. Print " Die Antwort selbst scheint eindeutig!"
      37. waitinput
      38. end
      Alles anzeigen


    • Neu

      Abt. Formelüberprüfung im Einheitsquadrat
      ================================
      Ohne Worte, ausser:
      Gruss

      Quellcode

      1. Windowtitle upper$(\
      2. "Mittlere Distanz zweier gleichverteilter Zufallspunkte im Einheitsquadrat")
      3. WindowStyle 24:CLS:font 2:randomize:set("decimals",17)
      4. declare avg!,x1!,y1!,x2!,y2!,d!,n&,s!
      5. n&=100000
      6. $IFDEF COMPILER:n&=n&*10
      7. $ENDIF
      8. whileloop n&:x1!=rnd():y1!=rnd():x2!=rnd():y2!=rnd()
      9. d!=sqrt(sqr(x2!-x1!)+sqr(y2!-y1!)):s!=s!+d!
      10. if rnd()<0.002:locate 3,1:print " Zwischenergebnis: ";s!/&Loop;" ":endif
      11. endwhile
      12. avg!=s!/n&:locate 2,1:print "\n Ergebnis aus Versuch: ";avg!
      13. Print "\n Ergebnis gem. Formel: ";(2+sqrt(2)+5*ln(1+sqrt(2)))/15
      14. beep:waitinput
      15. end
      Alles anzeigen
    • Neu

      Abt. "Unfaire" Statistik-Formelüberprüfung
      ===============================
      Was ist der Erwartungswert für Gewinne [Euro] bei einem unfairen Münzwurf?
      Die Story: Mein Nachbar wollte mich neulich reinlegen: Er feilte den Rand einer Münze rundherum schräg an und bot mir dann eine "Kopf-oder-Zahl"-Wette an. Die Regel lautete: Es darf so lange weitergeworfen werden, als Kopf kommt. Für Kopf wird dabei jedesmal 1 Euro an den Sieger ausgezahlt. Ich erkannte den Trick leider erst daran, daß ich oft verlor, wenn ich auf die Zahlseite tippte: Kopf kam viel öfter!
      Frage a) Auf welcher Seite wurde abgefeilt?
      Frage b) Falls die Wahrscheinlichkeit für "Zahl" < 50% ist, aber bekannt wäre, z.B. p = 40 %: Welchen Auszahlungs-Erwartungswert hat eine Spielrunde für die Seite, die 'Zahl' wählt?
      Aufgabe c) Überprüfe die Formel: E = x * p/(1-p) = Auszahlung * p(Zahl)/p(Kopf)
      Gruss

      P.S.: Anbei ein Testprogramm zu Aufgabe c)

      Quellcode

      1. WindowTitle "Statistik-Formelüberprüfung"
      2. '========================================
      3. WindowStyle 24:set("decimals",17):randomize
      4. Declare p!,n&,s&,Sum!,w&:Nochma:
      5. CLS
      6. print "\n Wahrscheinlichkeit für Zahl in [%]: ";
      7. input p!:p!=p!/100:case p!=0:p!=0.1:case p!<=0:goto "Nochma"
      8. print "\n Wieviele Spiele auswerten?: N [mind.20] = ";
      9. input n&:case n&=0:n&=100000
      10. case n&<20:goto "Nochma"
      11. Cls
      12. Sum!=0
      13. WhileLoop n&
      14. Repeat
      15. w&=(rnd()<=p!)
      16. inc s&,w&
      17. until w&=0
      18. Sum!=Sum!+s&
      19. s&=0
      20. if rnd()<0.002:locate 2,10:print Sum!/&Loop;" ";:endif
      21. endWhile
      22. Font 2:Cls:print "\n Versuch: ";Sum!/n&;" Eur"
      23. print "\n Formel: ";p!/(1-p!);" Eur":Font 0
      24. beep:waitinput
      25. goto "Nochma"
      Alles anzeigen
      PPS: Welche maximale Manipulation kann durch Anschrägen erzielt werden: Wenig. Mit dicken Münzen müsste es am besten klappen: p = (1- Dicke/Durchmesser)/2 für die Loser-Seite (Ohne Gewähr, ich hab´s nicht ausprobiert :oops: )

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()