diff options
Diffstat (limited to '')
24 files changed, 712 insertions, 17 deletions
diff --git a/buch/chapters/010-potenzen/Makefile.inc b/buch/chapters/010-potenzen/Makefile.inc index 8dba738..a4505cb 100644 --- a/buch/chapters/010-potenzen/Makefile.inc +++ b/buch/chapters/010-potenzen/Makefile.inc @@ -9,4 +9,7 @@ CHAPTERFILES = $(CHAPTERFILES) \ chapters/010-potenzen/polynome.tex \ chapters/010-potenzen/tschebyscheff.tex \ chapters/010-potenzen/potenzreihen.tex \ + chapters/010-potenzen/uebungsaufgaben/101.tex \ + chapters/010-potenzen/uebungsaufgaben/102.tex \ + chapters/010-potenzen/uebungsaufgaben/103.tex \ chapters/010-potenzen/chapter.tex diff --git a/buch/chapters/010-potenzen/chapter.tex b/buch/chapters/010-potenzen/chapter.tex index d887142..7dc30d4 100644 --- a/buch/chapters/010-potenzen/chapter.tex +++ b/buch/chapters/010-potenzen/chapter.tex @@ -42,11 +42,13 @@ Abschnitt~\ref{buch:potenzen:section:potenzreihen} erinnert. \input{chapters/010-potenzen/tschebyscheff.tex} \input{chapters/010-potenzen/potenzreihen.tex} -%\section*{Übungsaufgaben} -%\rhead{Übungsaufgaben} -%\aufgabetoplevel{chapters/010-potenzen/uebungsaufgaben} -%\begin{uebungsaufgaben} -%\uebungsaufgabe{0} +\section*{Übungsaufgaben} +\rhead{Übungsaufgaben} +\aufgabetoplevel{chapters/010-potenzen/uebungsaufgaben} +\begin{uebungsaufgaben} +\uebungsaufgabe{101} +\uebungsaufgabe{102} +\uebungsaufgabe{103} %\uebungsaufgabe{1} -%\end{uebungsaufgaben} +\end{uebungsaufgaben} diff --git a/buch/chapters/010-potenzen/loesbarkeit.tex b/buch/chapters/010-potenzen/loesbarkeit.tex index af4c2f2..3d55710 100644 --- a/buch/chapters/010-potenzen/loesbarkeit.tex +++ b/buch/chapters/010-potenzen/loesbarkeit.tex @@ -58,7 +58,6 @@ die Nullstelle als Rückgabewert hat. \centering \includegraphics{chapters/010-potenzen/images/wurzel.pdf} \caption[Graph der Wurzelfunktionen]{Graph der Wurzelfunktionen -%$x\mapsto\root{n}\of{x\mathstrut}$ \ensuremath{x\mapsto\root{n}\of{x}} als Umkehrfunktionen der Potenzfunktionen $x\mapsto x^n$ für $n=2$ ({\color{red}rot}), $n=3$ ({\color{blue}blau}), @@ -92,8 +91,6 @@ Für $n=2$ wird die Wurzel als geschrieben. \end{definition} -TODO: Graph der Wurzelfunktion hinzufügen - Mit der Wurzelfunktion ist es jetzt möglich, auch kompliziertere Gleichungen zu lösen: \begin{enumerate} diff --git a/buch/chapters/010-potenzen/polynome.tex b/buch/chapters/010-potenzen/polynome.tex index df74574..5f119e5 100644 --- a/buch/chapters/010-potenzen/polynome.tex +++ b/buch/chapters/010-potenzen/polynome.tex @@ -78,5 +78,27 @@ numerischen Mathematik. % Muss später ausgedehnt werden auf Potenzreihen \subsection{Polynom-Berechnung} -% Effiziente Berechnung von Polynomen ist zentral für die Numerik +Die naive Berechnung der Werte eines Polynoms beginnt mit der Berechnung +der Potenzen. +Die Anzahl nötiger Multiplikationen kann minimiert werden, indem man +das Polynom als +\[ +a_nx^n ++ +a_{n+1}x^{n+1} ++ +\dots ++ +a_1x ++ +a_0 += +((\dots((a_nx+a_{n-1})x+a_{n-2})x+\dots )x+a_1)x+a_0 +\] +schreibt. +Beginnend bei der innersten Klammer sind genau $n$ Multiplikationen +und $n+1$ Additionen nötig, im Gegensatz zu $2n$ Multiplikationen +und $n$ Additionen bei der naiven Vorgehensweise. + + diff --git a/buch/chapters/010-potenzen/potenzreihen.tex b/buch/chapters/010-potenzen/potenzreihen.tex index 932e1e4..a003fcb 100644 --- a/buch/chapters/010-potenzen/potenzreihen.tex +++ b/buch/chapters/010-potenzen/potenzreihen.tex @@ -276,6 +276,12 @@ Auf diese allgemeingültige Eigenschaft wird in Abschnitt eingegangen. \end{beispiel} +Auch das Quotientenkriterium kann zur Berechnung des Konvergenzradius +herangezogen werden. +Falls $a_k\ne 0$ ab einem gewissen Index $k$ ist und der Grenzwert +von $a_{k}/a_{k+1}$ für $k\to\infty$ existiert, dann ist der +Grenzwert der Konvergenzradius. + % % Tayler-Reihe % diff --git a/buch/chapters/010-potenzen/tschebyscheff.tex b/buch/chapters/010-potenzen/tschebyscheff.tex index ca6100b..29d1d4b 100644 --- a/buch/chapters/010-potenzen/tschebyscheff.tex +++ b/buch/chapters/010-potenzen/tschebyscheff.tex @@ -16,6 +16,10 @@ zum Beispiel beim Design von Filtern in der Elektronik. Nach dem Satz von Weierstrass~\ref{buch:potenzen:satz:weierstrass} lässt sich jede stetige Funktion auf einem kompakten Intervall durch ein Polynom approximieren. +Interpolation kann zur Konstruktion solcher approximierender Polynome +verwendet werden, wie die folgenden Abschnitte zeigen sollen. +Die Optimierung des Approximationsfehlers führt auf die Spezifikation +einer interessanten Familie von Polynomen. \subsubsection{Lagrange-Interplationspolynome} Eine mögliche Lösung des Problems, solche approximierenden Polynome @@ -66,6 +70,7 @@ Für $j\ne k$ enthält der Zähler von $l_j(x_k)$ den Faktor $(x-x_k)$, der für $x=x_k$ verschwindet. Daher verschwindet auch $l_j(x)$ für $x=x_k$. +\index{Lagrange-Interpolationspolynom}% Das sogenannte {\em Lagrange-Interpolationspolynom} ist das Polynom \[ p(x) @@ -132,6 +137,7 @@ bekannt, dass die Kosinus eines Vielfachen des Winkels immer als Polynom des Kosinus des Winkels dargestellt werden können. \begin{definition} +\index{Tschebyscheff-Polynom}% \label{buch:potenzen:def:tschebyscheff} Das Polynom \[ @@ -166,6 +172,7 @@ orthogonaler Polynome sind. Mit der Abkürzung $y=\arccos(x)$ oder $x=\cos(y)$ bekommt man aus der Definition~\label{buch:potenzen:def:tschebyscheff} der Tschebyscheff-Polynome +\index{Drei-Term-Rekursion!für Tschebyscheff-Polynome} \begin{align*} xT_n(x) &= @@ -183,7 +190,11 @@ x\,T_n(x) Auflösen nach $T_{n+1}(x)$ ergibt \begin{equation} T_{n+1}(x) = 2x\,T_n(x)-T_{n-1}(x), -\quad T_1(x)=x, T_0(x)=1 +\quad +\text{mit Startwerten} +\quad T_1(x)=x, +\quad +T_0(x)=1. \label{buch:potenzen:tschebyscheff:eqn:rekursion} \end{equation} Damit können die Tschebyscheff-Polynome sehr effizient berechnet werden: @@ -233,6 +244,7 @@ sehr effizient zu berechnen. \subsubsection{Multiplikationsformel} Aus der Definition mit Hilfe trigonometrischer Funktionen lässt sich auch eine Multiplikationsformel ableiten. +\index{Multiplikationsformel}% \begin{satz} Es gilt diff --git a/buch/chapters/010-potenzen/uebungsaufgaben/101.tex b/buch/chapters/010-potenzen/uebungsaufgaben/101.tex new file mode 100644 index 0000000..197b196 --- /dev/null +++ b/buch/chapters/010-potenzen/uebungsaufgaben/101.tex @@ -0,0 +1,37 @@ +Finden Sie eine Potenzreihe für die Funktion +\( +z\mapsto \frac{1}{z} +\) +im Punkt $z_0\ne 0$. + +\begin{hinweis} +Berechnen Sie $1/(z_0 - (z_0-z))$. +\end{hinweis} + +\begin{loesung} +Die Funktion im Hinweis kann in die Form einer geometrischen Reihe +gebracht werden: +\begin{align*} +\frac{1}{z_0-(z_0-z)} +&= +\frac{1}{z_0} +\cdot +\frac{1}{1-(\frac{z_0-z}{z_0})} += +\frac{1}{z_0} +\sum_{k=0}^\infty \biggl(\frac{z_0-z}{z_0}\biggr)^k += +\frac{1}{z_0} +\sum_{k=0}^\infty \frac{(-1)^k}{z_0^k} (z-z_0)^k += +\sum_{k=0}^\infty \frac{(-1)^k}{z_0^{k+1}} (z-z_0)^k. +\end{align*} +Die Koeffizienten der gesuchten Potenzreihe sind daher +\[ +a_k = \frac{(-1)^k}{z_0^{k+1}}. +\qedhere +\] +\end{loesung} + + + diff --git a/buch/chapters/010-potenzen/uebungsaufgaben/102.tex b/buch/chapters/010-potenzen/uebungsaufgaben/102.tex new file mode 100644 index 0000000..98e9fcc --- /dev/null +++ b/buch/chapters/010-potenzen/uebungsaufgaben/102.tex @@ -0,0 +1,17 @@ +Berechnen Sie den Konvergenzradius der Exponentialreihe +$e^z=\sum_{k=0}^\infty z^k/k!$ + +\begin{loesung} +Mit $a_k=1/k!$ folgt mit dem Quotientenkriterium +\[ +\frac{a_{k+1}}{a_k} += +\frac{(k+1)!}{k!} += +k+1 +\to +\infty +\] +für $k\to\infty$. +Der Konvergenzradius ist daher unendlich. +\end{loesung} diff --git a/buch/chapters/010-potenzen/uebungsaufgaben/103.tex b/buch/chapters/010-potenzen/uebungsaufgaben/103.tex new file mode 100644 index 0000000..5d0c3e0 --- /dev/null +++ b/buch/chapters/010-potenzen/uebungsaufgaben/103.tex @@ -0,0 +1,21 @@ +Verwenden Sie das Resultat von Aufgabe~\ref{101}, um die $k$-te Ableitung +der Funktion $1/z$ an der Stelle $z_0$ zu berechnen. + +\begin{loesung} +Die Taylor-Reihe von $f(z)=1/z$ an der Stelle $z_0$ ist +\[ +\mathscr{T}_{z_0}f(z) += +\sum_{k=0}^\infty +\frac{f^{(k)}(z_0)}{k!} +(z-z_0)^k += +\sum_{k=0}^\infty +\frac{(-1)^k}{z_0^{k+1}} (z-z_0)^k +\quad\Rightarrow\quad +f^{(k)}(z_0) += +k!\frac{(-1)^k}{z_0^{k+1}}. +\qedhere +\] +\end{loesung} diff --git a/buch/chapters/090-pde/kugel/Makefile b/buch/chapters/090-pde/kugel/Makefile new file mode 100644 index 0000000..4daf173 --- /dev/null +++ b/buch/chapters/090-pde/kugel/Makefile @@ -0,0 +1,18 @@ +# +# Makefile -- build images for cover +# +# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +all: spherical30.png spherical31.png spherical32.png spherical33.png + +spherical30.png: common.inc spherical30.pov + povray +A0.1 +UA +W1080 +H1080 -Ospherical30.png spherical30.pov + +spherical31.png: common.inc spherical31.pov + povray +A0.1 +UA +W1080 +H1080 -Ospherical31.png spherical31.pov + +spherical32.png: common.inc spherical32.pov + povray +A0.1 +UA +W1080 +H1080 -Ospherical32.png spherical32.pov + +spherical33.png: common.inc spherical33.pov + povray +A0.1 +UA +W1080 +H1080 -Ospherical33.png spherical33.pov diff --git a/buch/chapters/090-pde/kugel/common.inc b/buch/chapters/090-pde/kugel/common.inc new file mode 100644 index 0000000..ed5f78c --- /dev/null +++ b/buch/chapters/090-pde/kugel/common.inc @@ -0,0 +1,227 @@ +// +// common.inc +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#include "colors.inc" +#include "math.inc" + +global_settings { + assumed_gamma 1 +} + +#declare imagescale = 0.035; +#declare thetasteps = 100; + #declare phisteps = 200; + +#declare PositiveColor = rgb<1.0,0.6,0.2>; +#declare NegativeColor = rgb<0.6,0.2,0.6>; + +camera { + location <-33, 20, 50> + look_at <0, 0, 0> + right x * imagescale + up y * imagescale +} + +background { color rgbt <0,0,0,1> } + +light_source { + <10, 5, 40> color White + area_light <1,0,0> <0,0,1>, 10, 10 + adaptive 1 + jitter +} + +//sky_sphere { +// pigment { +// color rgb<1,1,1> +// } +//} + +// +// draw an arrow from <from> to <to> with thickness <arrowthickness> with +// color <c> +// +#macro arrow(from, to, arrowthickness, c) +#declare arrowdirection = vnormalize(to - from); +#declare arrowlength = vlength(to - from); +union { + sphere { + from, 1.1 * arrowthickness + } + cylinder { + from, + from + (arrowlength - 5 * arrowthickness) * arrowdirection, + arrowthickness + } + cone { + from + (arrowlength - 5 * arrowthickness) * arrowdirection, + 2 * arrowthickness, + to, + 0 + } + pigment { + color c + } + finish { + specular 0.9 + metallic + } +} +#end + +//arrow(<-1.1,0,0>, <1.1,0,0>, 0.01, White) +//arrow(<0,-1.1,0>, <0,1.1,0>, 0.01, White) +//arrow(<0,0,-1.1>, <0,0,1.1>, 0.01, White) + +#declare P33 = function(X) { (1-X*X) * sqrt(1-X*X) }; +#declare P33abl = function(X) { -3*X*sqrt(1-X*X) }; +#declare P32 = function(X) { 2.7 * (1-X*X) * X }; +#declare P32abl = function(X) { 2.7 * (1-3*X*X) }; +#declare P31 = function(X) { (0.75) * (5*X*X-1) * sqrt(1-X*X) }; +#declare P31abl = function(X) { 0.75 * (15*X*X-11)*X / sqrt(1-0.9999*X*X) }; +#declare P30 = function(X) { (1/2) * (5*X*X-3)*X }; +#declare P30abl = function(X) { (1/2) * 15*X*X-3 }; + +#macro kugel0(phi,theta) +<cos(phi)*sin(theta), cos(theta), sin(phi)*sin(theta)> +#end +#macro kugelphi(phi,theta) +<-sin(phi)*sin(theta), 0, cos(phi)*sin(theta)> +#end +#macro kugeltheta(phi,theta) +<cos(phi)*cos(theta), -sin(theta), sin(phi)*cos(theta)> +#end + +#declare fcos = function(phi,eps) { abs(cos(phi)) * (1+eps*sgn(cos(phi))) } +#declare fradius = function(r,eps) { sqrt(abs(r)) * (1+eps*sgn(r)) } + +#macro kugel(phi, theta, m, eps) + #switch (m) + #case (0) + fradius(P30(cos(theta)) * cos(m*phi),eps) * kugel0(phi,theta) + #break + #case (1) + fradius(P31(cos(theta)) * cos(m*phi),eps) * kugel0(phi,theta) + #break + #case (2) + fradius(P32(cos(theta)) * cos(m*phi),eps) * kugel0(phi,theta) + #break + #case (3) + fradius(P33(cos(theta)) * cos(m*phi),eps) * kugel0(phi,theta) + #end +#end + +#macro normale(phi, theta, m, eps) + #switch (m) + #case (0) + vnormalize(vcross( + P30(cos(theta))*(-m)*sin(m*phi)*kugelphi(phi,theta) + + + fradius(P30(cos(theta))*cos(m*phi),eps) * kugelphi(phi,theta), + P30abl(cos(theta))*(-sin(theta))*cos(m*phi) * kugel0(phi,theta) + + + fradius(P30(cos(theta))*cos(m*phi),eps) * kugeltheta(phi,theta) + + )) + #break + #case (1) + vnormalize(vcross( + P31(cos(theta))*(-m)*sin(m*phi)*kugelphi(phi,theta) + + + fradius(P31(cos(theta))*cos(m*phi),eps) * kugelphi(phi,theta), + P31abl(cos(theta))*(-sin(theta))*cos(m*phi) * kugel0(phi,theta) + + + fradius(P31(cos(theta))*cos(m*phi),eps) * kugeltheta(phi,theta) + + )) + #break + #case (2) + vnormalize(vcross( + P32(cos(theta))*(-m)*sin(m*phi)*kugelphi(phi,theta) + + + fradius(P32(cos(theta))*cos(m*phi),eps) * kugelphi(phi,theta), + P32abl(cos(theta))*(-sin(theta))*cos(m*phi) * kugel0(phi,theta) + + + fradius(P32(cos(theta))*cos(m*phi),eps) * kugeltheta(phi,theta) + + )) + #break + #case (3) + vnormalize(vcross( + P33(cos(theta))*(-m)*sin(m*phi)*kugelphi(phi,theta) + + + fradius(P33(cos(theta))*cos(m*phi),eps) * kugelphi(phi,theta), + P33abl(cos(theta))*(-sin(theta))*cos(m*phi) * kugel0(phi,theta) + + + fradius(P33(cos(theta))*cos(m*phi),eps) * kugeltheta(phi,theta) + + )) + #break + #end +#end + +#macro kugelflaeche(m, eps, farbe) +mesh { + #declare thetastep = pi / thetasteps; + #declare thetamin = thetastep; + #declare thetamax = pi - thetastep; + + #declare phistep = pi / phisteps; + #declare phimin = 0; + #declare phimax = 2 * pi; + + #declare phi = phimin; + #while (phi < phimax - phistep/2) + triangle { + kugel(0, 0, m, eps), + kugel(phi, thetamin, m, eps), + kugel(phi + phistep, thetamin, m, eps) + } + + #declare theta = thetamin; + #while (theta < thetamax - thetastep/2) + triangle { + kugel(phi, theta, m, eps), + kugel(phi + phistep, theta, m, eps), + kugel(phi + phistep, theta + thetastep, m, eps) + } + triangle { + kugel(phi, theta, m, eps), + kugel(phi, theta + thetastep, m, eps), + kugel(phi + phistep, theta + thetastep, m, eps) + } + #declare theta = theta + thetastep; + #end + + triangle { + kugel(0, pi, m, eps), + kugel(phi, thetamax, m, eps), + kugel(phi + phistep, thetamax, m, eps) + } + + #declare phi = phi + phistep; + #end + pigment { + color farbe + } + finish { + specular 0.95 + metallic + } +} +#end + +//sphere { +// <0,0,0>, 1 +// pigment { +// color rgbt<1,1,1,0.7> +// } +// finish { +// specular 0.95 +// metallic +// } +//} + + diff --git a/buch/chapters/090-pde/kugel/spherical30.png b/buch/chapters/090-pde/kugel/spherical30.png Binary files differnew file mode 100644 index 0000000..d24d786 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical30.png diff --git a/buch/chapters/090-pde/kugel/spherical30.pov b/buch/chapters/090-pde/kugel/spherical30.pov new file mode 100644 index 0000000..1a7d979 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical30.pov @@ -0,0 +1,11 @@ +// +// spherical30.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// + +#version 3.7; +#include "common.inc" + +kugelflaeche(0, 0.001, PositiveColor) +kugelflaeche(0, -0.001, NegativeColor) diff --git a/buch/chapters/090-pde/kugel/spherical31.png b/buch/chapters/090-pde/kugel/spherical31.png Binary files differnew file mode 100644 index 0000000..95d9789 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical31.png diff --git a/buch/chapters/090-pde/kugel/spherical31.pov b/buch/chapters/090-pde/kugel/spherical31.pov new file mode 100644 index 0000000..bc161f0 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical31.pov @@ -0,0 +1,11 @@ +// +// spherical30.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// + +#version 3.7; +#include "common.inc" + +kugelflaeche(1, 0.001, PositiveColor) +kugelflaeche(1, -0.001, NegativeColor) diff --git a/buch/chapters/090-pde/kugel/spherical32.png b/buch/chapters/090-pde/kugel/spherical32.png Binary files differnew file mode 100644 index 0000000..1ba6bd0 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical32.png diff --git a/buch/chapters/090-pde/kugel/spherical32.pov b/buch/chapters/090-pde/kugel/spherical32.pov new file mode 100644 index 0000000..6cb20c8 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical32.pov @@ -0,0 +1,11 @@ +// +// spherical30.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// + +#version 3.7; +#include "common.inc" + +kugelflaeche(2, 0.001, PositiveColor) +kugelflaeche(2, -0.001, NegativeColor) diff --git a/buch/chapters/090-pde/kugel/spherical33.png b/buch/chapters/090-pde/kugel/spherical33.png Binary files differnew file mode 100644 index 0000000..fb9de45 --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical33.png diff --git a/buch/chapters/090-pde/kugel/spherical33.pov b/buch/chapters/090-pde/kugel/spherical33.pov new file mode 100644 index 0000000..8a9a53a --- /dev/null +++ b/buch/chapters/090-pde/kugel/spherical33.pov @@ -0,0 +1,11 @@ +// +// spherical30.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// + +#version 3.7; +#include "common.inc" + +kugelflaeche(3, 0.001, PositiveColor) +kugelflaeche(3, -0.001, NegativeColor) diff --git a/buch/chapters/090-pde/membran/Makefile b/buch/chapters/090-pde/membran/Makefile new file mode 100644 index 0000000..35dfd14 --- /dev/null +++ b/buch/chapters/090-pde/membran/Makefile @@ -0,0 +1,15 @@ +# +# Makefile +# +# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +all: membran.png + +membran.inc: membran.m + octave membran.m + +size="+W1920 +H540" +size="+W3840 +H1080" + +membran.png: membran.pov membran.inc + povray +A0.1 +UA $(size) -Omembran.png membran.pov diff --git a/buch/chapters/090-pde/membran/membran.m b/buch/chapters/090-pde/membran/membran.m new file mode 100644 index 0000000..acc45b9 --- /dev/null +++ b/buch/chapters/090-pde/membran/membran.m @@ -0,0 +1,109 @@ +# +# membran.m +# +# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +# +global n; +n = 3; +global A; +A = 0.2; +global nullstelle; +nullstelle = 13.0152; +global skala; +skala = 1 / nullstelle; +phisteps = 628; +phistep = 2 * pi / phisteps; +rsteps = 200; +rstep = 1 / rsteps; + +fn = fopen("membran.inc", "w"); +fprintf(fn, "#macro flaeche()\n"); + +function retval = punkt(fn, phi, r, n) + global nullstelle; + global skala; + global A; + fprintf(fn, "\n\t <%.4f, %.4f, %.4f>", + r * cos(phi), + A * besselj(n, nullstelle * r) * cos(n * phi), + r * sin(phi) + ); +endfunction + +for i = (0:phisteps) + phi = i * phistep; + r = rstep; + fprintf(fn, "\ttriangle {"); + punkt(fn, 0, 0, n); fprintf(fn, ","); + punkt(fn, phi, rstep, n); fprintf(fn, ","); + punkt(fn, phi+phistep, rstep, n); + fprintf(fn, "\n\t}\n"); + + for j = (1:rsteps-1) + r = j * rstep; + fprintf(fn, "\ttriangle {"); + punkt(fn, phi, r, n); fprintf(fn, ","); + punkt(fn, phi+phistep, r, n); fprintf(fn, ","); + punkt(fn, phi+phistep, r+rstep, n); + fprintf(fn, "\n\t}\n"); + fprintf(fn, "\ttriangle {"); + punkt(fn, phi, r, n); fprintf(fn, ","); + punkt(fn, phi+phistep, r+rstep, n); fprintf(fn, ","); + punkt(fn, phi, r+rstep, n); + fprintf(fn, "\n\t}\n"); + end +end + +fprintf(fn, "#end\n"); + +function retval = ring(fn, r, n) + phisteps = 100; + phistep = 2 * pi / phisteps; + for i = (1:phisteps) + phi = phistep * i; + fprintf(fn, "\tcylinder {"); + punkt(fn, phi - phistep, r, n); fprintf(fn, ","); + punkt(fn, phi, r, n); fprintf(fn, ","); + fprintf(fn, "\n\t r"); + fprintf(fn, "\n\t}\n") + fprintf(fn, "\tsphere {"); + punkt(fn, phi - phistep, r, n); fprintf(fn, ","); + fprintf(fn, "\n\t r"); + fprintf(fn, "\n\t}\n") + end +end + +function retval = radius(fn, phi, n) + rsteps = 100; + rstep = 1 / rsteps; + for i = (0:rsteps-1) + r = i * rstep; + fprintf(fn, "\tcylinder {"); + punkt(fn, phi, r, n); fprintf(fn, ","); + punkt(fn, phi, r+rstep, n); fprintf(fn, ","); + fprintf(fn, "\n\t r"); + fprintf(fn, "\n\t}\n") + fprintf(fn, "\tsphere {"); + punkt(fn, phi, r, n); fprintf(fn, ","); + fprintf(fn, "\n\t r"); + fprintf(fn, "\n\t}\n") + end +end + +fprintf(fn, "#macro phigitter()\n"); +rsteps = 20; +rstep = 1 / rsteps; +for j = (1:rsteps-1) + ring(fn, rstep * j, n); +end +fprintf(fn, "#end\n"); + +fprintf(fn, "#macro rgitter()\n"); +phisteps = 72; +phistep = 2 * pi / phisteps; +for i = (0:phisteps-1) + radius(fn, phistep * i, n); +end +fprintf(fn, "#end\n"); + +fclose(fn); diff --git a/buch/chapters/090-pde/membran/membran.png b/buch/chapters/090-pde/membran/membran.png Binary files differnew file mode 100644 index 0000000..154a4a7 --- /dev/null +++ b/buch/chapters/090-pde/membran/membran.png diff --git a/buch/chapters/090-pde/membran/membran.pov b/buch/chapters/090-pde/membran/membran.pov new file mode 100644 index 0000000..d64294f --- /dev/null +++ b/buch/chapters/090-pde/membran/membran.pov @@ -0,0 +1,163 @@ +// +// membran.pov +// +// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule +// +#version 3.7; +#include "colors.inc" +#include "math.inc" +#include "membran.inc" + +global_settings { + assumed_gamma 1 +} + +#declare imagescale = 0.037; + +camera { + location <-33, 20, 50> + look_at <0, -0.005, 0> + right x * imagescale + up (9/32) * y * imagescale +} + +background { color rgbt <0,0,0,1> } + +light_source { + <10, 15, 40> color White + area_light <1,0,0> <0,0,1>, 10, 10 + adaptive 1 + jitter +} + +//sky_sphere { +// pigment { +// color rgb<1,1,1> +// } +//} + +// +// draw an arrow from <from> to <to> with thickness <arrowthickness> with +// color <c> +// +#macro arrow(from, to, arrowthickness, c) +#declare arrowdirection = vnormalize(to - from); +#declare arrowlength = vlength(to - from); +union { + sphere { + from, 1.1 * arrowthickness + } + cylinder { + from, + from + (arrowlength - 5 * arrowthickness) * arrowdirection, + arrowthickness + } + cone { + from + (arrowlength - 5 * arrowthickness) * arrowdirection, + 2 * arrowthickness, + to, + 0 + } + pigment { + color c + } + finish { + specular 0.9 + metallic + } +} +#end + +//arrow(<-1.1,0,0>, <1.1,0,0>, 0.01, White) +//arrow(<0,-1.1,0>, <0,1.1,0>, 0.01, White) +//arrow(<0,0,-1.1>, <0,0,1.1>, 0.01, White) + +mesh { + flaeche() + pigment { + color rgb<0.8,0.8,0.8> * 1.2 + } + finish { + specular 0.95 + metallic + } +} + +#declare randr = 0.01; + +#macro zylinder(k,n,r) + cylinder { + < cos((2*k+1)*pi/(2*n)), 0, sin((2*k+1)*pi/(2*n)) >, + < -cos((2*k+1)*pi/(2*n)), 0, -sin((2*k+1)*pi/(2*n)) >, + r + } +#end + +#macro ring(R,r) + #declare phisteps = 100; + #declare phistep = 2 * pi / 100; + #declare phimin = 0; + #declare phimax = 2 * pi; + #declare phi = phimin; + #while (phi < phimax - phistep/2) + cylinder { + <R*cos(phi), 0, R*sin(phi)>, + <R*cos(phi+phistep), 0, R*sin(phi+phistep)>, + r + } + sphere { + <R*cos(phi), 0, R*sin(phi)>, r + } + #declare phi = phi + phistep; + #end +#end + +#declare nullstelle = 13.0152; + +union { + ring(1, randr) + pigment { + color rgb<1.0,0.8,0.6> + } + finish { + specular 0.95 + metallic + } +} + +union { + zylinder(0, 3, 0.5*randr) + zylinder(1, 3, 0.5*randr) + zylinder(2, 3, 0.5*randr) + ring(6.3802/nullstelle, 0.5*randr) + ring(9.7610/nullstelle, 0.5*randr) + pigment { + color rgb<1.0,0.8,0.6> + } + finish { + specular 0.95 + metallic + } +} + +#declare r = 0.2*randr; +union { + phigitter() + pigment { + color rgb<0.2,0.6,1.0> + } + finish { + specular 0.95 + metallic + } +} +union { + rgitter() + pigment { + color rgb<1.0,0.4,0.6> + } + finish { + specular 0.95 + metallic + } +} diff --git a/buch/common/teilnehmer.tex b/buch/common/teilnehmer.tex index 5858e78..c8a28fc 100644 --- a/buch/common/teilnehmer.tex +++ b/buch/common/teilnehmer.tex @@ -4,24 +4,26 @@ % (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule % Joshua Bär, % E +Selvin Blöchlinger, % E Marc Benz, % MSE -Manuel Cattaneo, % MSE -Fabian Dünki%, % E +Manuel Cattaneo%, % MSE \\ +Fabian Dünki, % E Robin Eberle, % E Enez Erdem, % B Nilakshan Eswararajah%, % B \\ +Réde Hadouche, % E David Hugentobler, % E Alain Keller, % E -Yanik Kuster, % E -Marc Kühne%, % B +Yanik Kuster%, % E \\ +Marc Kühne, % B Erik Löffler, % E Kevin Meili, % M-I -Andrea Mozzini Vellen, % E -Patrik Müller%, % MSE +Andrea Mozzini Vellen%, % E \\ +Patrik Müller, % MSE Naoki Pross, % E Thierry Schwaller, % E Tim Tönz % E |