Aproximace a interpolace Aproximace dat = náhrada nearitmetické veličiny (resp. složité funkce) pomocí aritmetických veličin. Nejčastěji jde o náhradu hodnot složité funkce g(x) nebo funkce zadané pouze tabulkou (tj. pomocí bodů) funkcí f(x), která je jednodušší (např. polynom). Tabulkové hodnoty představují buď přesné hodnoty funkce, nebo hodnoty zatížené chybami (získané např. měřením). Podle požadavků na funkci f(x) rozlišujeme: aproximaci chceme, aby se f(x) vzhledem k nějakému kritériu co nejméně lišila od g(x); interpolaci chceme, aby f(x) měla v zadaných bodech stejné funkční hodnoty jako g(x), případně i stejné hodnoty derivací.
Aproximace dat Popis problému: v rovině je dáno n bodů [x 1,y 1 ], [x 2,y 2 ],..., [x n,y n ]. Hledáme funkci f(x), o které předpokládáme, že vystihuje funkční vztah mezi proměnnými x a y: y = f(x), přičemž f(x) je funkce známého tvaru obsahující obecně p parametrů b 1,...,b p (p < n). Pokud je f(x) polynom, musíme volit kompromis mezi: polynom f(x) by měl být dostatečně vysokého stupně, aby byl dobrou aproximací funkce g(x); polynom f(x) by neměl být příliš vysokého stupně, aby zůstaly zachovány nepřesnosti měření.
Když hodnoty y i nejsou zatíženy chybou měření, platí: y i = f(x i ), jenomže ve skutečnosti je y i = f(x i ) + chyba, neboli body [x i, y i ] jsou vlivem chyb kolem křivky f(x) rozptýleny. Cílem aproximace je tedy určit (statisticky odhadnout) neznámé parametry b 1, b 2,..., b p vyžadujeme, aby data byla křivkou proložena tak, že křivka co nejlépe přiléhá k naměřeným bodům [x i, y i ], ale přitom aby nevystihovala naměřené hodnoty příliš věrně (tj. aby nepřesnost měření příliš neovlivnila tvar prokládané křivky).
Jako kritérium pro přiléhavost křivky k bodům se uvažuje součet čtverců rozdílu y i - f(x i, b 1, b 2,..., b p ) * * * Odhady b1, b2,..., bp se určí jako veličiny, kteréčiní tento součet minimálním použije se metoda nejmenších čtverců: S n = i= 1 ( ( * * * f,,,..., ) 2 y x b b b min i S S neboli = 0,..., * * b 1 1 2 p = * (toto je soustava lineárních rovnic s neznámými ). i b p = 0 b i
Po provedení metody nejmenších čtverců (tj. po určení * * * parametrů b1, b2,..., bp) zjišťujeme: reziduum měření y i : u i = y i y * i (kde y i* = f(x i ) jsou aproximované hodnoty a u i udává vzdálenost bodu [x i,y i ] od bodu [x i,y i* ] na křivce f) součet čtverců odchylek (reziduí): počet stupňů volnosti: ν = n odhad rozptylu (δ 2 neznáme): statistický odhad směrodatné chyby měření y i : p s 2 S 0 = S n = 0 n i= 1 p 2 u i s S n = 0 p
Interpolace dat Oproti aproximaci požadujeme, aby při interpolaci hledaná křivky f(x) procházela danými body, o kterých se navíc předpokládá, že jsou navzájem různé. Někdy je požadavek, aby hledaná křivka přesně procházela jen některými (tzv. uzlovými) body. Metody: interpolace polynomem (interpolační polynom stupně n 1 je přesně určen zadanými n body) Lagrangeova metoda, Hermiteův interpolační polynom,... interpolace kubickým splajnem (splajn je po částech polynom 3. stupně a nevykazuje takové oscilace jako interpolační polynom)
Jak v MATLABu aproximaci dat polynomem funkce polyfit (používá metodu nejmenších čtverců) aproximaci dat jinými funkcemi využijeme metodu nejmenších čtverců s vhodně připravenými daty interpolaci dat polynomem funkce polyfit (když chceme interpolovat polynomem stupně n, tak je nutno mít n+1 dat) interpolaci jinými funkcemi využijeme funkce interp1 (4. vstup určuje typ křivky/metodu) nebo interpft (používá Fourierovu transformaci) interpolaci kubickým splajnem funkce spline Pozn.: je-li vstupem matice, tak spline(...) zpracovávářádky a interp1(..., 'spline') sloupce
Metoda nejmenších čtverců [MNČ] MNČ v MATLABu: x,y... naměřeno (sloupcové vektory) chceme např. y aprox = f(x) = af 1 (x) + bf 2 (x) + cf 3 (x) + df 4 (x) % připravíme data: fční hodnoty daných fcí v bodech x X = [f 1 (x), f 2 (x), f 3 (x), f 4 (x)]; koef = X\y; % metoda nejmenších čtverců a=koef(1),b=koef(2),c=koef(3),d=koef(4) y_aprox = X*koef; % hledané řešení
Interpolace kubickým splajnem V MATLABu: x = [0 0.2 0.4 0.5]; % data y = [2 3 4 5]; % data x1 = 0:.1:.5; spl1 = interp1(x,y,x1, 'spline'); spl2 = spline(x,y,x1); plot(x,y,'ko', x1,spl1,'g', x1,spl2,'r')
Nelineární interpolace Optimization Toolbox nabízí funkce pro nelineární interpolaci dat: lsqnonlin... minimalizace funkce pomocí metody nejmenších čtverců, lze ji využít i pro nelineární proložení dat křivkou. Používá různé metody (trustregion methods) implicitně Newtonovu, ale lze zvolit jinou (Gauss-Newton, Levenberg-Marquardt) lsqcurvefit... proloží data křivkou ve smyslu metody nejmenších čtverců, používá stejný algoritmus jako lsqnonlin
Diferenciální rovnice Pro numerické řešení diferenciálních rovnic nabízí MATLAB tyto funkce: funkce ode23 ode45 ode113 ode23t ode15s ode23s ode23tb metoda Runge-Kutta 2,3 Runge-Kutta 4,5 Adams-Bashforth-Moulton lichoběžníkové pravidlo Gear modif. Rosenbrock kombin. Runge-Kutta typ rovnic non-stiff non-stiff non-stiff průměrné stiff stiff stiff stiff Dále lze využít dsolve ze Symbolic Toolboxu.
Řešení diferenciální rovnice Řešení dif. rovnice y' = y + y 2 s počáteční podmínkou y(0) = 1 na intervalu [0; 0,5] v MATLABu: f = inline('y+y.^2','t','y'); % funkce [t,y] = ode45(f,[0; 0.5],1); % řešitel vrátí přibližnéřešení s krokem 0,0125 => 41 hodnot t i a 41 hodnot y(t i ) plot(t,y) % nastavení vyšší přesnosti: options = odeset('reltol', 1e-6); [t,y] = ode45(f,[0; 0.5],1,options);
Minimalizace funkce Optimization Toolbox (pokud je nainstalován, přehled funkcí vypíše >> help optim) nabízí mnoho funkcí, konkrétně pro minimalizaci lze využít: fminbnd fmincon fminsearch fminunc fseminf