aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers/kugel
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--buch/papers/kugel/applications.tex9
-rw-r--r--buch/papers/kugel/images/Makefile30
-rw-r--r--buch/papers/kugel/images/curvature.maxima6
-rw-r--r--buch/papers/kugel/images/curvature.pov139
-rw-r--r--buch/papers/kugel/images/curvgraph.m140
-rw-r--r--buch/papers/kugel/images/spherecurve.cpp292
-rw-r--r--buch/papers/kugel/images/spherecurve.m160
-rw-r--r--buch/papers/kugel/images/spherecurve.maxima13
-rw-r--r--buch/papers/kugel/images/spherecurve.pov73
-rw-r--r--buch/papers/kugel/introduction.tex35
-rw-r--r--buch/papers/kugel/main.tex37
-rw-r--r--buch/papers/kugel/preliminaries.tex346
-rw-r--r--buch/papers/kugel/references.bib226
-rw-r--r--buch/papers/kugel/spherical-harmonics.tex13
14 files changed, 1458 insertions, 61 deletions
diff --git a/buch/papers/kugel/applications.tex b/buch/papers/kugel/applications.tex
new file mode 100644
index 0000000..b2f227e
--- /dev/null
+++ b/buch/papers/kugel/applications.tex
@@ -0,0 +1,9 @@
+% vim:ts=2 sw=2 et spell:
+
+\section{Applications}
+
+\subsection{Electroencephalography (EEG)}
+
+\subsection{Measuring Gravitational Fields}
+
+\subsection{Quantisation of Angular Momentum}
diff --git a/buch/papers/kugel/images/Makefile b/buch/papers/kugel/images/Makefile
new file mode 100644
index 0000000..4226dab
--- /dev/null
+++ b/buch/papers/kugel/images/Makefile
@@ -0,0 +1,30 @@
+#
+# Makefile -- build images
+#
+# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+all: curvature.jpg spherecurve.jpg
+
+curvature.inc: curvgraph.m
+ octave curvgraph.m
+
+curvature.png: curvature.pov curvature.inc
+ povray +A0.1 +W1920 +H1080 +Ocurvature.png curvature.pov
+
+curvature.jpg: curvature.png
+ convert curvature.png -density 300 -units PixelsPerInch curvature.jpg
+
+spherecurve2.inc: spherecurve.m
+ octave spherecurve.m
+
+spherecurve.png: spherecurve.pov spherecurve.inc
+ povray +A0.1 +W1080 +H1080 +Ospherecurve.png spherecurve.pov
+
+spherecurve.jpg: spherecurve.png
+ convert spherecurve.png -density 300 -units PixelsPerInch spherecurve.jpg
+
+spherecurve: spherecurve.cpp
+ g++ -o spherecurve -g -Wall -O spherecurve.cpp
+
+spherecurve.inc: spherecurve
+ ./spherecurve
diff --git a/buch/papers/kugel/images/curvature.maxima b/buch/papers/kugel/images/curvature.maxima
new file mode 100644
index 0000000..6313642
--- /dev/null
+++ b/buch/papers/kugel/images/curvature.maxima
@@ -0,0 +1,6 @@
+
+f: exp(-r^2/sigma^2)/sigma;
+laplacef: ratsimp(diff(r * diff(f,r), r) / r);
+f: exp(-r^2/(2*sigma^2))/(sqrt(2)*sigma);
+laplacef: ratsimp(diff(r * diff(f,r), r) / r);
+
diff --git a/buch/papers/kugel/images/curvature.pov b/buch/papers/kugel/images/curvature.pov
new file mode 100644
index 0000000..3b15d77
--- /dev/null
+++ b/buch/papers/kugel/images/curvature.pov
@@ -0,0 +1,139 @@
+//
+// curvature.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+
+#version 3.7;
+#include "colors.inc"
+
+global_settings {
+ assumed_gamma 1
+}
+
+#declare imagescale = 0.09;
+
+camera {
+ location <10, 10, -40>
+ look_at <0, 0, 0>
+ right 16/9 * x * imagescale
+ up y * imagescale
+}
+
+light_source {
+ <-10, 10, -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(<-3.1,0,0>, <3.1,0,0>, 0.01, White)
+arrow(<0,-1,0>, <0,1,0>, 0.01, White)
+arrow(<0,0,-2.1>, <0,0,2.1>, 0.01, White)
+
+#include "curvature.inc"
+
+#declare sigma = 1;
+#declare s = 1.4;
+#declare N0 = 0.4;
+#declare funktion = function(r) {
+ (exp(-r*r/(sigma*sigma)) / sigma
+ -
+ exp(-r*r/(2*sigma*sigma)) / (sqrt(2)*sigma)) / N0
+};
+#declare hypot = function(xx, yy) { sqrt(xx*xx+yy*yy) };
+
+#declare Funktion = function(x,y) { funktion(hypot(x+s,y)) - funktion(hypot(x-s,y)) };
+#macro punkt(xx,yy)
+ <xx, Funktion(xx, yy), yy>
+#end
+
+#declare griddiameter = 0.006;
+union {
+ #declare xmin = -3;
+ #declare xmax = 3;
+ #declare ymin = -2;
+ #declare ymax = 2;
+
+
+ #declare xstep = 0.2;
+ #declare ystep = 0.02;
+ #declare xx = xmin;
+ #while (xx < xmax + xstep/2)
+ #declare yy = ymin;
+ #declare P = punkt(xx, yy);
+ #while (yy < ymax - ystep/2)
+ #declare yy = yy + ystep;
+ #declare Q = punkt(xx, yy);
+ sphere { P, griddiameter }
+ cylinder { P, Q, griddiameter }
+ #declare P = Q;
+ #end
+ sphere { P, griddiameter }
+ #declare xx = xx + xstep;
+ #end
+
+ #declare xstep = 0.02;
+ #declare ystep = 0.2;
+ #declare yy = ymin;
+ #while (yy < ymax + ystep/2)
+ #declare xx = xmin;
+ #declare P = punkt(xx, yy);
+ #while (xx < xmax - xstep/2)
+ #declare xx = xx + xstep;
+ #declare Q = punkt(xx, yy);
+ sphere { P, griddiameter }
+ cylinder { P, Q, griddiameter }
+ #declare P = Q;
+ #end
+ sphere { P, griddiameter }
+ #declare yy = yy + ystep;
+ #end
+
+ pigment {
+ color rgb<0.8,0.8,0.8>
+ }
+ finish {
+ metallic
+ specular 0.8
+ }
+}
+
diff --git a/buch/papers/kugel/images/curvgraph.m b/buch/papers/kugel/images/curvgraph.m
new file mode 100644
index 0000000..75effd6
--- /dev/null
+++ b/buch/papers/kugel/images/curvgraph.m
@@ -0,0 +1,140 @@
+#
+# curvature.m
+#
+# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+
+global N;
+N = 10;
+
+global sigma2;
+sigma2 = 1;
+
+global s;
+s = 1.4;
+
+global cmax;
+cmax = 0.9;
+global cmin;
+cmin = -0.9;
+
+global Cmax;
+global Cmin;
+Cmax = 0;
+Cmin = 0;
+
+xmin = -3;
+xmax = 3;
+xsteps = 200;
+hx = (xmax - xmin) / xsteps;
+
+ymin = -2;
+ymax = 2;
+ysteps = 200;
+hy = (ymax - ymin) / ysteps;
+
+function retval = f0(r)
+ global sigma2;
+ retval = exp(-r^2/sigma2)/sqrt(sigma2) - exp(-r^2/(2*sigma2))/(sqrt(2*sigma2));
+end
+
+global N0;
+N0 = f0(0)
+N0 = 0.4;
+
+function retval = f1(x,y)
+ global N0;
+ retval = f0(hypot(x, y)) / N0;
+endfunction
+
+function retval = f(x, y)
+ global s;
+ retval = f1(x+s, y) - f1(x-s, y);
+endfunction
+
+function retval = curvature0(r)
+ global sigma2;
+ retval = (
+ -4*(sigma2-r^2)*exp(-r^2/sigma2)
+ +
+ (2*sigma2-r^2)*exp(-r^2/(2*sigma2))
+ ) / (sigma2^(5/2));
+endfunction
+
+function retval = curvature1(x, y)
+ retval = curvature0(hypot(x, y));
+endfunction
+
+function retval = curvature(x, y)
+ global s;
+ retval = curvature1(x+s, y) - curvature1(x-s, y);
+endfunction
+
+function retval = farbe(x, y)
+ global Cmax;
+ global Cmin;
+ global cmax;
+ global cmin;
+ c = curvature(x, y);
+ if (c < Cmin)
+ Cmin = c
+ endif
+ if (c > Cmax)
+ Cmax = c
+ endif
+ u = (c - cmin) / (cmax - cmin);
+ if (u > 1)
+ u = 1;
+ endif
+ if (u < 0)
+ u = 0;
+ endif
+ color = [ u, 0.5, 1-u ];
+ color = color/max(color);
+ color(1,4) = c/2;
+ retval = color;
+endfunction
+
+function dreieck(fn, A, B, C)
+ fprintf(fn, "\ttriangle {\n");
+ fprintf(fn, "\t <%.4f,%.4f,%.4f>,\n", A(1,1), A(1,3), A(1,2));
+ fprintf(fn, "\t <%.4f,%.4f,%.4f>,\n", B(1,1), B(1,3), B(1,2));
+ fprintf(fn, "\t <%.4f,%.4f,%.4f>\n", C(1,1), C(1,3), C(1,2));
+ fprintf(fn, "\t}\n");
+endfunction
+
+function viereck(fn, punkte)
+ color = farbe(mean(punkte(:,1)), mean(punkte(:,2)));
+ fprintf(fn, " mesh {\n");
+ dreieck(fn, punkte(1,:), punkte(2,:), punkte(3,:));
+ dreieck(fn, punkte(2,:), punkte(3,:), punkte(4,:));
+ fprintf(fn, "\tpigment { color rgb<%.4f,%.4f,%.4f> } // %.4f\n",
+ color(1,1), color(1,2), color(1,3), color(1,4));
+ fprintf(fn, " }\n");
+endfunction
+
+fn = fopen("curvature.inc", "w");
+punkte = zeros(4,3);
+for ix = (0:xsteps-1)
+ x = xmin + ix * hx;
+ punkte(1,1) = x;
+ punkte(2,1) = x;
+ punkte(3,1) = x + hx;
+ punkte(4,1) = x + hx;
+ for iy = (0:ysteps-1)
+ y = ymin + iy * hy;
+ punkte(1,2) = y;
+ punkte(2,2) = y + hy;
+ punkte(3,2) = y;
+ punkte(4,2) = y + hy;
+ for i = (1:4)
+ punkte(i,3) = f(punkte(i,1), punkte(i,2));
+ endfor
+ viereck(fn, punkte);
+ end
+end
+#fprintf(fn, " finish { metallic specular 0.5 }\n");
+fclose(fn);
+
+printf("Cmax = %.4f\n", Cmax);
+printf("Cmin = %.4f\n", Cmin);
diff --git a/buch/papers/kugel/images/spherecurve.cpp b/buch/papers/kugel/images/spherecurve.cpp
new file mode 100644
index 0000000..8ddf5e5
--- /dev/null
+++ b/buch/papers/kugel/images/spherecurve.cpp
@@ -0,0 +1,292 @@
+/*
+ * spherecurve.cpp
+ *
+ * (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+ */
+#include <cstdio>
+#include <cstdlib>
+#include <cmath>
+#include <string>
+#include <iostream>
+
+inline double sqr(double x) { return x * x; }
+
+/**
+ * \brief Class for 3d vectors (also used as colors)
+ */
+class vector {
+ double X[3];
+public:
+ vector() { X[0] = X[1] = X[2] = 0; }
+ vector(double a) { X[0] = X[1] = X[2] = a; }
+ vector(double x, double y, double z) {
+ X[0] = x; X[1] = y; X[2] = z;
+ }
+ vector(double theta, double phi) {
+ double s = sin(theta);
+ X[0] = cos(phi) * s;
+ X[1] = sin(phi) * s;
+ X[2] = cos(theta);
+ }
+ vector(const vector& other) {
+ for (int i = 0; i < 3; i++) {
+ X[i] = other.X[i];
+ }
+ }
+ vector operator+(const vector& other) const {
+ return vector(X[0] + other.X[0],
+ X[1] + other.X[1],
+ X[2] + other.X[2]);
+ }
+ vector operator*(double l) const {
+ return vector(X[0] * l, X[1] * l, X[2] * l);
+ }
+ double operator*(const vector& other) const {
+ double s = 0;
+ for (int i = 0; i < 3; i++) {
+ s += X[i] * other.X[i];
+ }
+ return s;
+ }
+ double norm() const {
+ double s = 0;
+ for (int i = 0; i < 3; i++) {
+ s += sqr(X[i]);
+ }
+ return sqrt(s);
+ }
+ vector normalize() const {
+ double l = norm();
+ return vector(X[0]/l, X[1]/l, X[2]/l);
+ }
+ double max() const {
+ return std::max(X[0], std::max(X[1], X[2]));
+ }
+ double l0norm() const {
+ double l = 0;
+ for (int i = 0; i < 3; i++) {
+ if (fabs(X[i]) > l) {
+ l = fabs(X[i]);
+ }
+ }
+ return l;
+ }
+ vector l0normalize() const {
+ double l = l0norm();
+ vector result(X[0]/l, X[1]/l, X[2]/l);
+ return result;
+ }
+ const double& operator[](int i) const { return X[i]; }
+ double& operator[](int i) { return X[i]; }
+};
+
+/**
+ * \brief Derived 3d vector class implementing color
+ *
+ * The constructor in this class converts a single value into a
+ * color on a suitable gradient.
+ */
+class color : public vector {
+public:
+ static double utop;
+ static double ubottom;
+ static double green;
+public:
+ color(double u) {
+ u = (u - ubottom) / (utop - ubottom);
+ if (u > 1) {
+ u = 1;
+ }
+ if (u < 0) {
+ u = 0;
+ }
+ u = pow(u,2);
+ (*this)[0] = u;
+ (*this)[1] = green * u * (1 - u);
+ (*this)[2] = 1-u;
+ double l = l0norm();
+ for (int i = 0; i < 3; i++) {
+ (*this)[i] /= l;
+ }
+ }
+};
+
+double color::utop = 12;
+double color::ubottom = -31;
+double color::green = 0.5;
+
+/**
+ * \brief Surface model
+ *
+ * This class contains the definitions of the functions to plot
+ * and the parameters to
+ */
+class surfacefunction {
+ static vector axes[6];
+
+ double _a;
+ double _A;
+
+ double _umin;
+ double _umax;
+public:
+ double a() const { return _a; }
+ double A() const { return _A; }
+
+ double umin() const { return _umin; }
+ double umax() const { return _umax; }
+
+ surfacefunction(double a, double A) : _a(a), _A(A), _umin(0), _umax(0) {
+ }
+
+ double f(double z) {
+ return A() * exp(a() * (sqr(z) - 1));
+ }
+
+ double g(double z) {
+ return -f(z) * 2*a() * ((2*a()*sqr(z) + (3-2*a()))*sqr(z) - 1);
+ }
+
+ double F(const vector& v) {
+ double s = 0;
+ for (int i = 0; i < 6; i++) {
+ s += f(axes[i] * v);
+ }
+ return s / 6;
+ }
+
+ double G(const vector& v) {
+ double s = 0;
+ for (int i = 0; i < 6; i++) {
+ s += g(axes[i] * v);
+ }
+ return s / 6;
+ }
+protected:
+ color farbe(const vector& v) {
+ double u = G(v);
+ if (u < _umin) {
+ _umin = u;
+ }
+ if (u > _umax) {
+ _umax = u;
+ }
+ return color(u);
+ }
+};
+
+static double phi = (1 + sqrt(5)) / 2;
+static double sl = sqrt(sqr(phi) + 1);
+vector surfacefunction::axes[6] = {
+ vector( 0. , -1./sl, phi/sl ),
+ vector( 0. , 1./sl, phi/sl ),
+ vector( 1./sl, phi/sl, 0. ),
+ vector( -1./sl, phi/sl, 0. ),
+ vector( phi/sl, 0. , 1./sl ),
+ vector( -phi/sl, 0. , 1./sl )
+};
+
+/**
+ * \brief Class to construct the plot
+ */
+class surface : public surfacefunction {
+ FILE *outfile;
+
+ int _phisteps;
+ int _thetasteps;
+ double _hphi;
+ double _htheta;
+public:
+ int phisteps() const { return _phisteps; }
+ int thetasteps() const { return _thetasteps; }
+ double hphi() const { return _hphi; }
+ double htheta() const { return _htheta; }
+ void phisteps(int s) { _phisteps = s; _hphi = 2 * M_PI / s; }
+ void thetasteps(int s) { _thetasteps = s; _htheta = M_PI / s; }
+
+ surface(const std::string& filename, double a, double A)
+ : surfacefunction(a, A) {
+ outfile = fopen(filename.c_str(), "w");
+ phisteps(400);
+ thetasteps(200);
+ }
+
+ ~surface() {
+ fclose(outfile);
+ }
+
+private:
+ void triangle(const vector& v0, const vector& v1, const vector& v2) {
+ fprintf(outfile, " mesh {\n");
+ vector c = (v0 + v1 + v2) * (1./3.);
+ vector color = farbe(c.normalize());
+ vector V0 = v0 * (1 + F(v0));
+ vector V1 = v1 * (1 + F(v1));
+ vector V2 = v2 * (1 + F(v2));
+ fprintf(outfile, "\ttriangle {\n");
+ fprintf(outfile, "\t <%.6f,%.6f,%.6f>,\n",
+ V0[0], V0[2], V0[1]);
+ fprintf(outfile, "\t <%.6f,%.6f,%.6f>,\n",
+ V1[0], V1[2], V1[1]);
+ fprintf(outfile, "\t <%.6f,%.6f,%.6f>\n",
+ V2[0], V2[2], V2[1]);
+ fprintf(outfile, "\t}\n");
+ fprintf(outfile, "\tpigment { color rgb<%.4f,%.4f,%.4f> }\n",
+ color[0], color[1], color[2]);
+ fprintf(outfile, "\tfinish { metallic specular 0.5 }\n");
+ fprintf(outfile, " }\n");
+ }
+
+ void northcap() {
+ vector v0(0, 0, 1);
+ for (int i = 1; i <= phisteps(); i++) {
+ fprintf(outfile, " // northcap i = %d\n", i);
+ vector v1(htheta(), (i - 1) * hphi());
+ vector v2(htheta(), i * hphi());
+ triangle(v0, v1, v2);
+ }
+ }
+
+ void southcap() {
+ vector v0(0, 0, -1);
+ for (int i = 1; i <= phisteps(); i++) {
+ fprintf(outfile, " // southcap i = %d\n", i);
+ vector v1(M_PI - htheta(), (i - 1) * hphi());
+ vector v2(M_PI - htheta(), i * hphi());
+ triangle(v0, v1, v2);
+ }
+ }
+
+ void zone() {
+ for (int j = 1; j < thetasteps() - 1; j++) {
+ for (int i = 1; i <= phisteps(); i++) {
+ fprintf(outfile, " // zone j = %d, i = %d\n",
+ j, i);
+ vector v0( j * htheta(), (i-1) * hphi());
+ vector v1((j+1) * htheta(), (i-1) * hphi());
+ vector v2( j * htheta(), i * hphi());
+ vector v3((j+1) * htheta(), i * hphi());
+ triangle(v0, v1, v2);
+ triangle(v1, v2, v3);
+ }
+ }
+ }
+public:
+ void draw() {
+ northcap();
+ southcap();
+ zone();
+ }
+};
+
+/**
+ * \brief main function
+ */
+int main(int argc, char *argv[]) {
+ surface S("spherecurve.inc", 5, 10);
+ color::green = 1.0;
+ S.draw();
+ std::cout << "umin: " << S.umin() << std::endl;
+ std::cout << "umax: " << S.umax() << std::endl;
+ return EXIT_SUCCESS;
+}
diff --git a/buch/papers/kugel/images/spherecurve.m b/buch/papers/kugel/images/spherecurve.m
new file mode 100644
index 0000000..99d5c9a
--- /dev/null
+++ b/buch/papers/kugel/images/spherecurve.m
@@ -0,0 +1,160 @@
+#
+# spherecurve.m
+#
+# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+global a;
+a = 5;
+global A;
+A = 10;
+
+phisteps = 400;
+hphi = 2 * pi / phisteps;
+thetasteps = 200;
+htheta = pi / thetasteps;
+
+function retval = f(z)
+ global a;
+ global A;
+ retval = A * exp(a * (z^2 - 1));
+endfunction
+
+function retval = g(z)
+ global a;
+ retval = -f(z) * 2 * a * (2 * a * z^4 + (3 - 2*a) * z^2 - 1);
+ # 2
+ # - a 2 4 2 2 a z
+ #(%o6) - %e (4 a z + (6 a - 4 a ) z - 2 a) %e
+endfunction
+
+phi = (1 + sqrt(5)) / 2;
+
+global axes;
+axes = [
+ 0, 0, 1, -1, phi, -phi;
+ 1, -1, phi, phi, 0, 0;
+ phi, phi, 0, 0, 1, 1;
+];
+axes = axes / (sqrt(phi^2+1));
+
+function retval = kugel(theta, phi)
+ retval = [
+ cos(phi) * sin(theta);
+ sin(phi) * sin(theta);
+ cos(theta)
+ ];
+endfunction
+
+function retval = F(v)
+ global axes;
+ s = 0;
+ for i = (1:6)
+ z = axes(:,i)' * v;
+ s = s + f(z);
+ endfor
+ retval = s / 6;
+endfunction
+
+function retval = F2(theta, phi)
+ v = kugel(theta, phi);
+ retval = F(v);
+endfunction
+
+function retval = G(v)
+ global axes;
+ s = 0;
+ for i = (1:6)
+ s = s + g(axes(:,i)' * v);
+ endfor
+ retval = s / 6;
+endfunction
+
+function retval = G2(theta, phi)
+ v = kugel(theta, phi);
+ retval = G(v);
+endfunction
+
+function retval = cnormalize(u)
+ utop = 11;
+ ubottom = -30;
+ retval = (u - ubottom) / (utop - ubottom);
+ if (retval > 1)
+ retval = 1;
+ endif
+ if (retval < 0)
+ retval = 0;
+ endif
+endfunction
+
+global umin;
+umin = 0;
+global umax;
+umax = 0;
+
+function color = farbe(v)
+ global umin;
+ global umax;
+ u = G(v);
+ if (u < umin)
+ umin = u;
+ endif
+ if (u > umax)
+ umax = u;
+ endif
+ u = cnormalize(u);
+ color = [ u, 0.5, 1-u ];
+ color = color/max(color);
+endfunction
+
+function dreieck(fn, v0, v1, v2)
+ fprintf(fn, " mesh {\n");
+ c = (v0 + v1 + v2) / 3;
+ c = c / norm(c);
+ color = farbe(c);
+ v0 = v0 * (1 + F(v0));
+ v1 = v1 * (1 + F(v1));
+ v2 = v2 * (1 + F(v2));
+ fprintf(fn, "\ttriangle {\n");
+ fprintf(fn, "\t <%.6f,%.6f,%.6f>,\n", v0(1,1), v0(3,1), v0(2,1));
+ fprintf(fn, "\t <%.6f,%.6f,%.6f>,\n", v1(1,1), v1(3,1), v1(2,1));
+ fprintf(fn, "\t <%.6f,%.6f,%.6f>\n", v2(1,1), v2(3,1), v2(2,1));
+ fprintf(fn, "\t}\n");
+ fprintf(fn, "\tpigment { color rgb<%.4f,%.4f,%.4f> }\n",
+ color(1,1), color(1,2), color(1,3));
+ fprintf(fn, "\tfinish { metallic specular 0.5 }\n");
+ fprintf(fn, " }\n");
+endfunction
+
+fn = fopen("spherecurve2.inc", "w");
+
+ for i = (1:phisteps)
+ # Polkappe nord
+ v0 = [ 0; 0; 1 ];
+ v1 = kugel(htheta, (i-1) * hphi);
+ v2 = kugel(htheta, i * hphi);
+ fprintf(fn, " // i = %d\n", i);
+ dreieck(fn, v0, v1, v2);
+
+ # Polkappe sued
+ v0 = [ 0; 0; -1 ];
+ v1 = kugel(pi-htheta, (i-1) * hphi);
+ v2 = kugel(pi-htheta, i * hphi);
+ dreieck(fn, v0, v1, v2);
+ endfor
+
+ for j = (1:thetasteps-2)
+ for i = (1:phisteps)
+ v0 = kugel( j * htheta, (i-1) * hphi);
+ v1 = kugel((j+1) * htheta, (i-1) * hphi);
+ v2 = kugel( j * htheta, i * hphi);
+ v3 = kugel((j+1) * htheta, i * hphi);
+ fprintf(fn, " // i = %d, j = %d\n", i, j);
+ dreieck(fn, v0, v1, v2);
+ dreieck(fn, v1, v2, v3);
+ endfor
+ endfor
+
+fclose(fn);
+
+umin
+umax
diff --git a/buch/papers/kugel/images/spherecurve.maxima b/buch/papers/kugel/images/spherecurve.maxima
new file mode 100644
index 0000000..1e9077c
--- /dev/null
+++ b/buch/papers/kugel/images/spherecurve.maxima
@@ -0,0 +1,13 @@
+/*
+ * spherecurv.maxima
+ *
+ * (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+ */
+f: exp(-a * sin(theta)^2);
+
+g: ratsimp(diff(sin(theta) * diff(f, theta), theta)/sin(theta));
+g: subst(z, cos(theta), g);
+g: subst(sqrt(1-z^2), sin(theta), g);
+ratsimp(g);
+
+f: ratsimp(subst(sqrt(1-z^2), sin(theta), f));
diff --git a/buch/papers/kugel/images/spherecurve.pov b/buch/papers/kugel/images/spherecurve.pov
new file mode 100644
index 0000000..b1bf4b8
--- /dev/null
+++ b/buch/papers/kugel/images/spherecurve.pov
@@ -0,0 +1,73 @@
+//
+// curvature.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+
+#version 3.7;
+#include "colors.inc"
+
+global_settings {
+ assumed_gamma 1
+}
+
+#declare imagescale = 0.13;
+
+camera {
+ location <10, 10, -40>
+ look_at <0, 0, 0>
+ right x * imagescale
+ up y * imagescale
+}
+
+light_source {
+ <-10, 10, -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(<-2.7,0,0>, <2.7,0,0>, 0.03, White)
+arrow(<0,-2.7,0>, <0,2.7,0>, 0.03, White)
+arrow(<0,0,-2.7>, <0,0,2.7>, 0.03, White)
+
+#include "spherecurve.inc"
+
diff --git a/buch/papers/kugel/introduction.tex b/buch/papers/kugel/introduction.tex
new file mode 100644
index 0000000..5b09e9c
--- /dev/null
+++ b/buch/papers/kugel/introduction.tex
@@ -0,0 +1,35 @@
+% vim:ts=2 sw=2 et spell tw=78:
+
+\section{Introduction}
+
+This chapter of the book is devoted to the sef of functions called
+\emph{spherical harmonics}. However, before we dive into the topic, we want to
+make a few preliminary remarks to avoid ``upsetting'' a certain type of
+reader. Specifically, we would like to specify that the authors of this
+chapter not mathematicians but engineers, and therefore the text will not be
+always complete with sound proofs after every claim. Instead we will go
+through the topic in a more intuitive way including rigorous proofs only if
+they are enlightening or when they are very short. Where no proofs are given
+we will try to give an intuition for why it is true.
+
+That being said, when talking about spherical harmonics one could start by
+describing their name. The latter may be a cause of some confusion because of
+the misleading translations in other languages. In German the name for this
+set of functions is ``Kugelfunktionen'', which puts the emphasis only on the
+spherical context, whereas the English name ``spherical harmonics'' also
+contains the \emph{harmonic} part hinting at Fourier theories and harmonic
+analysis in general.
+
+The structure of this chapter is organized in the following way. First, we
+will quickly go through some fundamental linear algebra and Fourier theory to
+refresh a few important concepts. In principle, we could have written the
+whole thing starting from a much more abstract level without much preparation,
+but then we would have lost some of the beauty that comes from the
+appreciation of the power of some surprisingly simple ideas. Then once the
+basics are done, we can explore the main topic of spherical harmonics which as
+we will see arises from the eigenfunctions of the Laplacian operator in
+spherical coordinates. Finally, after studying what we think are the most
+beautiful and interesting properties of the spherical harmonics, to conclude
+this journey we will present a few real-world applications, which are of
+course most of interest for engineers.
+
diff --git a/buch/papers/kugel/main.tex b/buch/papers/kugel/main.tex
index 06368af..98d9cb2 100644
--- a/buch/papers/kugel/main.tex
+++ b/buch/papers/kugel/main.tex
@@ -1,39 +1,20 @@
-%
+% vim:ts=2 sw=2 et:
% main.tex -- Paper zum Thema <kugel>
%
% (c) 2020 Hochschule Rapperswil
%
-\chapter{Recurrence Relations for Spherical Harmonics in Quantum Mechanics\label{chapter:kugel}}
-\lhead{Recurrence Relations in Quantum Mechanics}
+\begin{otherlanguage}{english}
+\chapter{Spherical Harmonics\label{chapter:kugel}}
+\lhead{Spherical Harmonics}
\begin{refsection}
\chapterauthor{Manuel Cattaneo, Naoki Pross}
-\begin{verbatim}
-
-Ideas and current research goals
---------------------------------
-
-- Recurrence relations for spherical harmonics
-- Associated Legendre polynomials
-- Rodrigues' type formula aka Rodrigues' formula
-- Applications:
- * Quantization of angular momentum
- * Gravitational field measurements (NASA ebb and flow, ESA goce)
- * Literally anything that needs basis functions on the surface of a sphere
-
-Literature
-----------
-
-- Nichtkommutative Bildverarbeitung, T. Mendez, p57+
-- Linear Algebra Done Right, S. Axler, p212,221,231,237
-- Introduction to Quantum Mechanics, D. J. Griffith, p201+
-- Seminar Quantenmechanik, A. Müller, p101,106,114,121
-- Introduction to Partial Differential Equations, J. Oliver, p510+
-- Partial Differential Equations in Engineering Problems, K. Miller, p175,190
-
-\end{verbatim}
-
+\input{papers/kugel/introduction}
+\input{papers/kugel/preliminaries}
+\input{papers/kugel/spherical-harmonics}
+\input{papers/kugel/applications}
\printbibliography[heading=subbibliography]
\end{refsection}
+\end{otherlanguage}
diff --git a/buch/papers/kugel/preliminaries.tex b/buch/papers/kugel/preliminaries.tex
new file mode 100644
index 0000000..03cd421
--- /dev/null
+++ b/buch/papers/kugel/preliminaries.tex
@@ -0,0 +1,346 @@
+% vim:ts=2 sw=2 et spell tw=78:
+
+\section{Preliminaries}
+
+The purpose of this section is to dust off some concepts that will become
+important later on. This will enable us to be able to get a richer and more
+general view of the topic than just liming ourselves to a specific example.
+
+\subsection{Vectors and inner product spaces}
+
+We shall start with a few fundamentals of linear algebra. We will mostly work
+with complex numbers, but for the sake of generality we will do what most
+textbook do, and write \(\mathbb{K}\) instead of \(\mathbb{C}\) since the
+theory works the same when we replace \(\mathbb{K}\) with the real
+numbers \(\mathbb{R}\).
+
+\begin{definition}[Vector space]
+ \label{kugel:def:vector-space} \nocite{axler_linear_2014}
+ A \emph{vector space} over a field \(\mathbb{K}\) is a set \(V\) with an
+ addition on \(V\) and a multiplication on \(V\) such that the following
+ properties hold:
+ \begin{enumerate}[(a)]
+ \item (Commutativity) \(u + v = v + u\) for all \(u, v \in V\);
+ \item (Associativity) \((u + v) + w = u + (v + w)\) and \((ab)v = a(bv)\)
+ for all \(u, v, w \in V\) and \(a, b \in \mathbb{K}\);
+ \item (Additive identity) There exists an element \(0 \in V\) such that
+ \(v + 0 = v\) for all \(v \in V\);
+ \item (Additive inverse) For every \(v \in V\), there exists a \(w \in V\)
+ such that \(v + w = 0\);
+ \item (Multiplicative identity) \(1 v = v\) for all \(v \in V\);
+ \item (Distributive properties) \(a(u + v) = au + av\) and \((a + b)v = av +
+ bv\) for all \(a, b \in \mathbb{K}\) and all \(u,v \in V\).
+ \end{enumerate}
+\end{definition}
+
+\begin{definition}[Dot product]
+ \label{kugel:def:dot-product}
+ In the vector field \(\mathbb{K}^n\) the scalar or dot product between two
+ vectors \(u, v \in \mathbb{K}^n\) is
+ \(
+ u \cdot v
+ = u_1 \overline{v}_1 + u_2 \overline{v}_2 + \cdots + u_n \overline{v}_n
+ = \sum_{i=1}^n u_i \overline{v}_i.
+ \)
+\end{definition}
+
+\texttt{TODO: Text here.}
+
+\begin{definition}[Span]
+\end{definition}
+
+\texttt{TODO: Text here.}
+
+\begin{definition}[Linear independence]
+\end{definition}
+
+
+\texttt{TODO: Text here.}
+
+\begin{definition}[Basis]
+\end{definition}
+
+\texttt{TODO: Text here.}
+
+\begin{definition}[Inner product]
+ \label{kugel:def:inner-product} \nocite{axler_linear_2014}
+ The \emph{inner product} on \(V\) is a function that takes each ordered pair
+ \((u, v)\) of elements of \(V\) to a number \(\langle u, v \rangle \in
+ \mathbb{K}\) and has the following properties:
+ \begin{enumerate}[(a)]
+ \item (Positivity) \(\langle v, v \rangle \geq 0\) for all \(v \in V\);
+ \item (Definiteness) \(\langle v, v \rangle = 0\) iff \(v = 0\);
+ \item (Additivity) \(
+ \langle u + v, w \rangle =
+ \langle u, w \rangle + \langle v, w \rangle
+ \) for all \(u, v, w \in V\);
+ \item (Homogeneity) \(
+ \langle \lambda u, v \rangle =
+ \lambda \langle u, v \rangle
+ \) for all \(\lambda \in \mathbb{K}\) and all \(u, v \in V\);
+ \item (Conjugate symmetry)
+ \(\langle u, v \rangle = \overline{\langle v, u \rangle}\) for all
+ \(u, v \in V\).
+ \end{enumerate}
+\end{definition}
+
+This newly introduced inner product is thus a generalization of the scalar
+product that does not explicitly depend on rows or columns of vectors. This
+has the interesting consequence that anything that behaves according to the
+rules given in definition \ref{kugel:def:inner-product} \emph{is} an inner
+product. For example if we say that the vector space \(V = \mathbb{R}^n\),
+then the dot product defined in definition \ref{kugel:def:dot-product}
+\(
+ u \cdot v = u_1 \overline{v}_1 + u_2 \overline{v}_2 + \cdots + u_n \overline{v}_n
+\)
+is an inner product in \(V\), and the two are said to form an \emph{inner
+product space}.
+
+\begin{definition}[Inner product space]
+ \nocite{axler_linear_2014}
+ An inner product space is a vector space \(V\) equipped with an inner
+ product on \(V\).
+\end{definition}
+
+How about a more interesting example: the set of continuous complex valued
+functions on the interval \([0; 1]\) can behave like vectors. Functions can
+be added, subtracted, multiplied with scalars, are associative and there is
+even the identity element (zero function \(f(x) = 0\)), so we can create an
+inner product
+\[
+ \langle f, g \rangle = \int_0^1 f(x) \overline{g(x)} \, dx,
+\]
+which will indeed satisfy all of the rules for an inner product (in fact this
+is called the Hermitian inner product\nocite{allard_mathematics_2009}). If
+this last step sounds too good to be true, you are right, because it is not
+quite so simple. The problem that we have swept under the rug here is
+convergence, which any student who took an analysis class will know is a
+rather hairy question. We will not need to go too much into the details since
+formally discussing convergence is definitely beyond the scope of this text,
+however, for our purposes we will still need to dig a little deeper for a few
+more paragraph.
+
+\subsection{Convergence}
+
+In the last section we hinted that we can create ``infinite-dimensional''
+vector spaces using functions as vectors, and inner product spaces by
+integrating the product of two functions of said vector space. However, there
+is a problem with convergence which twofold: the obvious problem is that the
+integral of the inner product may not always converge, while the second is a
+bit more subtle and will be discussed later. The inner product that does
+not converge is a problem because we want a \emph{norm}.
+
+\begin{definition}[\(L^2\) Norm]
+ \nocite{axler_linear_2014}
+ The norm of a vector \(v\) of an inner product space is a number
+ denoted as \(\| v \|\) that is computed by \(\| v \| = \sqrt{\langle v, v
+ \rangle}\).
+\end{definition}
+
+In \(\mathbb{R}^n\) with the dot product (Euclidian space) the norm is the
+geometric length of a vector, while in a more general inner product space the
+norm can be thought of as a more abstract measure of ``length''. In any case
+it is rather important that the expression \(\sqrt{\langle v, v \rangle}\),
+which when using functions \(f: \mathbb{R} \to \mathbb{C}\) becomes
+\[
+ \sqrt{\langle f, f \rangle} =
+ \sqrt{\int_\mathbb{R} f(x) \overline{f(x)} \, dx} =
+ \sqrt{\int_\mathbb{R} |f(x)|^2 \, dx},
+\]
+always exists. So, to fix this problems we do what mathematicians do best:
+make up the solution. Since the integrand under the square root is always the
+square of the magnitude, we can just specify that the functions must be
+\emph{absolutely square integrable}. To be more compact it is common to just
+write \(f \in L^2\), where \(L^2\) denotes the set of absolutely square
+integrable functions.
+
+Now we can tackle the second (much more difficult) problem of convergence
+mentioned at the beginning. Using the technical jargon, we need that our inner
+product space is what is called a \emph{complete metric space}, which just
+means that we can measure distances. For the more motivated readers although
+not really necessary we can also give a more formal definition, the others can
+skip to the next section.
+
+\begin{definition}[Metric space]
+ \nocite{tao_analysis_2016}
+ A metric space \((X, d)\) is a space \(X\) of objects (called points),
+ together with a distance function or metric \(d: X \times X \to [0,
+ +\infty)\), which associates to each pair \(x, y\) of points in \(X\) a
+ non-negative real number \(d(x, y) \geq 0\). Furthermore, the metric must
+ satisfy the following four axioms:
+ \begin{enumerate}[(a)]
+ \item For any \(x\in X\), we have \(d(x, x) = 0\).
+ \item (Positivity) For any \emph{distinct} \(x, y \in X\), we have
+ \(d(x,y) > 0\).
+ \item (Symmetry) For any \(x,y \in X\), we have \(d(x, y) = d(y, x)\).
+ \item (Triangle inequality) For any \(x, y, z \in X\) we have
+ \(d(x, z) \leq d(x, y) + d(y, z)\).
+ \end{enumerate}
+\end{definition}
+
+As is seen in the definition metric spaces are a very abstract concept and
+rely on rather weak statements, which makes them very general. Now, the more
+intimidating part is the \emph{completeness} which is defined as follows.
+
+\begin{definition}[Complete metric space]
+ \label{kugel:def:complete-metric-space}
+ A metric space \((X, d)\) is said to be \emph{complete} iff every Cauchy
+ sequence in \((X, d)\) is convergent in \((X, d)\).
+\end{definition}
+
+To fully explain definition \ref{kugel:def:complete-metric-space} it would
+take a few more pages, which would get a bit too heavy. So instead we will
+give an informal explanation through an counterexample to get a feeling of
+what is actually happening. Cauchy sequences is a rather fancy name for a
+sequence for example of numbers that keep changing, but in a such a way that
+at some point the change keeps getting smaller (the infamous
+\(\varepsilon-\delta\) definition). For example consider the sequence of
+numbers
+\[
+ 1,
+ 1.4,
+ 1.41,
+ 1.414,
+ 1.4142,
+ 1.41421,
+ \ldots
+\]
+in the metric space \((\mathbb{Q}, d)\) with \(d(x, y) = |x - y|\). Each
+element of this sequence can be written with some fraction in \(\mathbb{Q}\),
+but in \(\mathbb{R}\) the sequence is converging towards the number
+\(\sqrt{2}\). However, \(\sqrt{2} \notin \mathbb{Q}\). Since we can find a
+sequence of fractions whose distance's limit is not in \(\mathbb{Q}\), the
+metric space \((\mathbb{Q}, d)\) is \emph{not} complete. Conversely,
+\((\mathbb{R}, d)\) is a complete metric space since \(\sqrt{2} \in
+\mathbb{R}\).
+
+Of course the analogy above also applies to vectors, i.e. if in an inner
+product space \(V\) over a field \(\mathbb{K}\) all sequences of vectors have
+a distance that is always in \(\mathbb{K}\), then \(V\) is also a complete
+metric space. In the jargon, this particular case is what is known as a
+Hilbert space, after the incredibly influential German mathematician David
+Hilbert.
+
+\begin{definition}[Hilbert space]
+ A Hilbert space is a vector space \(H\) with an inner product \(\langle f, g
+ \rangle\) and a norm \(\sqrt{\langle f, f \rangle}\) defined such that \(H\)
+ turns into a complete metric space.
+\end{definition}
+
+\subsection{Orthogonal basis and Fourier series}
+
+Now we finally have almost everything we need to get into the domain of
+Fourier theory from the perspective of linear algebra. However, we still need
+to briefly discuss the matter of orthogonality\footnote{See chapter
+\ref{buch:chapter:orthogonalitaet} for more on orthogonality.} and
+periodicity. Both should be very straightforward and already well known.
+
+\begin{definition}[Orthogonality and orthonormality]
+ \label{kugel:def:orthogonality}
+ In an inner product space \(V\) two vectors \(u, v \in V\) are said to be
+ \emph{orthogonal} if \(\langle u, v \rangle = 0\). Further, if both \(u\)
+ and \(v\) are of unit length, i.e. \(\| u \| = 1\) and \(\| v \| = 1\), then
+ they are said to be ortho\emph{normal}.
+\end{definition}
+
+\begin{definition}[1-periodic function and \(C(\mathbb{R}/\mathbb{Z}; \mathbb{C})\)]
+ A function is said to be 1-periodic if \(f(x + 1) = f(x)\). The set of
+ 1-periodic function from the real to the complex
+ numbers is denoted by \(C(\mathbb{R}/\mathbb{Z}; \mathbb{C})\).
+\end{definition}
+
+In the definition above the notation \(\mathbb{R}/\mathbb{Z}\) was borrowed
+from group theory, and is what is known as a quotient group; Not really
+relevant for our discussion but still a ``good to know''. More importantly, it
+is worth noting that we could have also defined more generally \(L\)-periodic
+functions with \(L\in\mathbb{R}\), however, this would introduce a few ugly
+\(L\)'s everywhere which are not really necessary (it will always be possible
+to extend the theorems to \(\mathbb{R} / L\mathbb{Z}\)). Thus, we will
+continue without the \(L\)'s, and to simplify the language unless specified
+otherwise ``periodic'' will mean 1-periodic. Having said that, we can
+officially begin with the Fourier theory.
+
+\begin{lemma}
+ The subset of absolutely square integrable functions in
+ \(C(\mathbb{R}/\mathbb{Z}; \mathbb{C})\) together with the Hermitian inner
+ product
+ \[
+ \langle f, g \rangle = \int_{[0; 1)} f(x) \overline{g(x)} \, dx
+ \]
+ form a Hilbert space.
+\end{lemma}
+\begin{proof}
+ It is not too difficult to show that the functions in \(C(\mathbb{R} /
+ \mathbb{Z}; \mathbb{C})\) are well behaved and form a vector space. Thus,
+ what remains is that the norm needs to form a complete metric space.
+ However, this follows from the fact that we defined the functions to be
+ absolutely square integrable\footnote{For the curious on why, it is because
+ \(L^2\) is what is known as a \emph{compact metric space}, and compact
+ metric spaces are always complete (see \cite{eck_metric_2022,
+ tao_analysis_2016}). To explain compactness and the relationship between
+ compactness and completeness is definitely beyond the goals of this text.}.
+\end{proof}
+
+This was probably not a very satisfactory proof since we brushed off a lot of
+details by referencing other theorems. However, the main takeaway should be
+that we have ``constructed'' this new Hilbert space of functions in a such a
+way that from now on we will not have to worry about the details of
+convergence.
+
+\begin{lemma}
+ \label{kugel:lemma:exp-1d}
+ The set of functions \(E_n(x) = e^{i2\pi nx}\) on the interval
+ \([0; 1)\) with \(n \in \mathbb{Z} \) are orthonormal.
+\end{lemma}
+\begin{proof}
+ We need to show that \(\langle E_m, E_n \rangle\) equals 1 when \(m = n\)
+ and zero otherwise. This is a straightforward computation: We start by
+ unpacking the notation to get
+ \[
+ \langle E_m, E_n \rangle
+ = \int_0^1 e^{i2\pi mx} e^{- i2\pi nx} \, dx
+ = \int_0^1 e^{i2\pi (m - n)x} \, dx,
+ \]
+ then inside the integrand we can see that when \(m = n\) we have \(e^0 = 1\) and
+ thus \( \int_0^1 dx = 1, \) while when \(m \neq n\) we can just say that we
+ have a new non-zero integer
+ \(k := m - n\) and
+ \[
+ \int_0^1 e^{i2\pi kx} \, dx
+ = \frac{e^{i2\pi k} - e^{0}}{i2\pi k}
+ = \frac{1 - 1}{i2\pi k}
+ = 0
+ \]
+ as desired. \qedhere
+\end{proof}
+
+\begin{definition}[Spectrum]
+\end{definition}
+
+\begin{theorem}[Fourier Theorem]
+ \[
+ \lim_{N \to \infty} \left \|
+ f(x) - \sum_{n = -N}^N \hat{f}(n) E_n(x)
+ \right \|_2 = 0
+ \]
+\end{theorem}
+
+\begin{lemma}
+ The set of functions \(E_{m, n}(\xi, \eta) = e^{i2\pi m\xi}e^{i2\pi n\eta}\)
+ on the square \([0; 1)^2\) with \(m, n \in \mathbb{Z} \) are orthonormal.
+\end{lemma}
+\begin{proof}
+ The proof is almost identical to lemma \ref{kugel:lemma:exp-1d}, with the
+ only difference that the inner product is given by
+ \[
+ \langle E_{m,n}, E_{m', n'} \rangle
+ = \iint_{[0;1)^2}
+ E_{m, n}(\xi, \eta) \overline{E_{m', n'} (\xi, \eta)}
+ \, d\xi d\eta
+ .\qedhere
+ \]
+\end{proof}
+
+\subsection{Laplacian operator}
+
+\subsection{Eigenvalue Problem}
diff --git a/buch/papers/kugel/references.bib b/buch/papers/kugel/references.bib
index 013da60..b74c5cd 100644
--- a/buch/papers/kugel/references.bib
+++ b/buch/papers/kugel/references.bib
@@ -1,35 +1,195 @@
-%
-% references.bib -- Bibliography file for the paper kugel
-%
-% (c) 2020 Autor, Hochschule Rapperswil
-%
-
-@online{kugel:bibtex,
- title = {BibTeX},
- url = {https://de.wikipedia.org/wiki/BibTeX},
- date = {2020-02-06},
- year = {2020},
- month = {2},
- day = {6}
-}
-
-@book{kugel:numerical-analysis,
- title = {Numerical Analysis},
- author = {David Kincaid and Ward Cheney},
- publisher = {American Mathematical Society},
- year = {2002},
- isbn = {978-8-8218-4788-6},
- inseries = {Pure and applied undegraduate texts},
- volume = {2}
-}
-
-@article{kugel:mendezmueller,
- author = { Tabea Méndez and Andreas Müller },
- title = { Noncommutative harmonic analysis and image registration },
- journal = { Appl. Comput. Harmon. Anal.},
- year = 2019,
- volume = 47,
- pages = {607--627},
- url = {https://doi.org/10.1016/j.acha.2017.11.004}
+
+@article{carvalhaes_surface_2015,
+ title = {The surface Laplacian technique in {EEG}: Theory and methods},
+ volume = {97},
+ issn = {01678760},
+ url = {https://linkinghub.elsevier.com/retrieve/pii/S0167876015001749},
+ doi = {10.1016/j.ijpsycho.2015.04.023},
+ shorttitle = {The surface Laplacian technique in {EEG}},
+ pages = {174--188},
+ number = {3},
+ journaltitle = {International Journal of Psychophysiology},
+ shortjournal = {International Journal of Psychophysiology},
+ author = {Carvalhaes, Claudio and de Barros, J. Acacio},
+ urldate = {2022-05-16},
+ date = {2015-09},
+ langid = {english},
+ file = {Submitted Version:/Users/npross/Zotero/storage/SN4YUNQC/Carvalhaes and de Barros - 2015 - The surface Laplacian technique in EEG Theory and.pdf:application/pdf},
+}
+
+@video{minutephysics_better_2021,
+ title = {A Better Way To Picture Atoms},
+ url = {https://www.youtube.com/watch?v=W2Xb2GFK2yc},
+ abstract = {Thanks to Google for sponsoring a portion of this video!
+Support {MinutePhysics} on Patreon: http://www.patreon.com/minutephysics
+
+This video is about using Bohmian trajectories to visualize the wavefunctions of hydrogen orbitals, rendered in 3D using custom python code in Blender.
+
+{REFERENCES}
+A Suggested Interpretation of the Quantum Theory in Terms of "Hidden" Variables. I
+David Bohm, Physical Review, Vol 85 No. 2, January 15, 1952
+
+Speakable and Unspeakable in Quantum Mechanics
+J. S. Bell
+
+Trajectory construction of Dirac evolution
+Peter Holland
+
+The de Broglie-Bohm Causal Interpretation of Quantum Mechanics and its Application to some Simple Systems by Caroline Colijn
+
+Bohmian Trajectories as the Foundation of Quantum Mechanics
+http://arxiv.org/abs/0912.2666v1
+
+The Pilot-Wave Perspective on Quantum Scattering and Tunneling
+http://arxiv.org/abs/1210.7265v2
+
+A Quantum Potential Description of One-Dimensional Time-Dependent Scattering From Square Barriers and Square Wells
+Dewdney, Foundations of Physics, {VoL} 12, No. 1, 1982
+
+Link to Patreon Supporters: http://www.minutephysics.com/supporters/
+
+{MinutePhysics} is on twitter - @minutephysics
+And facebook - http://facebook.com/minutephysics
+
+Minute Physics provides an energetic and entertaining view of old and new problems in physics -- all in a minute!
+
+Created by Henry Reich},
+ author = {{minutephysics}},
+ urldate = {2022-05-19},
+ date = {2021-05-19},
+}
+
+@article{ries_role_2013,
+ title = {Role of the lateral prefrontal cortex in speech monitoring},
+ volume = {7},
+ issn = {1662-5161},
+ url = {http://journal.frontiersin.org/article/10.3389/fnhum.2013.00703/abstract},
+ doi = {10.3389/fnhum.2013.00703},
+ journaltitle = {Frontiers in Human Neuroscience},
+ shortjournal = {Front. Hum. Neurosci.},
+ author = {Riès, Stephanie K. and Xie, Kira and Haaland, Kathleen Y. and Dronkers, Nina F. and Knight, Robert T.},
+ urldate = {2022-05-16},
+ date = {2013},
+ file = {Full Text:/Users/npross/Zotero/storage/W7KTJB8E/Riès et al. - 2013 - Role of the lateral prefrontal cortex in speech mo.pdf:application/pdf},
+}
+
+@online{saylor_academy_atomic_2012,
+ title = {Atomic Orbitals and Their Energies},
+ url = {http://saylordotorg.github.io/text_general-chemistry-principles-patterns-and-applications-v1.0/s10-05-atomic-orbitals-and-their-ener.html},
+ author = {{Saylor Academy}},
+ urldate = {2022-05-30},
+ date = {2012},
+ file = {Atomic Orbitals and Their Energies:/Users/npross/Zotero/storage/LJ8DM3YI/s10-05-atomic-orbitals-and-their-ener.html:text/html},
+}
+
+@inproceedings{schmitz_using_2012,
+ location = {Santa Clara, {CA}, {USA}},
+ title = {Using spherical harmonics for modeling antenna patterns},
+ isbn = {978-1-4577-1155-8 978-1-4577-1153-4 978-1-4577-1154-1},
+ url = {http://ieeexplore.ieee.org/document/6175298/},
+ doi = {10.1109/RWS.2012.6175298},
+ eventtitle = {2012 {IEEE} Radio and Wireless Symposium ({RWS})},
+ pages = {155--158},
+ booktitle = {2012 {IEEE} Radio and Wireless Symposium},
+ publisher = {{IEEE}},
+ author = {Schmitz, Arne and Karolski, Thomas and Kobbelt, Leif},
+ urldate = {2022-05-16},
+ date = {2012-01},
+}
+
+@online{allard_mathematics_2009,
+ title = {Mathematics 203-204 - Basic Analysis I-{II}},
+ url = {https://services.math.duke.edu/~wka/math204/},
+ author = {Allard, William K.},
+ urldate = {2022-07-25},
+ date = {2009},
+ file = {Mathematics 203-204 - Basic Analysis I-II:/Users/npross/Zotero/storage/LJISXBCM/math204.html:text/html},
+}
+
+@book{olver_introduction_2013,
+ location = {New York, {NY}},
+ title = {Introduction to partial differential equations},
+ isbn = {978-3-319-02098-3},
+ publisher = {Springer Science+Business Media, {LLC}},
+ author = {Olver, Peter J.},
+ date = {2013},
+}
+
+@book{miller_partial_2020,
+ location = {Mineola, New York},
+ title = {Partial differential equations in engineering problems},
+ isbn = {978-0-486-84329-2},
+ abstract = {"Requiring only an elementary knowledge of ordinary differential equations, this concise text begins by deriving common partial differential equations associated with vibration, heat flow, electricity, and elasticity. The treatment discusses and applies the techniques of Fourier analysis to these equations and extends the discussion to the Fourier integral. Final chapters discuss Legendre, Bessel, and Mathieu functions and the general structure of differential operators"--},
+ publisher = {Dover Publications, Inc},
+ author = {Miller, Kenneth S.},
+ date = {2020},
+ keywords = {Differential equations, Partial},
+}
+
+@book{asmar_complex_2018,
+ location = {Cham},
+ title = {Complex analysis with applications},
+ isbn = {978-3-319-94062-5},
+ series = {Undergraduate texts in mathematics},
+ pagetotal = {494},
+ publisher = {Springer},
+ author = {Asmar, Nakhlé H. and Grafakos, Loukas},
+ date = {2018},
+ doi = {10.1007/978-3-319-94063-2},
+ file = {Table of Contents PDF:/Users/npross/Zotero/storage/G2Q2RDFU/Asmar and Grafakos - 2018 - Complex analysis with applications.pdf:application/pdf},
+}
+
+@book{adkins_ordinary_2012,
+ location = {New York},
+ title = {Ordinary differential equations},
+ isbn = {978-1-4614-3617-1},
+ series = {Undergraduate texts in mathematics},
+ pagetotal = {799},
+ publisher = {Springer},
+ author = {Adkins, William A. and Davidson, Mark G.},
+ date = {2012},
+ keywords = {Differential equations},
+}
+
+@book{griffiths_introduction_2015,
+ title = {Introduction to electrodynamics},
+ isbn = {978-93-325-5044-5},
+ author = {Griffiths, David J},
+ date = {2015},
+ note = {{OCLC}: 965197645},
+}
+
+@book{tao_analysis_2016,
+ title = {Analysis 2},
+ isbn = {978-981-10-1804-6},
+ url = {https://doi.org/10.1007/978-981-10-1804-6},
+ author = {Tao, Terence},
+ urldate = {2022-07-25},
+ date = {2016},
+ note = {{OCLC}: 965325026},
+}
+
+@book{axler_linear_2015,
+ location = {Cham},
+ title = {Linear Algebra Done Right},
+ isbn = {978-3-319-11079-0 978-3-319-11080-6},
+ url = {https://link.springer.com/10.1007/978-3-319-11080-6},
+ series = {Undergraduate Texts in Mathematics},
+ publisher = {Springer International Publishing},
+ author = {Axler, Sheldon},
+ urldate = {2022-07-25},
+ date = {2015},
+ langid = {english},
+ doi = {10.1007/978-3-319-11080-6},
+ file = {Submitted Version:/Users/npross/Zotero/storage/3Y8MX74N/Axler - 2015 - Linear Algebra Done Right.pdf:application/pdf},
}
+@online{eck_metric_2022,
+ title = {Metric Spaces: Completeness},
+ url = {https://math.hws.edu/eck/metric-spaces/completeness.html},
+ titleaddon = {Math 331: Foundations of Analysis},
+ author = {Eck, David J.},
+ urldate = {2022-08-01},
+ date = {2022},
+ file = {Metric Spaces\: Completeness:/Users/npross/Zotero/storage/5JYEE8NF/completeness.html:text/html},
+} \ No newline at end of file
diff --git a/buch/papers/kugel/spherical-harmonics.tex b/buch/papers/kugel/spherical-harmonics.tex
new file mode 100644
index 0000000..6b23ce5
--- /dev/null
+++ b/buch/papers/kugel/spherical-harmonics.tex
@@ -0,0 +1,13 @@
+% vim:ts=2 sw=2 et spell:
+
+\section{Spherical Harmonics}
+
+\subsection{Eigenvalue Problem in Spherical Coordinates}
+
+\subsection{Properties}
+
+\subsection{Recurrence Relations}
+
+\section{Series Expansions in \(C(S^2)\)}
+
+\nocite{olver_introduction_2013}