Commit 07e4f133 authored by christof's avatar christof
Browse files

processing2

parent 1ea6cde0
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>Spass mit Processing (2)</title>
<link rel="stylesheet" href="dist/reset.css">
<link rel="stylesheet" href="dist/reveal.css">
<link rel="stylesheet" href="dist/theme/black.css" id="theme">
<!-- Theme used for syntax highlighted code -->
<link rel="stylesheet" href="plugin/highlight/monokai.css" id="highlight-theme">
<style>
h3 {
font-size: 110% !important;
}
#spoiler {
opacity: 0;
}
#spoiler:hover {
opacity: 1;
}
.hand {
cursor:pointer;
}
.btn {
cursor:pointer;
border-style:dotted;
border-width:3px;
border-radius: 5px;
border-color:white;
}
.btn:hover {
border-style:dotted;
border-width:3px;
border-radius: 5px;
border-color:red;
}
.slot {
float:left;
margin: 5px;
padding: 5px;
border-color: yellow;
border-style: solid;
border-width: 3px;
background: grey;
}
a {
cursor: pointer;
}
.unitable {
table-layout: fixed;
width: 500px;
font-size: 5px;
}
th,
td {
border-bottom: 0px solid !important;
width: 5px;
overflow: hidden;
}
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<section>Spaß mit Processing</section>
<section>
<section data-background-color="#388e3c">Wiederholung</section>
<section>
<h3>Wiederholung: JavaScript + Processing</h3>
<ul>
<li>JavaScript steuert Aktionen auf Webseiten</li>
<li>Processing stellt zusätzlich einige nette Zeichenanweisungen zur Verfügung</li>
<li>Der <a href="https://editor.p5js.org/" target="_blank">Online-Editor</a> stellt eine
Möglichkeit zur Verfügung, diese Anweisungen direkt in Eurem Browser auszuführen</li>
<li> Eigentlich <i>keine</i> speziellen mathematischen Funktionen (wie Julia) ... dafür
keine Installation, kein Online-Service, ... und trotzdem eine "richtige" Programmiersprache
</li>
</ul>
</section>
<section>
<h3>Referenz</h3>
<ul>
<li><a href="https://p5js.org/reference/" target="_blank">Liste aller Zeichenfunktionen</a></li>
<li>Processing kann auf Eingabe (Maus, Tastatur, Handy-Bewegungen) reagieren</li>
<li>Ablauf meist:
<ul>
<li>Erstellen einer Umgebung mit <code class="lang-javascript">setup()</code></li>
<li>Kontinuierliches Zeichnen mit <code class="lang-javascript">draw()</code> (unter Berücksichtigung von Mausposition, Variable etc)</li>
</ul>
</li>
</ul>
</section>
</section>
<section>
<section data-background-color="#388e3c">Das einfachste Programm</section>
<section>
<h3>Das einfachste Programm</h3>
<pre><code class="lang-javascript">
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
}
</code></pre>
</section>
<section>
<h3>Ein Kreis</h3>
<pre><code class="lang-javascript">
function setup() {
createCanvas(400, 400)
}
function draw() {
// ?? schaue in der Referenz, wie man einen Kreis (circle) zeichnet
}
</code></pre>
</section>
<section data-background-color="#388e3c">Ein bißchen mehr zur Sprache</section>
<section>
<h3>Variablen + Schleifen</h3>
<pre><code class="lang-javascript">function setup() {
createCanvas(800, 800)
}
function draw() {
for (i=0;i<10;i++) {
text("Hallo, i ist " + i, 10,20 * i)
}
}</code></pre>
<p>Bedeutet: Setze für i den Wert 0 ein. Solange i kleiner als 10 ist,
mache das in den geschweiften Klammern, und erhöhe i ("++") nach jedem Schritt.
</p>
</section>
<section>
<h3>Schleifen in Schleifen</h3>
<pre><code class="lang-javascript">anzahlx = 30
anzahly = 30
function setup() {
createCanvas(800, 800)
}
function draw() {
for (y=0;y< anzahly;y++) {
for (x=0;x< anzahlx;x++) {
posx = width / anzahlx * x
posy = height / anzahly * y
circle(posx, posy, 10)
}
}
}</code></pre>
</section>
<section>
<h3>Reaktion auf die Maus-Position+ Zufall</h3>
<pre><code class="lang-javascript">anzahlx = 30
anzahly = 30
function setup() {
createCanvas(800, 800)
}
function draw() {
for (y=0;y< anzahly;y++) {
for (x=0;x< anzahlx;x++) {
posx = width / anzahlx * x
posy = height / anzahly * y
circle(posx + random(-mouseX, mouseX)/20,
posy + random(-mouseY, mouseY)/20, 10)
}
}
}</code></pre>
</section>
<section>
<h3>Ein bißchen nachvollziehen</h3>
<ul>
<li>Ändere anzahlx und anzahly</li>
<li>Was macht random? Was passiert wenn man die 20 ändert?</li>
<li>Was bedeutet die Formel <pre><code class="lang-javascript">posx = width / anzahlx * x</code></pre>?</li>
</ul>
</section>
</section>
<section>
<section data-background-color="#388e3c">Linien</section>
<section>
<h3>Linien: Überlege zuerst!</h3>
<pre><code class="lang-javascript">function setup() {
createCanvas(800,800)
}
function draw() {
background(255)
for(y =0; y< height;y += 20) {
line(0,y, mouseX, mouseY)
}
}</code></pre></section>
<section>
<h3>Jetzt sollen die Linie von allen vier Seiten kommen!</h3>
<div id="sol1" style="visibility:hidden">
<pre><code class="lang-javascript">function setup() {
createCanvas(800,800)
}
function draw() {
background(255)
for(y =0; y < height;y += 20) {
line(0,y, mouseX, mouseY)
line(mouseX, mouseY, width, y)
}
for(x =0; x < width;x += 20) {
line(x,0, mouseX, mouseY)
line(mouseX, mouseY, x, height)
}
}</code></pre>
</div>
<a onclick="showdelay(60)">Zeige Lösung in <span id="delaysec">60</span> Sekunden</a>
<script>
function showdelay(ds) {
if (ds == 0) {
document.getElementById("sol1").style.visibility="visible"
} else {
document.getElementById("delaysec").innerHTML=ds
window.setTimeout(() => showdelay(ds - 1), 1000)
}
}
</script>
</section>
<section>
<h3>Koordinatensysteme</h3>
<ul>
<li>circle(30,20,10) zeichnet einen Kreis an Position (30,20) mit Radius 10</li>
<li>Das ist das gleiche, wie wenn ich mein Koordinatensystem nach (30,20) verschiebe
und einen Kreis bei (0,0) zeichne</li>
<li> translate(x,y) verschiebt das Koordinatensystem</li>
<li> außerdem: rotate(winkel) und scale(vergrößerungsfaktor)</li>
</ul>
</section>
<section>
<h3>Koordinatensysteme 2</h3>
<ul>
<li>push() sichert das aktuelle Koordinatensystem, pop() stellt das letzte Koordinatensystem wieder her</li>
<li>So kann man auch in Schleifen passende Koordinatensysteme erstellen</li>
</ul>
</section>
<section>
<h3>Vielfache Linien</h3>
<pre><code class="lang-javascript">function setup() {
createCanvas(800,800)
strokeWeight(5)
}
function draw() {
background(255)
for(blockx=0;blockx < 10;blockx++) {
for(blocky=0;blocky < 10;blocky++) {
push()
translate(blockx * width / 10, blocky * height / 10)
scale(0.1)
for(y =0; y < height;y += 50) {
line(0,y, mouseX, mouseY)
line(mouseX, mouseY, width, y)
}
for(x =0; x < width;x += 50) {
line(x,0, mouseX, mouseY)
line(mouseX, mouseY, x, height)
}
pop()
}
}
}</code></pre>
</section>
</section>
<section>
<section data-background-color="#388e3c">Was hat das mit Mathe zu tun?</section>
<section>
<h3>Beliebiges Mathe-Rätsel auf youtube</h3>
<ul>
<li><a target="_blank" href="https://www.youtube.com/watch?v=RY7YKSw1t_M">https://www.youtube.com/watch?v=RY7YKSw1t_M</a></li>
<li>Super-Schwer (Online-Mathe-Olympiade für Teams!)</li>
<li>6 Apfelkerne, jeder keimt pro Tag mit Wahrscheinlichkeit 50%. <br>
Wieviele Tage würde man <b>im Durchschnitt</b> warten müssen, bis alle
Kerne gekeimt sind?</li>
<li>Ausrechnen ist schwer, aber simulieren ist einfach!</li>
</ul>
</section>
<section>
<h3>Trotzdem erstmal überlegen</h3>
<ul>
<li>Wie lange warten wir <b>im Durchschnitt</b>, wenn es nur ein Kern ist?</li>
</ul>
</section>
<section>
<h3>Einfacher Fall (Lösung)</h3>
<ul>
<li>Sei d die Anzahl der Tage, die wir im Durchschnitt warten müssen</li>
<li>Ein Tag später ist der Kern mit 50% Wahrscheinlichkeit gekeimt,
d.h. wir müssen einfach einen Tag warten. Fertig</li>
<li> Mit 50% Wahrscheinlichkeit
ist der Kern nicht gekeimt, und wir haben einen Tag gewartet, und müssen
nochmal so lange warten, wie man
eben warten muß, bis ein Kern gekeimt ist &mdash; das ist genau d.</li>
</ul>
</section>
<section>
<h3>Als Formel</h3>
<ul>
<li>Sei d die Anzahl der Tage, die wir im Durchschnitt warten müssen</li>
<li>Also ist d = 1/2 (1+ (1+d))</li>
<li>Wie groß ist d?</li>
<li>Wieviele Tage muß man im Durchschnitt warten, wenn die Wahrscheinlichkeit 10% beträgt?</li>
</ul>
</section>
<section>
<h3>Für 6 Apfelkerne</h3>
<ul>
<li>... wird es super-kompliziert</li>
<li>Aber mit Schleifen und Variablen können wir ein Programm schreiben, dass 10000 Beispiele simuliert</li>
<li>Einfach solange wie noch nicht alle Kerne gekeimt sind ... </li>
<li>... Tage hochzählen</li>
<li> und Jeden noch nicht gekeimten Kern mit Wahrscheinlichkeit 0.5 keimen lassen</li>
</ul>
</section>
<section>
<h3>Lösung</h3>
<pre><code class="lang-javascript">let tage,sim
let gewartet = 0
let kerne=6
function setup() {
for (sim=0; sim < 100000; sim++) {
tage = 0
gekeimt = 0
while (gekeimt < kerne) {
tage = tage + 1
neugekeimt = 0
for (i=0;i < kerne-gekeimt;i++) {
if (random() < 0.5) {
neugekeimt = neugekeimt + 1
}
}
gekeimt = gekeimt + neugekeimt
}
gewartet = gewartet + tage
}
print("Es sind: " + gewartet / sim + " Tage", 10,10)
}</code></pre>
</section>
</section>
</section>
</div>
</div>
<script src="dist/reveal.js"></script>
<script src="plugin/notes/notes.js"></script>
<script src="plugin/markdown/markdown.js"></script>
<script src="plugin/highlight/highlight.js"></script>
<script>
// More info about initialization & config:
// - https://revealjs.com/initialization/
// - https://revealjs.com/config/
Reveal.initialize({
hash: true,
// Learn about plugins: https://revealjs.com/plugins/
plugins: [ RevealMarkdown, RevealHighlight, RevealNotes ]
});
</script>
</body>
</html>
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\def\think{\bigskip\par\centerline{???}\par\bigskip}
\section{Langford Paare}
Schreibe für 1 bis 3 jede Zahl zweimal (also insgesamt 6 Zahlen),
so hintereinander, dass zwischen den zwei Einsen eine andere Zahl,
zwischen den zwei Zweien zwei andere Zahlen und zwischen den
zwei Dreien drei andere Zahlen stehen!
\think
Die Lösung ist 231213, oder umgedreht 312132. Gibt es noch mehr?
Nein.
Und jetzt für 1 bis 4:
\think
23421314, oder umgedreht 41312423.
Jetzt für 5 (aller guten Dinge sind 3).
Warum klappt es nicht? Wir haben 10 Positionen für die Zahlen, 5
gerade und 5 ungerade Positionen. Wenn eine Zahl grade ist, nimmt sie
zwei gerade oder zwei ungerade Poitionen ein. Nachdem alle geraden
Zahlen positioniert sind, bleibt also eine gerade Zahl von geraden,
und eine gerade zahl von ungeraden Positionen übrig.
Eine ungerade Zahl belegt immer eine gerade und eine ungerade Position.
Deshalb muß es eine gerade Anzahl von ungeraden Zahlen geben.
$n=4m$ oder $n = 4m-1$.
Für 7 geht: 7 3 6 2 5 3 2 4 7 6 5 1 4 1. Findet jemand eine andere?
zB eine die mit 7 2 6 3 beginnt?
\think
7 2 6 3 2 4 5 3 7 6 4 1 5 1
Unsere Annahmen waren also falsch. Weder ist das Problem für alle Zahlen lösbar
(und wir haben \textit{bewiesen}, für welche es nicht lösbar ist). Noch ist
die Lösung eindeutig.
Keiner kennt die Anzahl von Lösungen für n>28, aber für=28 ist es eine Zahl mit
22 Stellen.
Zwischenfrage 1: Was ist besonders an 28? $\rightarrow$ perfekte Zahl (bisher
sind 50 vollkommene Zahlen bekannt, alle haben die Form $2^{k-1}(2^k-1)$. Niemand
weiß, ob es ungerade perfekte Zahlen gibt.\\
Zwischenfrage 2: Wieviele Möglichkeiten gibt es, die Zahlen 1\ldots n
hintereinander zu schreiben? $((28*2)! / (2^{28})= 2.66 \times 10^{66})$
\subsection{Schätzen großer Zahlen}
\paragraph{Abschätzung Anzahl Schüler einer Klassenstufe in Leipzig}
\begin{itemize}
\item Erstklässler 2017: 5059, 2016: 5215, 2015: 4683, 2013: 4189
\item Orientierung: Leipzig: 560'000
\item Lebenserwartung Frauen: 82 Jahre
\item Kinder pro Frau: 1.5 (Weltdurchschnitt: 2.4)
\end{itemize}
\paragraph{Anzahl jährlich in Deutschland verbrauchter Windeln}
ca. 5 Milliarden (Wickelzeit bis ca. 3 Jahre, 4-5 Windeln täglich,
ca. 750'000 Geburten Jährlich)
\paragraph{Gewicht der Erde in kg}
\begin{itemize}
\item Erdumfang 40'000 km
\item Volumen der Erde: $4/3 \pi r^3$
\item Dichte 3-5 kg/l
\item $5.9722\,10^{24}$ kg (5,97 Trilliarden Tonnen)
\end{itemize}
\paragraph{Fördermenge Erdöl pro Jahr}
4382,4 Millionen Tonnen
\trenner
\subsection{Psammites}
Archimedes ca. 200 v.u.Z Sandkörner im Universum:
\begin{quote}
Es gibt einige, oh König Gelon, die meinen die Zahl der Sandkörner
wäre unendlich. Und damit meine ich nicht nur den Sand in Syrakus,
oder Sizilien, sondern den in allen bewohnten und unbewohnten
Gebieten zusammen. Dann gibt es welche, die meinen - ohne zu glauben
die Zahl wäre unendlich groß - es wäre keine Zahl bekannt, die groß
genug wäre diese Anzahl zu übertreffen. [...] Aber ich will dir
zeigen, dass die von mir benannten Zahlen nicht nur die Anzahl von
Sandkörnern die die ganze Erde füllen übertreffen, sondern auch die
Zahl von Sandkörnern, die das ganze Universum ausfüllen würden.
\end{quote}
Abschätzung Universum:
Durchmesser Erde / Durchmesser Sonne =Abstand Erde-Sonne / Größe Universum
Wie berechnet man den Durchmesser der Erde?
Zahlen von Archimedes: Zahlen bis 10'000 (myriad) bekannt.
10'000 $\rightarrow$ 10'000 $\times$ 10'000 =A
Zahlen der Periode 1:\\
Einheit der Ordnung 1:1\\
Einheit der Ordnung 2:A\\
Einheit der Ordnung 3:$A\times A$\\
Einheit der Ordnung 4:$A\times A\times A$\\
Einheit der Ordnung A:$A^{A-1}$\\
Alles zusammen ergibt A hundert Millionen mal mit sich selbst multipliziert. Wieviele Stellen?
800 Millionen Stellen.
Aber das alles nennt Archimedes dann ``Zahlen der ersten Periode'' und diese Zahl
``Einheit der zweiten Periode''. In der zweiten Periode dann wieder Ordnungen
1 bis A, dann Zahlen der 3. Periode. Das dann bis Periode A:
B= A a-mal mit sich selbst multipliziert. Und so oft dann A mit sich
selbst multipliziert: Zahl mit 80 Billiarden Stellen.
Archimedes: Angefangen mit Mohnsamen aus 1000 Sandkörnern
(1. Kugel). Zweite Kugel Fingerbreite mit 64'000 Mohnsamen, \ldots
10 Kugel mit $6,4\times10^{62}$ stellen.
Größenschätzung des Universums: Durchmesser des Universums
verhält sich zum Durchmesser der Erdumlaufbahn wir die
Größe der Erdumlaufbahn zur Erde.
\subsection{Knuth-Operator}
\begin{itemize}
\item Versuche, mit 4 Zeichen die größtmögliche Zahl darzustellen!
\item 3*2=3+3, also ``2 Kopien von 3''. Multiplikation ist wiederholte
Addition
\item Dann kann man sich doch vorstellen, dass es auch wiederholte
Multiplikation gibt. $3 \uparrow 2 = 3 \times 3$ ist zweifach wiederholte
Multiplikation.
\item Zwischenfrage: Was ist $3 \uparrow 4$?
\item Jetzt kann man noch weitergehen: Doppelfeil ist die wiederholte
Potenzierung. $3 \uparrow\uparrow 2$ = $3 \uparrow (3 \uparrow 3)$
\item Was ist $3 \uparrow\uparrow 3$ = $3^{27}$ = 7 625 597 484 987 = 7 Billiarden
\item $3 \uparrow\uparrow 4$ ist 7 Billiarden mal die drei mit sich selbst multipliziert,
eine Zahl mit 3,6 Billiarden Stellen
\item n-fach-Wiederholung des Pfeiloperators
\[
a \uparrow^n b = \left\{\begin{array}{ll}
ab & \mbox{falls } n=0\\
a^b & \mbox{falls } n=1\\
a & \mbox{falls } b=1\\
a \uparrow^{(n-1)} (a \uparrow^n (b-1))& \mbox{, sonst}\\
\end{array}\right.
\]
\item s.o. $9 \uparrow^9 9$ ist ein guter Kandidat
\end{itemize}
\subsection{Fleissige Biber}
Definiere eine Zahlenfolge, die folgendermaßen wächst: Für jede Zahl
$n$, sei $\sum(n)$ die größte Zahl, die ein Computer der Größe $n$
erzeugen kann (und danach anhält!).
Dann kann es keinen Computer geben, der diese Funktion für eine
beliebige Zahl ausrechnet.
Turing-Maschine als Modell für Computer.
Busy beaver mit zwei Zuständen:
\begin{tabular}{lll}
Gelesen & Zustand 1 & Zustand 2 \\
0 & 1,Z2,R & 1, Z1, L\\
1 & 1,Z2,L & 1,STOP \\
\end{tabular}
Mit drei Zuständen 6, mit 4 Zusänden 13, mit 5 Zuständen 4098, mit 6
Zuständen eine Zahl mit 18'000 Stellen, mit 7 weiß kein Mensch.
\end{document}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment