Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

263 рядки
11KB

  1. \documentclass[uebung]{../../../lecture}
  2. \title{Einführung in die Numerik: Übungsblatt 10}
  3. \author{Leon Burgard, Christian Merten}
  4. \begin{document}
  5. \punkte
  6. \begin{aufgabe}
  7. Beh.: Seien $n$ paarweise verschiedene Stützstellen $\{x_0, \ldots, x_{n-1}\} $ gegeben
  8. und eine Permutation derselben $\{\tilde{x}_0, \ldots, \tilde{x}_{n-1}\} $. Dann gilt
  9. \[
  10. f[x_0, \ldots, x_{n-1}] = f[\tilde{x}_0, \ldots, \tilde{x}_{n-1}]
  11. .\]
  12. \begin{proof}
  13. Es gilt nach VL mit der Newtondarstellung für das Interpolationspolynom
  14. zu den Stützstellen $x_0, \ldots, x_{n-1}$:
  15. \begin{salign*}
  16. p(x) &= \sum_{i=0}^{n-1} y[x_0, \ldots, x_i] N_i(x) \\
  17. &= \sum_{i=0}^{n-2} y[x_0, \ldots, x_i] N_i(x) + y[x_0, \ldots, x_{n-1}] N_{n-1}(x) \\
  18. &= \mathcal{O}(x^{n-2}) + y[x_0, \ldots, x_{n-1}] \prod_{i=0}^{n-2} (x - x_i) \\
  19. &= \mathcal{O}(x^{n-2}) + y[x_0, \ldots, x_{n-1}] \left(x^{n-1} + \mathcal{O}(x^{n-2})\right) \\
  20. &= y[x_0, \ldots, x_{n-1}] x^{n-1} + \mathcal{O}(x^{n-2})
  21. .\end{salign*}
  22. Der Leitkoeffizient des Interpolationspolynoms in der Monombasis ist also
  23. $y[x_0, \ldots, x_{n-1}]$. Dieser ist unabhängig von der Reihenfolge der Stützstellen. Damit
  24. folgt die Behauptung.
  25. \end{proof}
  26. \end{aufgabe}
  27. \begin{aufgabe}
  28. Beh.: Für $N \ge 2 \pi 10^{3}$ gilt $\displaystyle \max_{0 \le x \le 1} |f(x) - s(x)| < 10^{-12}$.
  29. \begin{proof}
  30. Es ist $f \in C^{4}([0, 1])$. Dann gilt nach VL
  31. \[
  32. \delta \coloneqq \max_{0 \le x \le 1} |f(x) - s(x)| \le h^{4} \max_{0 \le x \le 1} |f^{(4)}(x)|
  33. .\] Mit $f(x) = \sin(2\pi x)$ folgt sofort
  34. \[
  35. f^{(4)}(x) = 16 \pi^{4} \sin(2 \pi x) \quad \text{also}\quad
  36. \max_{0 \le x \le 1} |f^{(4)}(x)| = 16 \pi^{4}
  37. .\] Mit $h = \frac{1}{N}$ ergibt sich
  38. \[
  39. \delta \le 16 \frac{\pi^{4}}{N^{4}} \implies N \ge 2 \pi \sqrt[4]{\delta } = 2 \pi 10^{3}
  40. .\]
  41. \end{proof}
  42. \end{aufgabe}
  43. \begin{aufgabe}
  44. Beh.: Das komplexe trigonometrische Interpolationspolynom ist gegeben als
  45. \[
  46. t ^{*}(x) = \frac{1}{2} - \frac{1}{4} e^{ix} - \frac{1}{4} e^{3ix}
  47. .\]
  48. \begin{proof}
  49. Die Stützstellen sind als $x_j = \frac{2 \pi j}{4}$, $j = 0, \ldots, 3$ gegeben. Damit folgt
  50. \begin{salign*}
  51. f(x_0) &= f(0) = \min \{0, 2\} = 0 \\
  52. f(x_1) &= f\left(\frac{\pi}{2}\right) = \min \left\{ \frac{1}{2}, \frac{3}{2} \right\} = \frac{1}{2} \\
  53. f(x_2) &= f(\pi) = \min \{1, 1\} = 1 \\
  54. f(x_3) &= f\left( \frac{3}{2}\pi \right) = \min \left\{ \frac{3}{2}, \frac{1}{2} \right\} = \frac{1}{2}
  55. .\end{salign*}
  56. Die Interpolationsbedingung ist erfüllt, denn
  57. \begin{salign*}
  58. t ^{*}(x_0) &= \frac{1}{2} - \frac{1}{4} - \frac{1}{4} = 0 = f(x_0) \\
  59. t ^{*}(x_1) &= \frac{1}{2} - \frac{1}{4} \underbrace{e^{i \frac{\pi}{2}}}_{= i} - \frac{1}{4}
  60. \underbrace{e^{i \frac{3}{2} \pi}}_{= -i} = \frac{1}{2} = f(x_1) \\
  61. t ^{*}(x_2) &= \frac{1}{2} - \frac{1}{4} \underbrace{e^{i \pi}}_{= -1} - \frac{1}{4}
  62. \underbrace{e^{i \pi}}_{= -1} = 1 = f(x_2) \\
  63. t ^{*}(x_3) &= \frac{1}{2} - \frac{1}{4} \underbrace{e^{i \frac{3}{2} \pi}}_{= i} - \frac{1}{4}
  64. \underbrace{e^{i \frac{3}{2} \pi}}_{= -i} = \frac{1}{2} = f(x_3)
  65. .\end{salign*}
  66. Aus der Eindeutigkeit des komplexen trigonometrischen Interpolationspolynoms folgt die Behauptung.
  67. \end{proof}
  68. \end{aufgabe}
  69. \begin{aufgabe}
  70. \begin{enumerate}[a)]
  71. \item
  72. \begin{enumerate}[(1)]
  73. \item Es ist
  74. \[
  75. f_1''(x) = 6x - 14 \implies f_1''(0) = -14 \neq 0
  76. .\] Also erfüllt $f_1$ nicht die natürlichen Randbedingungen, also $f_1 \not\in S(X)$.
  77. \item Es gilt für $0 \le x < 1$:
  78. \begin{salign*}
  79. f_2(x) &= -\frac{1}{2} x^{3} \xrightarrow{x \to 1} -\frac{1}{2}\\
  80. f_2'(x) &= -\frac{3}{2} x^2 \xrightarrow{x \to 1} - \frac{3}{2} \\
  81. f_2''(x) &= - 3x \xrightarrow{x \to 1} -3 \text{ und } f_2''(0) = 0
  82. \intertext{Für $1 \le x \le 2$ gilt:}
  83. f_2(x) &= (x-1)^{3} -\frac{1}{2} x^{3} \implies f_2(1) = -\frac{1}{2} \\
  84. f_2'(x) &= 3(x-1)^2 - \frac{3}{2} x^2 \implies f_2'(1) = -\frac{3}{2} \\
  85. f_2''(x) &= 3x - 6 \implies f_2''(1) = -3 \text{ und } f_2''(2) = 0
  86. .\end{salign*}
  87. $f_2$ ist auf beiden Teilintervallen ein Polynom von Grad $3$ und damit
  88. auf den Teilintervallen beliebig oft stetig differenzierbar. Außerdem
  89. ist $f_2$ $2$ mal stetig differenzierbar an der Stelle $1$, also insgesamt
  90. $f_2 \in C^{2}([0, 2])$. Die natürlichen Randbedingungen sind außerdem erfüllt, also
  91. folgt $f_2 \in S(X)$.
  92. \item Es ist
  93. \[
  94. f_3''(x) = 6x - 2 \implies f_3''(0) = -2 \neq 0
  95. .\] Also erfüllt $f_3$ nicht die natürlichen Randbedingungen, also $f_3 \not\in S(X)$.
  96. \end{enumerate}
  97. \item Der interpolierende Spline $s$ von $f(x) = x^{3}$ folgt mit der Darstellung der VL direkt
  98. als
  99. \[
  100. s(x) = \begin{cases}
  101. 1 + 4x + 4,5 x^2 + 1,5 x^{3} & x \in [0, 1) \\
  102. 8 + 8,5(x-1) - 1,5(x-1)^{3} & x \in [1,2]
  103. \end{cases}
  104. .\]
  105. \end{enumerate}
  106. \end{aufgabe}
  107. \begin{aufgabe}
  108. Auszüge aus \textit{splines.cc}:
  109. \begin{lstlisting}[language=C++, title=Schneller Löser für tridiagonale Matrizen, captionpos=b]
  110. template<typename REAL>
  111. void solveTriDiag(hdnum::DenseMatrix<REAL> &A, std::vector<REAL> &x, std::vector<REAL> &b) {
  112. int N = b.size();
  113. x[0] = A[0][0];
  114. // LU Zerlegung
  115. REAL l;
  116. for (int j=1; j<N; j++) {
  117. // berechne l faktor
  118. l = A[j][j-1] / x[j-1];
  119. // modifiziere diagonalelemente und rechte seite
  120. x[j] = A[j][j] - l * A[j-1][j];
  121. b[j] = b[j] - l * b[j-1];
  122. }
  123. // Loesen durch Rueckwaertseinsetzen
  124. x[N-1] = b[N-1] / x[N-1];
  125. for (int j=N-2; j>=0; j--) {
  126. x[j] = (b[j] - A[j][j+1]*x[j+1])/x[j];
  127. }
  128. }\end{lstlisting}
  129. Implementation in einer Klasse \lstinline{CubicSpline}. Die Funktion \lstinline{getCubicSpline}
  130. entspricht dem ersten Konstruktor.
  131. \begin{lstlisting}[language=C++, title=Konstruktion und Auswertung eines kubischen Splines, captionpos=b]
  132. template<typename REAL>
  133. class CubicSpline {
  134. public:
  135. // erstelle einen kubischen spline mit vorgegebenen stuetzstellen
  136. // und werten
  137. CubicSpline(std::vector<REAL> xs, std::vector<REAL> ys) {
  138. calculateCoefficients(xs, ys);
  139. }
  140. // erstelle einen kubischen spline mit vorgegebenen stuetzstellen
  141. // und einer zu interpolierenden funktion
  142. CubicSpline(std::vector<REAL> xs, REAL(*f)(REAL)) {
  143. int N = xs.size();
  144. std::vector<double> ys(N);
  145. for (int i=0; i<N; i++) {
  146. ys[i] = f(xs[i]);
  147. }
  148. calculateCoefficients(xs, ys);
  149. }
  150. // erstelle einen kubischen spline an aequidistanten stuetzstellen
  151. // und einer zu interpolierenden funktion
  152. CubicSpline(REAL a, REAL b, int N, REAL(*f)(REAL)) {
  153. std::vector<double> xs(N+1);
  154. std::vector<double> ys(N+1);
  155. for (int i=0; i<=N; i++) {
  156. xs[i] = a + (1.0*i)/N*(b-a);
  157. ys[i] = f(xs[i]);
  158. }
  159. calculateCoefficients(xs, ys);
  160. }
  161. // werte kubischen spline an vorgegebener stelle aus
  162. REAL evaluate(REAL x) {
  163. for (int i=1; i<x_s.size(); i++) {
  164. if (x > x_s[i] && i < x_s.size() - 1) {
  165. continue;
  166. } else {
  167. return a_0[i-1] + a_1[i-1] *(x - x_s[i]) + a_2[i-1]*std::pow(x - x_s[i], 2) + a_3[i-1]*std::pow(x-x_s[i], 3);
  168. }
  169. }
  170. return 0;
  171. }
  172. // gebe alle interpolations polynome aus
  173. void print() {
  174. for(int i=0; i<x_s.size()-1; i++) {
  175. printf("p_%d(x) = %4.2f + %4.2f(x - %4.2f) + %4.2f(x - %4.2f)^2 + %4.2f(x - %4.2f)^3\n",
  176. i, a_0[i], a_1[i], x_s[i], a_2[i], x_s[i], a_3[i], x_s[i]);
  177. }
  178. }
  179. private:
  180. // stuetzstellen
  181. std::vector<REAL> x_s;
  182. // koeffizienten
  183. std::vector<REAL> a_0;
  184. std::vector<REAL> a_1;
  185. std::vector<REAL> a_2;
  186. std::vector<REAL> a_3;
  187. void calculateCoefficients(std::vector<REAL> xs, std::vector<REAL> ys) {
  188. // stuetzstellen from x_0 ... to x_n
  189. int n = xs.size()-1;
  190. // copy stuetzstellen
  191. x_s = std::vector<double>(n+1);
  192. x_s = xs;
  193. // setup (n-1)x(n-1) matrix for a_2
  194. hdnum::DenseMatrix<REAL> A(n-1,n-1);
  195. std::vector<REAL> b(n-1);
  196. std::vector<REAL> x(n-1);
  197. REAL h; // h_i
  198. REAL h1; // h_{i+1}
  199. // setup LGS for a_2
  200. // A has tridiagonal structure
  201. for (int i = 1; i<n; i++) {
  202. h = xs[i] - xs[i-1];
  203. h1 = xs[i+1] - xs[i];
  204. b[i-1] = 3 * ((ys[i+1] - ys[i])/h1 - (ys[i] - ys[i-1])/h);
  205. if (i > 1) {
  206. A[i-1][i-2] = h;
  207. } if (i < n-1) {
  208. A[i-1][i] = h1;
  209. }
  210. A[i-1][i-1] = 2 * (h + h1);
  211. }
  212. // initialize vectors
  213. a_0 = std::vector<double>(n);
  214. a_1 = std::vector<double>(n);
  215. a_2 = std::vector<double>(n);
  216. a_3 = std::vector<double>(n);
  217. solveTriDiag(A,a_2,b);
  218. // natuerliche randbedingung
  219. a_2[n-1] = 0;
  220. // berechne restliche koeffizienten
  221. for (int i = 1; i<=n; i++) {
  222. h = xs[i] - xs[i-1]; // h_i
  223. h1 = xs[i+1] - xs[i]; // h_{i+1}
  224. a_0[i-1] = ys[i];
  225. if (i == 1) { // a_2[-1] = 0
  226. a_1[i-1] = (ys[i] - ys[i-1])/h + (h/3)*(2*a_2[i-1]);
  227. a_3[i-1] = (a_2[i-1])/(3*h);
  228. } else {
  229. a_1[i-1] = (ys[i] - ys[i-1])/h + h/3*(2*a_2[i-1] + a_2[i-2]);
  230. a_3[i-1] = (a_2[i-1] - a_2[i-2])/(3 * h);
  231. }
  232. }
  233. }
  234. };\end{lstlisting}
  235. \begin{figure}[h]
  236. \centering
  237. \begin{tikzpicture}
  238. \begin{axis}[xtick=\empty, ytick=\empty]
  239. \addplot[purple] table {saurier.dat};
  240. \end{axis}
  241. \end{tikzpicture}
  242. \caption{Rekonstruktion des Sauriers}
  243. \label{fig:}
  244. \end{figure}
  245. \end{aufgabe}
  246. \end{document}