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 [2018/01/08 16:55]
miller [Lab. 7]
aniss2016_17 [2018/01/17 09:21] (aktualna)
miller [Lab. 7 (2017)]
Linia 151: Linia 151:
 ====== Lab. 7 (2017) ====== ====== Lab. 7 (2017) ======
  
-Plan: 
  
-  - Kartkówka - (z zagadnień wymienionych w przesłanych materiałach - 18.12.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".
-  - Kalibracja modelu teoretycznego na przykładzie wypływu wody ze zbiornika.+ 
 + **Kalibracja modelu teoretycznego na przykładzie wypływu wody ze zbiornika**.
     - Wybór funkcji aproksymującej:      - Wybór funkcji aproksymującej: 
       * ''h(t) = (sqrt(h0) - k*t/2)^2''        * ''h(t) = (sqrt(h0) - k*t/2)^2'' 
Linia 165: Linia 166:
     - Obliczenie optymalnych wartości parametrów modelu.     - Obliczenie optymalnych wartości parametrów modelu.
     - Walidacja modelu.     - Walidacja modelu.
-  - Budowa modelu na podstawie danych pomiarowych - Aproksymacja dyskretna.+ 
 +     % 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'); 
 + 
 +**Budowa modelu na podstawie danych pomiarowych - Aproksymacja dyskretna.**
     * Aproksymacja przebiegu czasowego stanu wody w rzece.     * Aproksymacja przebiegu czasowego stanu wody 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:      * 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: 
Linia 192: 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 235: 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;   
Linia 247: Linia 270:
   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 treningowych+    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 261: 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. treningowych','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.1515426918.txt.gz · ostatnio zmienione: 2018/01/08 16:55 przez miller