rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
HMM_MIKRO_teil.m
1 function [u,w,index_n]=HMM_MIKRO_teil(T,u,epsilon,tau,dx,dt,n_x,M,index)
2 %
3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 %%% Berechnung der Loesung des mirkoskopischen Modells %%%
5 %%% fuer einen Zeitschritt %%%
6 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7 %
8 % function
9 %
10 % Input: T Inverse Matrix von A
11 % u stueckweise konstante Rekonstruktion, AB
12 % epsilon,tau (Regularisierungs-) Parameter
13 % dx, n_x mikroskopische Ortsschrittweite, Anzahl
14 % mikroskopischer Ortsschritte
15 % x Stuetzstellen
16 % dt, nt mikroskopische Zeitsschritte, Anzahl
17 % mikroskopischer Zeitschritte
18 % ul, ur linker bzw. rechter Zustand
19 % Output: u Loesung des mirkoskopischen Modells auf dem mikro-
20 % skopischen Gitter
21 
22 
23 
24 if nargin==9
25  index = sort(index);
26  U = [];
27  Ie = [];
28  Ia = 1;
29  I = [];
30  W=[];
31  for i=1:length(index)-1;
32  if index(i+1)-index(i)==0
33  error('Index kommt doppelt vor');
34  elseif index(i+1)-index(i)>1 % Zusaetzliche Abfrage, dass mind 3 aufeinanderfolgende Werte
35  Ia = [Ia, i+1];
36  Ie = [Ie, i];
37  end
38  end
39  Ie = [Ie,length(index)];
40 
41  for i=1:length(Ie)
42  ni = Ie(i)-Ia(i)+1; % Anzahl aufeinanderfolgender Stuetzstellen
43  if ni<=2
44  error('Zu wenig aufeinanderfolgende Stuetzstellen.')
45  end
46  % Diskretisierungsmatrix A in IR^{(ni-2)x(ni-2)}
47  n=ni-2;
48  a = 2+dx^2/(epsilon^2*tau);
49  c = epsilon^2*tau/(dx^2);
50  A = c*(diag(a*ones(1,n))+diag(-ones(1,n-1),1)+diag(-ones(1,n-1),-1));
51  A(1,1)=A(1,1)-1; % evtl. BESSERE Randbedg. einfuegen!!!!!
52  A(n,n)=A(n,n)-1;
53 
54  b = zeros(ni,1);
55  for k=2:ni-1
56  b(k) = epsilon*(BL_D(u(index(Ia(i))+k-1))*(u(index(Ia(i))+k)-u(index(Ia(i))+k-1))-BL_D(u(index(Ia(i))+k-2))*(u(index(Ia(i))+k-1)-u(index(Ia(i))+k-2)))/(dx^2)-(BL_f(u(index(Ia(i))+k-1),M)-BL_f(u(index(Ia(i))+k-2),M))/dx;
57  end
58  b(1) = [];
59  b(end) = [];
60  %%% Loesen des LGS Aw=b
61  w = A\b;
62 
63  %%% Bestimmung der Loesung u mit Hilfe von w=u_t und oben berechnetem w
64  u_local = u(index(Ia(i))+1:index(Ie(i))-1)+dt*w';
65  U = [U,u_local];
66  I = [I,index(Ia(i)+1):index(Ie(i)-1)];
67  W = [W,w'];
68  end
69  u = U;
70  w = W;
71  index_n = I;
72 
73 
74 
75 else
76  b = zeros(n_x,1);
77  for i=2:n_x-1
78  b(i) = epsilon*(BL_D(u(i))*(u(i+1)-u(i))-BL_D(u(i-1))*(u(i)-u(i-1)))/(dx^2)-(BL_f(u(i),M)-BL_f(u(i-1),M))/dx;
79  end
80  b(1) = [];
81  b(end) = [];
82 
83  %%% Loesen des LGS Aw=b
84  w = T*b;
85  % Hinzunahme der RB w_1=0, w_nx=0
86  w = [0;w;0];
87  %%% Bestimmung der Loesung u mit Hilfe von w=u_t und oben berechnetem w
88  u = u+dt*w';
89 end