aboutsummaryrefslogtreecommitdiffstats
path: root/buch/chapters/090-pde/membran/membran.m
diff options
context:
space:
mode:
Diffstat (limited to 'buch/chapters/090-pde/membran/membran.m')
-rw-r--r--buch/chapters/090-pde/membran/membran.m109
1 files changed, 109 insertions, 0 deletions
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);