Narzędzia użytkownika

Narzędzia witryny


aniss2016_17

====== Różnice ====== Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

aniss2016_17 [2017/12/11 11:55]
miller [Lab. 7]
aniss2016_17 [2018/01/17 09:21] (aktualna)
miller [Lab. 7 (2017)]
Linia 100: Linia 100:
 Kartkówka - wg zagadnień i przykładowych zadań wysłanych do systemu Dziekanat.     Kartkówka - wg zagadnień i przykładowych zadań wysłanych do systemu Dziekanat.    
  
-Ćwiczenie nr 6: **Kalibracja modelu**+Ćwiczenie nr 6: **Wstęp do kalibracji modelu**
  
-   w przygotowaniu +**Zadanie**: Zbudować model umożliwiający symulację wypływu wody ze zbiornika. Dopuszczalne błędy: 
-====== Lab7 ======+        względny błąd symulacji bieżącego poziomu wody ''rel_err_max'' = 1e-3,  
 +        - błąd bezwzględny ''abs_err_max'' 2[mm]
  
-Plan:+**Parametry zbiornika** 
 +     - Geometria      
 +        - średnica zbiornika ''D'' = 218 mm, 
 +        - średnica poziomej rurki wypływowej ''d'' = 9 mm, 
 +        - oś rurki wypływowej jest na wysokości ''h_r'' = 15 mm nad dnem zbiornika.       
 +     - Na dnie zbiornika stoi (na większej podstawie) stożek ścięty (nie jest wypełniany wodą): 
 +        - średnica dolna ''DS'' = 90 mm, 
 +        - średnica górna ''ds'' = 50 mm, 
 +        - wysokość ''h_s'' = 55 mm.  
 +     - Początkowa wysokość lustra wody (liczona od dna zbiornika) ''h0'' = 145 mm.  
 +    
 +**Model teoretyczny** zgodny z równaniami Bernoulliego. 
  
-  - Kartkówka - zagadnienia:+Energia potencjalna zgromadzonej wody jest zamieniana na energię kinetyczną wody wypływającej. 
 + 
 +Otrzymujemy równanie różniczkowe: ''dh/dt = -k sqrt(h)'', gdzie ''k=(d/D)^2*sqrt(2*g)''. 
 + 
 +Model w SIMULINKu. 
 + 
 +**Dane pomiarowe:** Czas ''t'' (w sekundach), poziom wody mierzony od dna naczynia ''h'' (w metrach) 
 + 
 +t = [0 7.05 14.24 21.95 30.00 38.32 47.08 56.46 66.89 78.72 90.65 104.58 113.64 123.07 135.75]; 
 + 
 +h = [0.145 0.135 0.125 0.115 0.105 0.095 0.085 0.075 0.065 0.055 0.045  0.035 0.030 0.025 0.020]; 
 + 
 +**Porównanie wyników symulacji z danymi pomiarowymi**. 
 +   - wykres danych, 
 +   - sprawdzenie spełnienia założonych wymagań, 
 +   - potencjalne źródła rozbieżności: 
 +      - "driver" symulacji - jak zweryfikować? 
 +      - model (parametry lub struktura) - analiza założeń upraszczających.    
 + 
 +**Ilościowa ocena błędu symulacji** 
 +Rozwiązanie analityczne dla ''h(0)=h0'':  
 + 
 +    - ''h(t) = (sqrt(h0) - k*t/2)^2'',  albo: 
 +    - ''t(h) = 2*(sqrt(h0) - sqrt(h))/k''. 
 + 
 +Tę relację zapisujemy w pliku typu ''function'' (skorzystamy na następnym laboratorium).   
 + 
 +**Plan następnego ćwiczenia** 
 +   - Kalibracja modelu - znajdowanie optymalnych wartości parametrów modelu. 
 +   - Aproksymacja danych pomiarowych w przypadku braku opisu teoretycznego. 
 +====== Lab. 7 (2017) ====== 
 + 
 + 
 + 
 + Kartkówka - (z zagadnień wymienionych w przesłanych materiałach - 18.12.2017):
     * aproksymacja danych pomiarowych - aproksymacja a interpolacja, miary błędu aproksymacji, kiedy zagadnienie aproksymacji sprowadza się do zagadnienia liniowego,      * aproksymacja danych pomiarowych - aproksymacja a interpolacja, miary błędu aproksymacji, kiedy zagadnienie aproksymacji sprowadza się do zagadnienia liniowego, 
     * numeryczne metody znajdowania minimum funkcji - przykłady metod bezgradientowych oraz gradientowych 1, i 2, rzędu, różnice między metodą Newtona a metodami quasi-newtonowskimi, ogólny schemat metod: minimalizacji wzdłuż współrzędnych (coordinate descent method), najszybszego spadku, Newtona i metody "trust region".     * numeryczne metody znajdowania minimum funkcji - przykłady metod bezgradientowych oraz gradientowych 1, i 2, rzędu, różnice między metodą Newtona a metodami quasi-newtonowskimi, ogólny schemat metod: minimalizacji wzdłuż współrzędnych (coordinate descent method), najszybszego spadku, Newtona i metody "trust region".
-  - Aproksymacja danych pomiarowych  
-    * Metody optymalizacji w aproksymacji. 
-    * Aproksymacja danych pomiarowych dla wypływu wody. 
-    * Kalibracja i walidacja modelu wypływu wody ze zbiornika. 
-    * Aproksymacja przebiegu czasowego stanu wody w rzece. 
-    * Kryterium doboru parametrów funkcji aproksymującej na przykładzie aproksymacji funkcji jednej zmiennej. 
-    * Zależność od dwóch zmiennych, 
-      - regularna i nieregularna siatka danych, 
-      - wybór funkcji bazowych - wielomiany, funkcje radialne, 
-      - aproksymacja nieparametryczna - algorytm LOWESS (locally weighted scatterplot smoothing). 
  
 + **Kalibracja modelu teoretycznego na przykładzie wypływu wody ze zbiornika**.
 +    - Wybór funkcji aproksymującej: 
 +      * ''h(t) = (sqrt(h0) - k*t/2)^2'' 
 +      * ''t(h) = 2*(sqrt(h0) - sqrt(h))/k'' 
 +    - Sprowadzenie problemu do zagadnienia liniowego.
 +    - Obliczenie wartości przebiegu symulowanego w punktach pomiaru.
 +    - Funkcja błędu.
 +    - Obliczenie optymalnych wartości parametrów modelu.
 +    - Walidacja modelu.
  
 +     % Kalibracja modelu wypływu wody
 +     format long e,  format compact
 +     % Dane pomiarowe:
 +     t = [0 7.05 14.24 21.95 30.00 38.32 47.08 56.46 66.89 78.72 90.65 104.58 113.64 123.07 135.75];
 +     h = [0.145 0.135 0.125 0.115 0.105 0.095 0.085 0.075 0.065 0.055 0.045 0.035 0.030 0.025 0.020]-0.015;
 +     h0 = 0.13;  % początkowy poziom lustra wody.
 +     % Wybór danych do kalibracji (ponad stożkiem):
 +     ti = t(1:10);  hi = h(1:10);
 +     % Obliczania optymalnego parametru a(=1/k):
 +     ds = sqrt(h0)-sqrt(hi);
 +     a = 0.5*ds*ti'/(ds*ds');  % uwaga: w*w' to iloczyn skalarny
 +     k = 1/a
 +     % Wykres pomiarów ('o') i symulacji ('-')
 +     ts = 0:0.1:140; hs = (sqrt(h0)-k*ts/2).^2;
 +     plot(t,h,'o',ts,hs), legend('pomiary','symulacja');
  
-Temat: Aproksymacja dyskretna +**Budowa modelu na podstawie danych pomiarowych - Aproksymacja dyskretna.** 
- +    * Aproksymacja przebiegu czasowego stanu wody w rzece. 
- 1. Aproksymacja przepływu fali wezbraniowej w rzece. +    * Dane: 69 pomiarów na posterunku w Stróży przepływu wody w Rabie od 17.11.2015 g. 10.00  do 20.11 g. 6.00: 
-     +
- * 69 pomiarów na posterunku w Stróży przepływu wody w Rabie od 17.11.2015 g. 10.00  do 20.11 g. 6.00: +
  
     q = [2.40  2.56   2.56  2.56  2.72  2.88  3.20  4.04  5.56  6.20  9.30 14.70 ...     q = [2.40  2.56   2.56  2.56  2.72  2.88  3.20  4.04  5.56  6.20  9.30 14.70 ...
Linia 152: Linia 210:
   % to plot the FittedCurve at the end.   % to plot the FittedCurve at the end.
   %   %
-  function [sse, FittedCurve] = expfun(params) +    function [sse, FittedCurve] = expfun(params) 
-    A1 = params(1); +      A1 = params(1); 
-    lambda1 = params(2); +      lambda1 = params(2); 
-    FittedCurve = A1 .* exp(-lambda1 * xdata); +      FittedCurve = A1 .* exp(-lambda1 * xdata); 
-    ErrorVector = FittedCurve - ydata; +      ErrorVector = FittedCurve - ydata; 
-  end+      sse = sum(ErrorVector .^ 2); 
 +    end
   end   end
  
  * Wywołanie funkcji aproksymującej:  * Wywołanie funkcji aproksymującej:
- +   
-  [estimates, model= fitcurveQ0(t,q);+  % Dane pomiarowe: 
 +  q = [2.40  2.56   2.56  2.56  2.72  2.88  3.20  4.04  5.56  6.20  9.30 14.70 ... 
 +      18.20 21.80  27.80 30.20 31.40 30.20 29.00 27.80 25.40 24.20 23.00 21.80 ... 
 +      21.80 20.60  19.40 19.40 18.20 17.00 17.00 15.90 14.70 14.70 13.50 13.50 ... 
 +      12.30 12.30  11.10 11.10 10.50 10.50 10.50  9.90  9.90  9.90  9.30  9.30 ... 
 +       9.30  8.70   8.70  8.70  8.70  8.70  8.10  8.10  8.10  8.10  7.34  6.96 ... 
 +       6.96  6.96   6.96  6.96  6.58  7.34  6.96  6.96  6.96]
 +  = 1:52;  q=q(18:end);
   %   %
-  plot(t, q, '*');  hold on +  [estimates, model] = fitcurveQ0(t,q);  % aproksymacja nieliniowa 
-  [sse, FittedCurve] = model(estimates); +  [sse, FittedCurve] = model(estimates); % wykres znalezionej aproksymacji  
-  plot(xdata, FittedCurve, 'r')+  plot(t, q, '*',t, FittedCurve, 'ro')
   %    % 
-  xlabel('t') +  xlabel('t')ylabel('q')title(['Fitting to function ', func2str(model)]);
-  ylabel('q') +
-  title(['Fitting to function ', func2str(model)]);+
   legend('data', ['fit using ', func2str(model)])   legend('data', ['fit using ', func2str(model)])
-  hold off 
      
  * Aproksymacja funkcją z większą liczbą parametrów  * Aproksymacja funkcją z większą liczbą parametrów
  
- 2. Aproksymacja wielomianowa - obliczanie współczynników wielomianu za pomocą macierzy Vandermonde'a: + 2. **Aproksymacja wielomianowa - obliczanie współczynników wielomianu za pomocą macierzy Vandermonde'a**
  
   format compact   format compact
Linia 195: Linia 258:
   hold off    hold off 
  
- 3. Aproksymacja wielomianowa - kryterium wyboru stopnia wielomianu:+ 3. **Aproksymacja wielomianowa - kryterium wyboru stopnia wielomianu**:
      
-  clear, close all+  clear, close all, format short, format compact
   t = 0:0.001:1;  y = sin(2*pi*t); % zależność aproksymowana   t = 0:0.001:1;  y = sin(2*pi*t); % zależność aproksymowana
   tz = 0:0.05:1;      tz = 0:0.05:1;   
   yz = sin(2*pi*tz) + (rand(1,21)-0.5);  % wyniki pomiarów   yz = sin(2*pi*tz) + (rand(1,21)-0.5);  % wyniki pomiarów
   %   %
-  tp = tz(1:2:end);      yp = yz(1:2:end);  % zbiór ćwiczebny+  tp = tz(1:2:end);      yp = yz(1:2:end);  % zbiór treningowy
   t_test = tz(2:2:end);  y_test = yz(2:2:end);  % zbiór testowy   t_test = tz(2:2:end);  y_test = yz(2:2:end);  % zbiór testowy
   %   %
   figure(1), plot(t,y,'r',tp,yp,'o',t_test,y_test,'x'), hold on,   figure(1), plot(t,y,'r',tp,yp,'o',t_test,y_test,'x'), hold on,
   %   %
-  err = zeros(1,10); err_t = zeros(1,10); % tablice błędów+  err_trening = zeros(1,10); err_test = zeros(1,10); % tablice błędów
   for n = 1:10   for n = 1:10
     p = polyfit(tp,yp,n);      % p - współczynniki wielomianu     p = polyfit(tp,yp,n);      % p - współczynniki wielomianu
     ypa = polyval(p,tp);       % wartości funkcji aproksymującej     ypa = polyval(p,tp);       % wartości funkcji aproksymującej
-    dy = ypa-yp; err(n) = sqrt((dy*dy')/11),  % błąd w punktach ćwiczebnych+    dy = ypa-yp; err_trening(n) = sqrt((dy*dy')/11),  % błąd w punktach treningowych
     %       %  
     y_test_a = polyval(p,t_test); % wartości f.aproks. w punktach testowych     y_test_a = polyval(p,t_test); % wartości f.aproks. w punktach testowych
     dy_test = y_test_a-y_test;      dy_test = y_test_a-y_test; 
-    err_t(n) = sqrt((dy_test*dy_test')/10), % błąd w punktach testowych+    err_test(n) = sqrt((dy_test*dy_test')/10), % błąd w punktach testowych
     %       %  
     plot(t,polyval(p,t)), pause,     plot(t,polyval(p,t)), pause,
Linia 221: Linia 284:
   hold off   hold off
   %   %
-  figure(2), plot(1:10,err,'ro-',1:10,err_t,'bx-');+  figure(2), plot(1:10,err_trening,'ro-',1:10,err_test,'bx-');
   xlabel('stopien wielomianu')   xlabel('stopien wielomianu')
-  legend('blad w p. cwiczebnych','blad w p. testowych')+  legend('blad w p. treningowych','blad w p. testowych') 
 + 
 + 
 +====== Terminy zaliczeń (2017/18) ======
  
 +  Drugi termin: 31 stycznia 2018.
 +  Trzeci termin: 7 lutego 2018.
 +  (Godziny - do ustalenia)
      
aniss2016_17.1512989724.txt.gz · ostatnio zmienione: 2017/12/11 11:55 przez miller