co byste měli umět po dnešní lekci: proložit body přímku, parabolu,... a určit chyby parametrů (u přímky) interpolovat mezi hodnotami v tabulce hledat v tabulce (1D)
prokládání (fitování) křivek metoda nejmenších čtverců, křivka nemusí nutně procházet zadanými body interpolace křivka prochází zadanými body a hledáme hodnotu mezi danými body Lineární regrese
Parabolická regrese
Lineární regrese a nelineární závislosti v ostatních případech je nutno použít nelineární regresi Úkol: Napište funkci, která proloží danými body (ty funkci předáte jako vstupní parametry) přímku, vrátí hodnoty regresních koeficientů včetně chyb a vykreslí graf s body a proloženou přímkou ( plot(x,y,'o',xr,yr) )
Polynomická regrese a interpolace p=polyfit(x, y, n) y=polyval(p,x) (lineární regrese = polyfit(x, y, 1) ) interpolace hledání hodnot mezi přesně zadanými body pro n-bodů existuje jen jeden polynom řádu (n-1), který prochází všemi n-body Příklad: Proložme parabolu zadanými body (300,0.616), (400,0.525) a (500,0.457) Vandermonde matice - podmíněnost!!
Newtonova interpolace lineární sousedící body spojím přímkou (x 2, f(x 2 )) (x, f(x)) (x 1, f(x 1 )) Příklad: Určete hodnotu ln(2) použitím lineární interpolace. Interpolujte mezi body: a) (1,0) a (6,1.7917595) b) (1,0) a (4,1.3862944)
Newtonova interpolace kvadratická sousedící 3 body spojím parabolou Příklad: Určete hodnotu ln(2) použitím kvadratické interpolace. Interpolujte mezi body: (1,0), (4,1.3862944) a (6,1.7917595)
Newtonova interpolace - obecně
Lagrangeova interpolace lineární: kvadratická: obecná: Extrapolačně/interpolační poznámka velké důležitosti: extrapolace znamená hledání hodnot mimo zadaný interval. Polynomy vyšších řádů mají tendenci oscilovat, proto se extrapolaci raději vyhýbejte, popř. extrapolujte je v blízkosti krajních hodnot intervalů s polynomy nižších řádů. I interpolaci je vhodné provádět s polynomy nižších řádů.
implementované funkce pro interpolaci: yi=interp1(x,y,xi,metoda) interpolace v 1D tabulce metoda='nearest', 'linear', 'spline'... (viz help) (interp2 pro interpolaci ve 2D tabulce) interpolovaná data (x,y) musí být setříděná octave:1> a=[1 2; -5 9; -1.3-4.2; 10 0.2] a = 1.00000 2.00000-5.00000 9.00000-1.30000-4.20000 10.00000 0.20000 octave:2> [s,i]=sort(a(:,1)); octave:3> a(i,:) ans = -5.00000 9.00000-1.30000-4.20000 1.00000 2.00000 10.00000 0.20000 třídění dle 1.sloupce setřídění je vždy vzestupné jak data setřídit sestupně?
Hledání v tabulce: sekvenční procházím bod po bodu binární půlení tabulky n=length(x); if (xx<x(1) xx>x(n)) disp('hodnota je mimo tabulku.'); yint=nan; else % sekvencni hledani, tj. bod za bodem i=1; while (1) % nekonecny cyklus if (xx<=x(i+1)), break, end; % nasli jsme i=i+1; end end % a ted linearni interpolace (Newton) yint=y(i)+(y(i+1)-y(i))/(x(i+1)-x(i))*(xx-x(i)); n=length(x); if (xx<x(1) xx>x(n)) disp('hodnota je mimo tabulku.'); yint=nan; else % binarni vyhledavani il=1;iu=n; while (1) % nekonecny cyklus if (iu-il<=1), break, end; im=int((il+iu)/2); % prostred mezi il a iu if (x(im)<xx) il=im; else iu=im; end end end % a ted linearni interpolace (Newton) yint=y(il)+(y(il+1)-y(il))/(x(il+1)-x(il))*(xx-x(il));
Úkol: Napište funkci na interpolaci mezi tabelovanými hodnotami Newtonovou metodou Úkol: Napište funkci na interpolaci mezi tabelovanými hodnotami Lagrangeovou metodou Úkol: Interpolujte funkci f(x)=1/(1+25x 2 ) pro body x=[-1,-0.5, 0, 0.5, 1] polynomu různého stupně a zobrazte výsledek graficky. Použijte funkce polyfit a polyval. Úkol: Napište funkci která hledá a interpoluje v tabulce 2D funkce f=f(x,y). Zkuste jak sekvenční, tak binární hledání. Mezi hodnotami interpolujte lineárně. Troufne si někdo i na 3D funkci? (tj. f=f(x,y,z))