From 7909f7672686d544bc1c0d72672f35be0e3c8343 Mon Sep 17 00:00:00 2001 From: treecity Date: Fri, 16 Mar 2012 15:09:27 +0000 Subject: [PATCH] =?utf8?q?[src]=20A=5Fplots=20=C3=BCberarbeitet\?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://drops.fb12.tu-berlin.de/svn/bacc/trunk@107 26120e32-c555-405d-b3e1-1f783fb42516 --- doc/doc1.pdf | Bin 165325 -> 165325 bytes doc/doc2.tex | 4 +- src/A_plots.m | 73 ++++++++++++++++++++++++------------- src/A_step.m | 11 +++++- src/computeEstSlpMuTilde.m | 2 +- src/test_sol.m | 2 +- 6 files changed, 61 insertions(+), 31 deletions(-) diff --git a/doc/doc1.pdf b/doc/doc1.pdf index 449c97bdb4c5e56c8ff5abf002a11254bd7388eb..41c4901795ea910631597d97c21cd45936e93b83 100644 GIT binary patch delta 135 zcmX@x&2_e$tD%K)3sZfGmYJc6iK(fXwt=C#fq}Xvm%eX)ic4Zis)B}#m63s=k%6%x zRLS<0B}_*IoDGegjf~w)4P0Ez%?#Ykos5hPEX~X;O)L$JjNA+?9qkls2q~Gqp_NG% E0F;y>L;wH) delta 135 zcmX@x&2_e$tD%K)3sZfGmZ_1Ev8A!Gwt=C#fq}Xvm%eX)ic4Zis)B}#m63s=k%6%x zRLS<0B}_*IoDH1Z94##z9o-xq%?vHgO-#+5EKMvOU7ei`O)M2q~Gqp_NG% E0JUc$A^-pY diff --git a/doc/doc2.tex b/doc/doc2.tex index 6913163..dc37bbe 100644 --- a/doc/doc2.tex +++ b/doc/doc2.tex @@ -13,7 +13,7 @@ \hypersetup{linkbordercolor={1 1 1},citebordercolor={1 1 1},urlbordercolor={1 1 1}} -\usepackage[ngerman]{babel} %Sprachpacket für Überschriften +\usepackage[ngerman]{babel} %Sprachpacket für ├Ьberschriften \usepackage[utf8]{inputenc} %Eingabekodierung \usepackage{fixltx2e} %Deutschsprach Bugs @@ -69,7 +69,7 @@ Jedes Element wird dann durch jeweils vier Koordinatenindizes als $M \times 4, M \begin{displaymath} ELE[i,1:4] = E_i := (v_1,v_2,v_3,v_4) \text{ wobei } v_1,v_2,v_3,v_4 \in C \und i \in \{1,2 \dots M\} \end{displaymath} -Aufgrund der Netzstabilität wollen wir maximal zwei Nachbarn an einer Kante zulassen, weshalb wir nur $2*4$ Einträge für die Nachbarschaftsrelationen pro Element benötigen. In der $M \times 8$ Matrix sind die Indizes der Nachbarn $n_1,n_2 \in E$ der Kante $(v_k, v_{k^{+1}}) | k\in \{1,2,3,4\}$ des Elements $E_i$ an den Stellen $NEI[i,[k,k+4]]$ gespeichert. Sollte eine Seite keinen Nachbarn haben markieren wir diese mit einer $0$. Außerdem wird an Kanten mit nur einem Nachbarn der erste Index auf den Nachbarn gesetzt und der zweite auf $0$.(Siehe Figur:\ref{exmpl3:nei:part}) +Aufgrund der Netzstabilität wollen wir maximal zwei Nachbarn an einer Kante zulassen, weshalb wir nur $2*4$ Einträe für die Nachbarschaftsrelationen pro Element benötigen. In der $M \times 8$ Matrix sind die Indizes der Nachbarn $n_1,n_2 \in E$ der Kante $(v_k, v_{k^{+1}}) | k\in \{1,2,3,4\}$ des Elements $E_i$ an den Stellen $NEI[i,[k,k+4]]$ gespeichert. Sollte eine Seite keinen Nachbarn haben markieren wir diese mit einer $0$. Außerdem wird an Kanten mit nur einem Nachbarn der erste Index auf den Nachbarn gesetzt und der zweite auf $0$.(Siehe Figur:\ref{exmpl3:nei:part}) \\\noindent Ein ausführliches Beispiel ist in Figure \ref{exmpl3} dargestellt. \showMesh[Beispiel 3]{exmpl3} diff --git a/src/A_plots.m b/src/A_plots.m index f89b232..5793bca 100644 --- a/src/A_plots.m +++ b/src/A_plots.m @@ -1,13 +1,15 @@ function A_plots(files,printt) type2str = {'Analytisch ' 'Quad Element' 'Quad Achse ' 'Quad Seite '}; +type2sym = {'-o' '-x' '-' '-'}; G_D=[]; X = []; +leg0 = {}; leg1 = {}; -leg2 = {}; -leg3 = {}; -leg4 = {}; +sym = {}; + +rows = 5; for i = 1:length(files) @@ -15,7 +17,7 @@ for i = 1:length(files) load(files{i}); [m n] = size(data); - step = round(n/4); + step = round(n/rows); if step<1 disp (['Error: No Data to show. : ' i]) continue; @@ -30,32 +32,35 @@ for i = 1:length(files) end G_D = [G_D data(:,2:end)]; - X = [X repmat(data(:,1),1,step*4)]; + X = [X repmat(data(:,1),1,step*rows)]; p1 = find(files{i}=='/',1,'last')+1; p2 = find(files{i}(p1:end)=='_',1); l0 = [files{i}(p1:p1+p2-2) ' ']; - l1 = {type2str{data(1,[2+(0:step-1)*4])}}; - l2 ={}; - l3 ={}; - l4 ={}; + l1 = {type2str{data(1,[2+(0:step-1)*rows])}}; +% l2 ={}; +% l3 ={}; +% l4 ={}; for i = 1:step - l2{i} = [ l0 l1{i}]; - l3{i} = ['\mu ' l0 l1{i}]; - l4{i} = ['\eta ' l0 l1{i}]; - l5{i} = ['error ' l0 l1{i}]; + leg0 = {leg0{:} ['\mu ' l0 l1{i}] ['\eta ' l0 l1{i}] ['error ' l0 l1{i}] ['\mu2 ' l0 l1{i}]}'; + leg1 = {leg1{:} [ l0 l1{i}]}'; + sym = {sym{:} type2sym{data(1,[2+(i-1)*rows])}}' +% l2{i} = [ l0 l1{i}]; +% l3{i} = ['\mu ' l0 l1{i}]; +% l4{i} = ['\eta ' l0 l1{i}]; +% l5{i} = ['error ' l0 l1{i}]; end - - leg1 = {leg1{:} l2{:}}'; - leg2 = {leg2{:} l3{:}}'; - leg3 = {leg3{:} l4{:}}'; - leg4 = {leg4{:} l5{:}}'; +% leg0 +% leg1 = {leg1{:} l2{:}}' +% leg2 = {leg2{:} l3{:}}' +% leg3 = {leg3{:} l4{:}}' +% leg4 = {leg4{:} l5{:}}' end [m n] = size(G_D); - step = round(n/4); + step = round(n/rows); if step<1 disp ('Error: No Data to show.') @@ -69,25 +74,41 @@ else % G_D figure(4) -loglog(X(:,[2+(0:step-1)*4]),G_D(:,[2+(0:step-1)*4]),'--o') +i=0; +loglog(X(:,[2+(0:rows-2)]+rows*i),[G_D(:,2+rows*i) ... + G_D(:,2+1+rows*i)*G_D(1,2)/G_D(1,2+1+rows*i) ... + sqrt(abs(sol - G_D(:,2+2+rows*i)))*G_D(1,2)/sqrt(abs(sol - G_D(1,2+2+rows*i)))... + G_D(:,2+3+rows*i)*G_D(1,2)/G_D(1,2+3+rows*i)] ... + ,sym{i+1}); hold on -loglog(X(:,[3+(0:step-1)*4]), G_D(:,3+(0:step-1)*4)*G_D(1,2)/G_D(1,3),'-x') -loglog(X(:,[4+(0:step-1)*4]), sqrt(abs(sol -G_D(:,4+(0:step-1)*4)))*G_D(1,2)/sqrt(abs(sol-G_D(1,4))),'-*') -loglog(X(:,1),[20*X(:,1).^(-1/2),5*X(:,1).^(-1/4),5*X(:,1).^(-3/4)],'-.') - +for i = 1:step-1 +loglog(X(:,[2+(0:rows-2)]+rows*i),[G_D(:,2+rows*i) ... + G_D(:,2+1+rows*i)*G_D(1,2)/G_D(1,2+1+rows*i) ... + sqrt(abs(sol - G_D(:,2+2+rows*i)))*G_D(1,2)/sqrt(abs(sol - G_D(1,2+2+rows*i)))... + G_D(:,2+3+rows*i)*G_D(1,2)/G_D(1,2+3+rows*i)] ... + ,sym{i+1}); + +end +loglog(X(:,1),[7*X(:,1).^(-1/2),3*X(:,1).^(-1/4),2*X(:,1).^(-3/4)],'-.') hold off title('Fehler') xlabel('Elemente'); ylabel('Schaetzer'); -legend({leg2{:} leg3{:} leg4{:}... +legend({leg0{:} ... 'N^{-1/2}' 'N^{-1/4}' 'N^{-3/4}'... } ,'location','southwest','box', 'off'); print('-r600','-depsc',[printt '_error.eps']) figure(5) -loglog(X(:,[4+(0:step-1)*4]),G_D(:,[4+(0:step-1)*4]),'-*',X(:,1),repmat(sol,size(X,1),1),'-.') +loglog(X(:,2),G_D(:,2+2),sym{1}); +hold on +for i = 1:step-1 + loglog(X(:,2+i*rows),G_D(:,2+2+i*rows),sym{i+1}); +end +loglog(X(:,1),repmat(sol,size(X,1),1),'r-.') +hold off ylim([min(min(G_D(:,[4+(0:step-1)*4]))) 1.005*max(max(G_D(:,[4+(0:step-1)*4])))]) title('Energie Norm') xlabel('Elemente'); diff --git a/src/A_step.m b/src/A_step.m index 0aba362..7bb3ea5 100644 --- a/src/A_step.m +++ b/src/A_step.m @@ -73,6 +73,15 @@ time = zeros(1,3); xo_fine(f2s) = repmat(x,1,4); xd_fine = xo_fine'-x_fine; ind2 = xd_fine'*A_fine*xd_fine; + + %Fehlerschätzer 3 Aufbauen + tmp = abs([sum(G_C(G_E(:,2),:)-G_C(G_E(:,1),:),2)... + sum(G_C(G_E(:,4),:)-G_C(G_E(:,1),:),2)]); + hmin = min(tmp,[],2); +% sum((x_fine(f2s)-repmat(x,1,4)).^2) + + sizes = sqrt(sum(quadNorm(G_C,G_E,'w').^2,2)); + ind3 = hmin.*sizes.*sum((x_fine(f2s)'-repmat(x',4,1)).^2)'/4; %Energienorm^2 Berechnen @@ -87,7 +96,7 @@ time = zeros(1,3); - data = [data type(i) sqrt(sum(ind)) sqrt(ind2) xe_fine]; + data = [data type(i) sqrt(sum(ind)) sqrt(ind2) xe_fine sqrt(sum(ind3))]; end time(2) = toc; diff --git a/src/computeEstSlpMuTilde.m b/src/computeEstSlpMuTilde.m index 86e481f..dce7564 100644 --- a/src/computeEstSlpMuTilde.m +++ b/src/computeEstSlpMuTilde.m @@ -29,6 +29,6 @@ sizes = sqrt(sum(quadNorm(coo,ele,'w').^2,2)); x_var = sum((xF2S-repmat(sum(xF2S,1)/4,4,1)).^2)'; -ind = hmin.* sizes .* x_var; +ind = hmin.* sizes .* x_var/4; end \ No newline at end of file diff --git a/src/test_sol.m b/src/test_sol.m index 88c9c80..f49cdd7 100644 --- a/src/test_sol.m +++ b/src/test_sol.m @@ -7,7 +7,7 @@ mex mex_build_AU.cpp slpRectangle.cpp % Test ausführen %Anzahl der Schritte -steps = 15; +steps = 30; %LShape adaptiv anisotrop A_run('exmpl_2DQuad', steps, 0.7, [ 1], 0.5, 0.5, 'testAA_') -- 2.47.3