Für Vorlesungen, bitte die Webseite verwenden. https://flavigny.de/lecture
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

212 行
9.5KB

  1. \documentclass[uebung]{../../../lecture}
  2. \title{Einführung in die Numerik: Übungsblatt 9}
  3. \author{Leon Burgard, Christian Merten}
  4. \usepackage[]{subcaption}
  5. \begin{document}
  6. \punkte
  7. \begin{aufgabe}
  8. \begin{enumerate}[a)]
  9. \item Es ergibt sich durch Ausrechnen:
  10. \begin{salign*}
  11. a_0 &= y_0 = \frac{1}{2} \\
  12. a_1 &= \frac{y_1 - a_0 N_0(t_1)}{N_1(t_1)} = \frac{1 - \frac{1}{2}}{1 - \frac{1}{4}} = \frac{2}{3} \\
  13. a_2 &= \frac{y_2 - a_0 N_0(t_2) - a_1N_1(t_2)}{N_2(t_2)} = -\frac{4}{45}
  14. \intertext{Damit folgt}
  15. p_2(t) &= \frac{1}{2} + \frac{2}{3}\left( t - \frac{1}{4} \right) - \frac{4}{45} \left( t - \frac{1}{4} \right) (t- 1)
  16. .\end{salign*}
  17. \item Es folgt für $t_3 = 9$ $y_3 = 3$, also
  18. \begin{salign*}
  19. a_3 &= \frac{y_3 - a_0N_0(t_3) - a_1N_1(t_3) - a_2 N_2(t_3)}{N_3(t_3)}
  20. = \frac{13}{1575}
  21. \intertext{Damit folgt}
  22. p_3(t) &= \frac{1}{2} + \frac{2}{3}\left( t - \frac{1}{4} \right) - \frac{4}{45} \left( t - \frac{1}{4} \right) (t- 1) + \frac{13}{1575} \left( t - \frac{1}{4} \right) (t-1)(t-4)
  23. .\end{salign*}
  24. \item Graph:\\
  25. \begin{tikzpicture}
  26. \begin{axis}[default 2d plot,
  27. xmin=0,xmax=10,
  28. legend pos=outer north east]
  29. \addplot[domain=0:10, smooth,green]{0.5 + 2/3*(x-1/4) - 4/45*(x-1/4)*(x-1)};
  30. \addlegendentry{$p_2(t)$}
  31. \addplot[domain=0:10, smooth, blue]{0.5 + 2/3*(x-1/4) - 4/45*(x-1/4)*(x-1)+13/1575*(x-1/4)*(x-1)*(x-4)};
  32. \addlegendentry{$p_3(t)$}
  33. \addplot[domain=0:10, smooth, red]{sqrt(x)};
  34. \addlegendentry{$\sqrt{t}$}
  35. \end{axis}
  36. \end{tikzpicture}
  37. \end{enumerate}
  38. \end{aufgabe}
  39. \begin{aufgabe}
  40. \begin{enumerate}[a)]
  41. \item Bezeichne:
  42. \begin{align*}
  43. &r_{i,0}(x) \coloneqq y_i \\
  44. &r_{i,k}(x) \coloneqq \frac{(x-x_i) p_{i+1, k-1}(x) - (x- x_{i+k})p_{i,k-1}(x)}{x_{i+k}-x_i}
  45. .\end{align*}
  46. Z.z.: $p_{i,0}(x) = r_{i,0}(x)$ und $p_{i,k}(x) = r_{i,k}(x)$.
  47. $r_{i,0}$ bzw. $r_{i,k}$ sind Polynome vom Grad $0$ bzw. $k$. D.h. es genügt zu zeigen,
  48. dass sie die Interpolationseigenschaft erfüllen. Die Behauptung folgt dann aus der
  49. Eindeutigkeit des Interpolationspolynoms.
  50. Für $r_{i,0}(x)$ ist die Interpolationseigenschaft trivialerweise für die eine Stützstelle
  51. $x_i$ erfüllt, denn $r_{i,0}(x_i) = y_i$.
  52. Für $r_{i,k}$ gilt für $i \le j \le i+k$:
  53. \begin{salign*}
  54. r_{i,k}(x_{j}) &= \frac{(x_j-x_i) p_{i+1, k-1}(x_j) - (x_j- x_{i+k})p_{i,k-1}(x_j)}{x_{i+k}-x_i} \\
  55. &\stackrel{(*)}{=} \frac{(x_j - x_i) y_j - (x_j - x_{i+k})y_j}{x_{i+k}-x_i} \\
  56. &= y_j \frac{x_j - x_i - x_j + x_{i+k}}{x_{i+k}-x_i} \\
  57. &= y_j \frac{x_{i+k} - x_i}{x_{i+k}-x_i} \\
  58. &= y_j
  59. .\end{salign*}
  60. $(*)$: Falls $j = i$, dann ist $p_{i+1,k-1}(x_j)$ i.A. nicht $y_j$, aber dann ist
  61. $(x_j - x_i) = (x_i - x_i) = 0$, also gilt dennoch $(x_j - x_i) p_{i+1,k-1}(x_j) = (x_j - x_i)y_j$.
  62. Analog für $j = i+k$.
  63. \item Durch Berechnung von $p_{0,3}(61.7)$ mit dem Schema aus (a) erhält man die Tageslänge
  64. am Ort $E$ mit $19$h $29,55$m.
  65. \end{enumerate}
  66. \end{aufgabe}
  67. \begin{aufgabe}
  68. \begin{enumerate}[a)]
  69. \item
  70. \begin{itemize}
  71. \item Für die Koeffizienten $a_i$ gilt $a_i = y_i$. Also keine Operationen nötig.
  72. \item Auswertung von $L_i^{(n)}(\xi) = \prod_{j=0,j\neq i}^{n} \frac{(\xi-x_j)}{x_i - x_j} $:
  73. $n$ Faktoren mit $3$ Operationen plus $n-1$ Multiplikationen für das Produkt. Gesamt:
  74. $3n + n-1 = 4n-1$.
  75. Auswertung von $p(\xi)$: $n+1$ Summanden mit $4n-1$ Operationen plus Multiplikation
  76. mit $y_i$, ergibt $(n+1)\cdot (4n-1+1) = 4n^2$. Mit zusätzlich $n$ Additionen
  77. für die Auswertung der Summe ergibt sich insgesamt $4n^2 + n = \mathcal{O}(n^2)$.
  78. \end{itemize}
  79. \item
  80. \begin{itemize}
  81. \item
  82. Berechnung der Koeffizienten erfordert die Lösung eines LGS mit unterer Dreicksmatrix.
  83. Dies erfordert $\mathcal{O}(n^2)$ Operationen.
  84. \item Auswertung von $N_i(\xi) = \prod_{j=0}^{i-1} (\xi - x_j) $ erfordert $1$ Addition pro Faktor und
  85. insgesamt $i-1$ Multiplikationen für das Produkt, also insgesamt: $2i - 1$.
  86. Auswertung von $p(\xi)$ erfordert entsprechend die Auswertung von $N_i(\xi)$ und die
  87. Multiplikation mit dem Koeffizienten und Summation über alle $(n+1)$ Summanden. Ergibt also
  88. insgesamt mit kleinem Gauß $(n+1)(n+2) = n^2 + 3n + 2 = \mathcal{O}(n^2)$.
  89. \end{itemize}
  90. \item
  91. \begin{itemize}
  92. \item Berechnung der Koeffizienten erfordert die Lösung eines vollen LGS, also
  93. $\mathcal{O}(n^{3})$ Operationen.
  94. \item Auswertung eines Summanden: $a_i t ^{i}$ erfordert $i-1 + 1 = i$ Multiplikationen.
  95. Auswertung von $p(x)$ erfordert das Summieren von $n+1$ Summanden, also $n$ zusätzliche Additionen.
  96. Insgesamt folgt also wieder mit kleinem Gauß $\frac{(n+1)(n+2)}{2} + n = \frac{n^2 + 3n + 2}{2} + n = \frac{n^2 + 5n +4}{2} = \mathcal{O}(n^2)$.
  97. \end{itemize}
  98. \item Auswertung von $p_{i,k}$ im Neville Schema erfordert
  99. \begin{align*}
  100. N(k) &= 2 + N(k-1) + 1 + 1 + 1 + N(k-1) + 1 + 1 \\
  101. &= 7 + 2 N(k-1) \\
  102. &= 7 + 2 \cdot 7 + 4 \cdot N(k-2) = \ldots = \sum_{j=0}^{k-1} 7 \cdot 2^{j} \\
  103. &= 7 \frac{2^{k} - 1}{2 - 1} \\
  104. &= 7 (2^{k} - 1) \\
  105. &= \mathcal{O}(2^{k})
  106. .\end{align*}
  107. \end{enumerate}
  108. \end{aufgabe}
  109. \begin{aufgabe}
  110. \begin{enumerate}[a)]
  111. \item Auszug aus \textit{polynom.cc}
  112. \begin{lstlisting}[language=C++, title=Auswertung des Interpolationspolynoms für vorgegebene Stüztstellen, captionpos=b]
  113. // Auswertung von p_{i,k}(t) mit Neville Schema bei t=x
  114. template<typename REAL>
  115. REAL evaluateNeville(REAL x, std::vector<REAL> &xs, std::vector<REAL> &ys, int i, int k) {
  116. if(k == 0) {
  117. return ys[i];
  118. } else {
  119. // nevile rekursionsformel
  120. return ((x - xs[i])*evaluateNeville(x, xs, ys,i+1,k-1) - (x - xs[i+k])*evaluateNeville(x, xs, ys, i, k-1))/(xs[i+k]-xs[i]);
  121. }
  122. }
  123. // Auswertung eines Interpolationspolynoms p(t) bei t=x
  124. template<typename REAL>
  125. REAL evaluate(REAL x, std::vector<REAL> &xs, std::vector<REAL> &ys) {
  126. // nutze neville verfahren mit p(x) = p_{0,n}(x)
  127. evaluateNeville(x, xs, ys, 0, xs.size()-1);
  128. }\end{lstlisting}
  129. \item Auszug aus \textit{polynom.cc}
  130. \begin{lstlisting}[language=C++, title=Auswertung von I-Polynomen für äquidistante Stützstellen, captionpos=b]
  131. // Auswertung eines Interpolationspolynoms einer Funktion bei vorgegebenen Stuetzstellen
  132. template <typename REAL>
  133. REAL evaluateFunction(REAL x, std::vector<REAL> &xs, REAL(*f)(REAL)) {
  134. std::vector<double> ys(xs.size());
  135. for (int i = 0; i < xs.size(); i++) {
  136. // berechne stuetzstellen
  137. ys[i] = f(xs[i]);
  138. }
  139. // verwende polynominterpolation
  140. return evaluate(x, xs, ys);
  141. }
  142. // Auswertung eines Interpolationspolynoms einer Funktion bei aequidistanten Stuetzstellen
  143. template <typename REAL>
  144. REAL evaluateFunctionEqualDist(REAL x, REAL a, REAL b, REAL h, REAL(*f)(REAL)) {
  145. std::vector<double> xs(std::floor((b-a)/h));
  146. std::vector<double> ys(xs.size());
  147. for (int i = 0; i < xs.size(); i++) {
  148. // berechne stuetzstellen
  149. xs[i] = a + i*h;
  150. // und funktionswerte
  151. ys[i] = f(xs[i]);
  152. }
  153. // werte polynom aus
  154. return evaluate(x, xs, ys);
  155. }\end{lstlisting}
  156. \begin{figure}[h]
  157. \begin{subfigure}[b]{.5\linewidth}
  158. \begin{tikzpicture}
  159. \begin{axis}[default 2d plot, xmin=-1, xmax=1]
  160. \addplot[green] table {f1_5.dat};
  161. \addlegendentry{$n=5$}
  162. \addplot[orange] table {f1_10.dat};
  163. \addlegendentry{$n=10$}
  164. \addplot[blue] table {f1_20.dat};
  165. \addlegendentry{$n=20$}
  166. \addplot[red, samples=100] {1/(1+x^2)};
  167. \addlegendentry{$\frac{1}{1+x^2}$}
  168. \end{axis}
  169. \end{tikzpicture}
  170. \caption{$f_1 = \frac{1}{1+x^2}$}
  171. \end{subfigure}
  172. \begin{subfigure}[b]{.5\linewidth}
  173. \begin{tikzpicture}
  174. \begin{axis}[default 2d plot, xmin=-0.5, xmax=0.5, legend pos=outer north east,
  175. restrict y to domain=-1:5]
  176. \addplot[green] table {f2_5.dat};
  177. \addlegendentry{$n=5$}
  178. \addplot[orange] table {f2_10.dat};
  179. \addlegendentry{$n=10$}
  180. \addplot[blue] table {f2_20.dat};
  181. \addlegendentry{$n=20$}
  182. \addplot[red, samples=5000] {sqrt(abs(x))};
  183. \addlegendentry{$\sqrt{|x|} $}
  184. \end{axis}
  185. \end{tikzpicture}
  186. \caption{$f_2 = \sqrt{|x|} $}
  187. \end{subfigure}
  188. \end{figure}
  189. \item Für $\frac{1}{1+x^2}$ funktioniert die Interpolation mit äquidistanten Stützstellen sehr gut.
  190. Für $\sqrt{|x|} $ entstehen durch die nicht differenzierbare Stelle bei $x=0$ sehr große Abweichungen,
  191. die zu den Rändern mit wachsendem Polynomgrad sogar zunehmen.
  192. \end{enumerate}
  193. \end{aufgabe}
  194. \end{document}