From: Peter Schaefer Date: Fri, 30 Nov 2012 11:18:47 +0000 (+0100) Subject: [doc] Kapitel 4 fertig! X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=ad958f37e160806310a9888e4e910bd1e64bcfc2;p=bacc.git [doc] Kapitel 4 fertig! [src] compute mehr macht über zeta und typ [src] sol testet Quadratur --- diff --git a/doc/doc.pdf b/doc/doc.pdf index 924d372..95070af 100644 Binary files a/doc/doc.pdf and b/doc/doc.pdf differ diff --git a/doc/doc.tex b/doc/doc.tex index dc3cce8..3286aec 100644 --- a/doc/doc.tex +++ b/doc/doc.tex @@ -272,11 +272,11 @@ die zu $T$ zugehörige Parametrisierung. \begin{bem} Weiterhin werden wir die vier Ecken des Rechtecks \begin{align*} - \K_T&:=\{\gamma_T(x,y) ~|~ x,y \in \{0,1\}\} + \K_T&:=\{k = \gamma_T(x,y) ~|~ x,y \in \{0,1\}\} \end{align*} als Menge der Knoten des Rechtecks $T$ bezeichnen und als Kanten von $T$ nennen wir die Menge \begin{align*} - \E_T&:= \{[k_T, \tilde k_T] ~|~ k_T,\tilde k_T\in \K_T, k_T\neq\tilde k_T\}. + \E_T&:= \{e = [k_T, \tilde k_T] ~|~ k_T,\tilde k_T\in \K_T, k_T\neq\tilde k_T\}. \end{align*}\todo{Diagonalen sind dabei!!!} \end{bem} \begin{defi}Sei $a,b\in\R$ für $T$ definiert wie in Def. \ref{math:def:T}, dann heißt @@ -576,7 +576,7 @@ und für den durch die Gauss-Quadratur von $A_{jk}$ zum Grad $p$ entstehenden Te \end{align*} die Abschätzung \begin{align} - \abs{A_{jk} - (A_p)_{jk}}&= \tilde C_{\zeta_Q,j,k}\Lambda_k^4(p+1)\left(1+\frac{2c_2}{\zeta_Q}\right)^{-2(p+1)} + \abs{A_{jk} - (A_p)_{jk}}&\leq \tilde C_{\zeta_Q,j,k}\Lambda_k^4(p+1)\left(1+\frac{2c_2}{\zeta_Q}\right)^{-2(p+1)} \end{align} \end{sat} \beweis Da die Gauss-Quadratur ist interpolatorisch mit dem Exaktheitsgrad $2p+1$ ist gilt: @@ -618,11 +618,10 @@ Mithilfe von Lemma \ref{thm:sem:pol:V} erhalten wir die Behauptung Seien $T_j,T_k$ zwei $\zeta$ zulässige Rechtecke. Ist $\diam(T_j) \leq \diam(T_k)$ so kann Satz (\ref{thm:sem:quad:V}) angewendet werden um $A_{jk}$ zu approximieren. Im Fall $\diam(T_j) > \diam(T_k)$ können wir $A_{jk}$ approximieren indem wir mithilfe von $A_{jk} = A_{kj}$ und Satz (\ref{thm:sem:quad:V}), $A_{kj}$ berechnen. \end{bem} -\todo{\begin{bem} - $\Lambda_p$ wächst für Chebyshev-Polynome im wesentlichen logarithmisch in $p$. Daher konvergiert $(A_p)_{jk}$ für wachsenden Quadraturgrad $p$ exponentiell schnell gegen $A_{jk}$ - Zusammenhang von Quadraturgrad und Konvergenz +\begin{bem} + $\Lambda_p$ wächst für Chebyshev-Polynome im wesentlichen logarithmisch in $p$. Daher konvergiert $(A_p)_{jk}$ für wachsenden Quadraturgrad $p$ exponentiell schnell gegen $A_{jk}$. \end{bem} -} + \subsection{Approximierende Matrix} \begin{defi} \label{thm:sem:quad:Ap} @@ -648,7 +647,7 @@ Wir wollen nun zeigen, dass die approximierende Matrix bezüglich der Frobenius- \begin{align*} \norm{A}_F := \left( \sum_{i=1}^n\sum_{j=1}^n A_{ij}^2 \right)^{1/2} \quad \text{für} \quad A \in \R^{n \times n}. \end{align*} -\todo{Dieser Satz ist wahrscheinlich unnötig + \begin{sat} Seien $T_1,T_2,\ldots,T_n$ Rechtecke. Sei $\kappa : \R^2\times \R^2 \to \R$ eine asymptotisch glatte Kernfunktion mit Konstanten $c_1,c_2$ und Singularitätsordung $s \geq 0$. Sei $\tilde C_{\zeta_Q,j,k}$ wie in \eqref{math:sem:zetaQ:c}. Seien $A\in \R^{n \times n}$ eine Matrix, deren Einträge gegeben sind durch \begin{align*} @@ -671,7 +670,7 @@ Wir wollen nun zeigen, dass die approximierende Matrix bezüglich der Frobenius- &= n^2 \max_{j=1,\ldots,n} \max_{k=1,\ldots,n} \left(\tilde C_{\zeta_Q,j,k}\Lambda_k^4(p+1)\left(1+\frac{2c_2}{\zeta_Q}\right)^{-2(p+1)}\right)^2. \end{align*} Durch ziehen der Wurzel auf beiden Seiten, folgt dann die Behauptung. \hfill$\square$ -} + % \subsection{Quadratur über eine Achse} % \subsubsection{Quadratur} % \begin{defi} Seien $T_j,T_k$ Rechtecke und sei $\zeta_A > 0$ fest. Dann heißt das Paar $(T_j,T_k)$ $\zeta_A$-zulässig, genau dann wenn @@ -787,9 +786,9 @@ Durch ziehen der Wurzel auf beiden Seiten, folgt dann die Behauptung. \hfill$\sq \end{itemize} } \noindent -In diesem Abschnitt wollen wir uns mit der analytischen Berechnung der Galerkin-Matrix +In diesem Abschnitt wollen wir uns mit der analytischen Berechnung des Integrals \begin{align}\label{math:analy:int} -\frac{1}{4\pi} \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x} \in \R^3. + A_{jk} = \int_{T_j} \int_{T_k} \frac{1}{|\bs x- \bs y|} ds_{\bs y} ds_{\bs x} \in \R^3. \end{align} mit zwei beschränkten, achsenorientierten Rechtecken $T_j,T_k \subseteq\R^3$ beschäftigen. Die im Folgenden auftretenden Stammfunktionen $\int f(x) dx$ werden wir der Einfachheit halber jeweils mit additiver Verschiebung $0$ schreiben. Dazu wollen wir \cite{mai:3dbem} folgend, zwei Stammfunktionen zitieren, welche durch das Aufspalten des Integrals \eqref{math:analy:int} auftreten werden. @@ -833,9 +832,9 @@ Des Weiteren werden wir die Stammfunktion \end{align*} benötigen, welches sich für den den Fall $p = -3/2$ lässt als \begin{align*} - G(-3/2;y_1,y_2;x_1,x_2,0) &= - \frac{\sqrt{(y_1-x_1)^2+(y_2-x_2)^2}}{(y_1-x_1)(y_2-x_2)} \quad \text{ für } \lambda = 0,\\ - G(-3/2;y_1,y_2;x_1,x_2,\lambda) &=- \frac{\sgn\{(y_1-x_1)(y_2-x_2)\}}{2|\lambda|} \quad \text{ für } \lambda \neq 0\\ - &\cdot \arccos\left( \frac{-2(y_1-x_1)^2(y_2-x_2)^2}{\{(y_1-x_1)^2+\lambda^2\}\{(y_2-x_2)^2+\lambda^2\}} +1 \right). + G(-3/2;y_1,y_2;&x_1,x_2,0) = - \frac{\sqrt{(y_1-x_1)^2+(y_2-x_2)^2}}{(y_1-x_1)(y_2-x_2)} \quad \text{ für } \lambda = 0,\\ + G(-3/2;y_1,y_2;&x_1,x_2,\lambda) =- \frac{\sgn\{(y_1-x_1)(y_2-x_2)\}}{2|\lambda|} \\ + &\cdot \arccos\left( \frac{-2(y_1-x_1)^2(y_2-x_2)^2}{\{(y_1-x_1)^2+\lambda^2\}\{(y_2-x_2)^2+\lambda^2\}} +1 \right)\quad \text{ für } \lambda \neq 0. \end{align*} Für alle weiteren relevanten Fälle $p = -3/2 +k$ mit $k \in \N$ können wir folgende Rekursionsformel aufstellen \begin{align*} @@ -922,11 +921,12 @@ Dann gilt nach \cite{mai:3dbem} \end{align} \end{lem} -\todo{ + \subsection{Bestimmtes Integral} +Mithilfe der Stammfunktionen $F_p$ und $F_o$ können wir nun das Integral aus \eqref{math:analy:int} für orthogonal und parrallel liegenden achsenorientierte Rechtecke $T$ und $\tilde T$ berechnen. \begin{align*} \int_T& \int_{\tilde T} \frac{1}{|x-y|} ds_y ds_x\\ -&\approx \int_0^{k_1}\int_0^{k_2}\int_0^{\tilde k_1}\int_0^{\tilde k_2} +&= \int_0^{k_1}\int_0^{k_2}\int_0^{\tilde k_1}\int_0^{\tilde k_2} \dif{}{y_2} \dif{}{y_1} \dif{}{x_2} \dif{}{x_1} F_{p/o}(x_1,x_2,y_1,y_2) dy_2 dy_1 dx_2 dx_1\\ @@ -1012,7 +1012,7 @@ dy_2 dy_1 dx_2 dx_1\\ - F_{p/o}(0,0,0,0) \end{align*} -} + \clearpage diff --git a/src/compute.m b/src/compute.m index cf35d7d..343fd55 100644 --- a/src/compute.m +++ b/src/compute.m @@ -24,7 +24,7 @@ if(~exist('data','var')) end kap3 = 0; %times mal verfeinern -for j = 1:times +for j = 1:times if(exist('coo_fine','var')) old_C_fine = coo_fine; old_F_fine = f2s; @@ -47,11 +47,20 @@ for j = 1:times %data -> ErgebnisVektor dataS = size(elements,1); + %zeta Vorbereiten + if(~iscell(zeta)) + zeta_tmp = zeta; + clear zeta; + for i = 1:length(typ) + zeta{i} = zeta_tmp; + end + end + %Alle MatrixBrechenungsArten mit dem selben Netz berechnen for i = 1:length(typ) disp([num2str(size(elements,1)) ' : ' t2str(toc) ' ->' num2str(i)]) %Matrix aufbauen -> MEX - V_fine = mex_build_V(coo_fine,ele_fine,zeta,typ(i)); + V_fine = mex_build_V(coo_fine,ele_fine,zeta{i},typ(i)); %Testet auf Fehlerhafte Eintraege (NaN +/-Inf) [r c] = find(isnan(V_fine)~=isinf(V_fine)); @@ -82,7 +91,7 @@ for j = 1:times sum((x_fine(f2s)'-repmat(sum(x_fine(f2s)',1)/4,4,1)).^2)' /4; %Fehlerschaetzer 2 aufbauen - V = mex_build_V(coordinates,elements,zeta,typ(i)); + V = mex_build_V(coordinates,elements,zeta{i},typ(i)); if(~vcon) x = V\b; diff --git a/src/refineQuad.m b/src/refineQuad.m index 5f0b5b1..fb64a24 100644 --- a/src/refineQuad.m +++ b/src/refineQuad.m @@ -1,6 +1,6 @@ function [coo,ele,nei,f2s,sit,err] = refineQuad(coordinates,elements,neigh,sites,typ) % -% [coordinates,elements,fa2so] = refineQuad(coordinates,elements,type) +% [coo,ele,nei,f2s,sit,err] = refineQuad(coordinates,elements,type) % % Verfeinert die markierten Elemente mit dem entsprechenden TYP und gibt % auch die F2S Beziehungen zurück. type muss von der Länge der Anzahl der diff --git a/src/test_sol.m b/src/test_sol.m index ed26ca5..c513408 100644 --- a/src/test_sol.m +++ b/src/test_sol.m @@ -9,11 +9,11 @@ mex mex_build_V.cpp slpRectangle.cpp CFLAGS="\$CFLAGS -fopenmp" CXXFLAGS="\$CXXF % Test ausführen %Anzahl der Schritte -steps = 40; +steps = 10; %Art der Berechnungen -type = [1 3]; -zeta = [1 1 2]; +type = [2 2 2 2 2]; +zeta = {[0 2] [1 2] [2 2] [3 2] [4 2]}; %% Quad adaptiv anisotrop @@ -33,7 +33,7 @@ A_plots({['meshSave/' fileo int2str(steps)]},... [fileo ... int2str(steps)]); -%% BLa bla +%% Bla bla % compute('exmpl_2DQuad', steps, zeta, type, 0.5, 0.5, 1, 'tsAAvcon_') % %LShape adaptiv isotrop