co byste měli umět po dnešní lekci: integrovat funkce různými metodami (lichoběžníkové pravidlo, Simpson,..) počítat vícenásobné integrály počítat integrály podél křivky a integrály komplexních funkcí používat funkci quad pro integraci v jedné proměnné numericky derivovat, používat filtry Golay Savitzky
Lichoběžníková metoda, Simpsonova metoda (1/3, 3/8) (Newton Cotesovy vzorce) Lichoběžníková metoda
Lichoběžníková metoda chyba integrálu function s=trapz(func,a,b,n) s=0.0; h=(b a); dh=h/n; x=a; while (x<b dh) s=s+(feval(func,x+dh)+feval(func,x))/2.0*dh; x=x+dh; end Příklad: spočtěte lichoběžníkovou metodou a porovnejte s přesnou hodnotou
Simpsonovo pravidlo 1/3
Simpsonovo pravidlo 1/3 Příklad: spočtěte Simpsonovým pravidlem 1/3 a porovnejte s přesnou hodnotou
Simpsonovo pravidlo 3/8 obdoba pravidla 1/3, 4 body je proložen Langrangeův polynom 4 tého řádu Newton Cotesovy vzorce
Rombergova integrace function s=romberg(func,a,b,n) % funkce romberg pocita integral funkce func % na intervalu <a,b> Rombergovou metodou % zadava se funkce func, interval integrace % a pocet podintervalu IN=simps13(func,a,b,N); I2N=simps13(func,a,b,2*N); s=i2n+1./3.*(i2n IN); ale to není všechno...
Rombergova integrace dělení intervalu integrace určíme např. lichoběžníkovým pravidlem octave a matlab: funkce quad (viz help) Gaussova kvadratura
Vícenásobná integrace matlab = dblquad, triplequad octave = quad2dg, quadndg Příklad: Spočtěte lichoběžníkovou metodou nebo Simpsonovým pravidlem 1/3. Úloha: Napište skript, který spočte trojrozměrný integrál. Otestuje výpočtem
Vícenásobná integrace Octave function z=f2d(x,y) z=x.^2 3*y.^2+x.*y.^3; function z=f2dn(x) z=x(1,:).^2 3*x(2,:).^2+x(1,:).*x(2,:).^3; quad2dg('f2d',0,4, 2,2) quadndg('f2dm',[0, 2],[4,2]) function z=f3dn(x) z=x(1,:).^3 2*x(2,:).*x(3,:); quadndg('f3dn',[ 1,0, 4],[3,6,4])
Poznámka o adaptivních algoritmech: Lichoběžníková metoda i metody založené na Simpsonových pravidlech potřebují znát počet intervalů, kterým je mj. dána i přesnost výpočtu. Většinou však dopředu nevíme kolik intervalů máme zadat, abychom daný integrál spočetli s požadovanou přesností. Adaptivní algoritmy samy určují počet dělení daného intervalu/podintervalu tak, aby bylo dosaženo požadované přesnosti (za použití rekurze). function y=asimpson(func,a,b,iter,pres,maxit) % funkce asimpson integruje funkci func % na intervalu <a,b> adaptivni Simpsonovou % metodou 1/3 % iter udava pocet iteraci, pri volani se zadava 0 % nepovinne parametry pres a maxint udavaji % presnost a maximalni pocet rekurzi h=b a; c=(a+b)/2.0; % prostredek <a,b> % integral na <a,b> simps1=h*(feval(func,a)+4.0*feval(func,c)+feval(func,b))/6.0; d=(a+c)/2.0; % polovina <a,c> e=(b+c)/2.0; % polovina <c,b> % nyni spoctu integral pres <a,c>+<c,b> a porovnam s vysledkem <a,b> simps2=h*(feval(func,a)+4.0*feval(func,d)+2.0*feval(func,c) +4.0*feval(func,e)+feval(func,b))/12.0; % uz jsem dosahl max.poctu volani? if (iter+1>maxit) y=simps2; % disp('bylo dosazeno maximalniho poctu rekurzi.'); break; % dosahl jsem pozadovane presnosti? elseif (abs(simps2 simps1)<eps) y=simps2+(simps2 simps1)/15.0; % jestlize ne, delim interval dale (rekurze) else levy_simps=asimpson(func,a,c,iter+1,pres,maxit); pravy_simps=asimpson(func,c,b,iter+1,pres,maxit); y=levy_simps+pravy_simps; end;
Integrace funkce podél křivky Příklad: spočtěte integrál funkce pro podél křivky Řešení:
Integrace komplexních funkcí integrace nezávislá na dráze
Numerická derivace function y=derf(func,x,dx) % funkce pocita derivaci funkce func v bode x % pomoci definice derivace (f(x+dx) f(x))/dx % y=derf(func,x,dx) % parametr dx je nepovinny, dx=1e 5 if (nargin<3) dx=1e 5;end; y=(feval(func,x+dx) feval(func,x))/dx;
Numerická derivace jaké zvolit h? Nevillův algoritmus (podobný Rombergově integraci)
Numerická derivace Příklad: určeme derivaci v bodě
Numerická derivace tabulkových hodnot!!!! nutno vyhladit zašuměná data!!!!
vyhlazení zašuměných dat lze provést několika způsoby: 1) prokládáním známé funkce a její následnou derivací 2) prokládáním obecné funkce (polynomu) a její následnou derivací 3) aproximace spline funkcí 4) aplikací šumových filtrů (FT, Golay Savitzky) Golay Savitzkého filtry
Golay Savitzkého filtry nutno mít ekvidistatní data v x hodnota v bodě x i je aproximována pomocí n L bodů nalevo a n R napravo od x i v bodě xi počítáme aproximační polynom M tého řádu koeficienty c n jsou řešením soustavy rovnic nahradí li se f za jednotkové vektory e n (tj. sčítáme hodnoty na m tém řádku)
Golay Savitzkého filtry
Golay Savitzkého filtry přímý výpočet derivace první derivace vyšší derivace
Úkol: Najděte kořen rovnice s přesností 10 5. Úkol: Aproximujte funkci erf(x) metodou nejmenších čtverců funkcí f(x) pro 51 hodnot x v intervalu <0,1>. Určete koeficienty c i a vytiskněte tabulku rozdílu erf(x) f(x) pro všech 51 hodnot x.