Základy numerické matematiky. Interpolace a aproximace funkcí

Podobné dokumenty
Numerická matematika Písemky

FP - SEMINÁŘ Z NUMERICKÉ MATEMATIKY. Katedra matematiky a didaktiky matematiky Technická univerzita v Liberci

Polynomy a interpolace text neobsahuje přesné matematické definice, pouze jejich vysvětlení

ODR metody Runge-Kutta

úloh pro ODR jednokrokové metody

Libovolnou z probraných metod najděte s přesností na 3 desetinná místa kladný kořen rovnice. sin x + x 2 2 = 0.

Kombinatorická minimalizace

Aproximace a interpolace

I. 7. Diferenciál funkce a Taylorova věta

Interpolace pomocí splajnu

Numerické řešení diferenciálních rovnic

Co je obsahem numerických metod?

Numerická matematika. Zadání 25. Řešení diferenciální rovnice Rungovou Kuttovou metodou

Čebyševovy aproximace

Integrace. Numerické metody 7. května FJFI ČVUT v Praze

Nejdřív spočítáme jeden příklad na variaci konstant pro lineární diferenciální rovnici 2. řádu s kostantními koeficienty. y + y = 4 sin t.

Soustavy lineárních rovnic

Aproximace funkcí. x je systém m 1 jednoduchých, LN a dostatečně hladkých funkcí. x c m. g 1. g m. a 1. x a 2. x 2 a k. x k b 1. x b 2.

Aplikovaná matematika I

Ekonomická fakulta, Jihočeská univerzita v Českých Budějovicích. MATEMATICKÝ SOFTWARE MAPLE - MANUÁL Marek Šulista

Diferenciální rovnice II

Numerické řešení obyčejných diferenciálních rovnic

Aplikovaná numerická matematika - ANM

Typy příkladů na písemnou část zkoušky 2NU a vzorová řešení (doc. Martišek 2017)

5. Interpolace a aproximace funkcí

Soustavy lineárních rovnic-numerické řešení. October 2, 2008

Metoda nejmenších čtverců Michal Čihák 26. listopadu 2012

Soustavy lineárních diferenciálních rovnic I. řádu s konstantními koeficienty

Numerická integrace a derivace

Soustavy lineárních rovnic-numerické řešení

Limita ve vlastním bodě

Interpolace, ortogonální polynomy, Gaussova kvadratura

Cvičení z Numerických metod I - 12.týden

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

VÝUKA MOŽNOSTÍ MATLABU

Obyčejné diferenciální rovnice počáteční úloha. KMA / NGM F. Ježek

Funkce jedné reálné proměnné. lineární kvadratická racionální exponenciální logaritmická s absolutní hodnotou

Wolfram Alpha. v podobě html stránky, samotný výsledek je často doplněn o další informace (např. graf, jiné možné zobrazení výsledku a

Hledání extrémů funkcí

1. Chyby vstupních dat metody převedení úlohy na numerickou (řád použité metody) zaokrouhlovací reprezentace čísel v počítači

2.7.6 Rovnice vyšších řádů

NUMERICKÉ METODY. Problematika num. řešení úloh, chyby, podmíněnost, stabilita algoritmů. Aproximace funkcí.

GEODETICKÉ VÝPOČTY I.

4 Numerické derivování a integrace

Pozn. 1. Při návrhu aproximace bychom měli aproximační funkci vybírat tak, aby vektory ϕ (i) byly lineárně

Numerická matematika Banka řešených příkladů

Rovinná úloha v MKP. (mohou být i jejich derivace!): rovinná napjatost a r. deformace (stěny,... ): u, v. prostorové úlohy: u, v, w

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

Globální matice konstrukce

Příklady pro cvičení 22. dubna 2015

Připomenutí co je to soustava lineárních rovnic

Moderní numerické metody

7.3. Diferenciální rovnice II. řádu

Úlohy k přednášce NMAG 101 a 120: Lineární algebra a geometrie 1 a 2,


Monotonie a lokální extrémy. Konvexnost, konkávnost a inflexní body. 266 I. Diferenciální počet funkcí jedné proměnné

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Soustavy nelineárních rovnic pomocí systému Maple. Newtonova metoda.

Interpolace, aproximace

MATrixLABoratory letný semester 2004/2005

Matematika I A ukázkový test 1 pro 2011/2012. x + y + 3z = 1 (2a 1)x + (a + 1)y + z = 1 a

2.7.6 Rovnice vyšších řádů

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

České vysoké učení technické v Praze Fakulta jaderná a fyzikálně inženýrská OKRUHY. ke státním závěrečným zkouškám BAKALÁŘSKÉ STUDIUM

Úlohy nejmenších čtverců

Podobnostní transformace

Maple. Petr Kundrát. Ústav matematiky, FSI VUT v Brně. Maple a základní znalosti z oblasti obyčejných diferenciálních rovnic.

Matematika I pracovní listy

Literatura: Kapitola 2 d) ze skript Karel Rektorys: Matematika 43, ČVUT, Praha, Text přednášky na webové stránce přednášejícího.

Hledáme lokální extrémy funkce vzhledem k množině, která je popsána jednou či několika rovnicemi, vazebními podmínkami. Pokud jsou podmínky

Učební plán 4. letého studia předmětu matematiky. Učební plán 6. letého studia předmětu matematiky

Základy algoritmizace a programování

A 9. Počítejte v radiánech, ne ve stupních!

Numerické řešení diferenciálních rovnic

4.3.2 Goniometrické nerovnice

Extrémy funkce dvou proměnných

Determinant matice řádu 5 budeme počítat opakovaným použitím rozvoje determinantu podle vybraného řádku nebo sloupce. Aby byl náš výpočet

Numerické metody a programování. Lekce 4

Soustava m lineárních rovnic o n neznámých je systém

Integrace funkcí více proměnných, numerické metody

Numerické metody a programování. Lekce 7

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu (reg. č. CZ.1.07/2.2.00/28.

Četba: Texty o lineární algebře (odkazy na webových stránkách přednášejícího).

ALGEBRA. 1. Pomocí Eukleidova algoritmu najděte největší společný dělitel čísel a a b. a) a = 204, b = 54, b) a = , b =

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Matematická analýza III.

Lineární a polynomická regrese, interpolace, hledání v tabulce

Základy matematiky pro FEK

Numerické metody a programování

Matematika NÁRODNÍ SROVNÁVACÍ ZKOUŠKY ZADÁNÍ NEOTVÍREJTE, POČKEJTE NA POKYN!

Literatura: Kapitoly 3, 4 a 2 d) ze skript Karel Rektorys: Matematika 43, ČVUT, Praha, Text přednášky na webové stránce přednášejícího.

APROXIMACE KŘIVEK V MATLABU NEWTONŮV INTERPOLAČNÍ POLYNOM CURVE FITTING IN MATLAB NEWTON INTERPOLATION POLYNOMIAL

předmětu MATEMATIKA B 1

Matematika. ochrana životního prostředí analytická chemie chemická technologie Forma vzdělávání:

a vlastních vektorů Příklad: Stanovte taková čísla λ, pro která má homogenní soustava Av = λv nenulové (A λ i I) v = 0.

Výpočet excentrického klikového mechanismu v systému MAPLE 11 Tomáš Svoboda Technická fakulta Česká Zemědělská Univerzita

Budeme hledat řešení y(x) okrajové úlohy pro diferenciální rovnici druhého řádu v samoadjungovaném tvaru na intervalu a, b : 2 ) y i p i+ 1

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

Matematika 1 sbírka příkladů

Transkript:

Základy numerické matematiky Interpolace a aproximace funkcí Nejdříve se podíváme na interpolaci. Lagrangeovu interpolaci počítá Maple pomocí funkce interp. Jejími parametry jsou - soubor uzlů, funkčních hodnot v těchto uzlech a název proměnné, ve které aproximační polynom počítáme. > Lagrange := interp([0,1,2,3,4],[3,6,-1,4,5],x); > f := x -> Lagrange; > plot(f(x),x=-1..5); 19 79 401 149 Lagrange := + + + 12 x4 6 x3 12 x2 6 x 3 f := x Lagrange Hermitův interpolační polynom neumí Maple počítat, museli bychom ho sami naprogramovat. Interpolační polynomy často nejsou nejvhodnější aproximací funkce. Zvláště při ekvidistantních uzlech i přes zvyšování jejich počtů získáváme stále horší a horší aproximace. Proto se většinou na aproximaci funkce používá lepších funkcí, například

splinů. Maple umí počítat všechny možné druhy splinů, ale nejdříve musíme načíst knihovnu spline. > readlib(spline); proc( XX, YY, z, d)... end proc Maple počítá takzvané přirozené spliny. Například u kubického splinu to znamená, že spline je dán jednak uzly a funkčními hodnotami v nich a pak dvěmi dodatečnými podmínkami - nulovostí derivací aproximované funkce v krajních uzlech. > linearni:= spline([0,1,2,3,4],[3,6,-1,4,5],x,linear); > kubicky := spline([0,1,2,3,4],[3,6,-1,4,5],x,cubic); > pateho_stupne := spline([0,1,2,3,4],[3,6,-1,4,5],x,5); > plot([linearni,kubicky,pateho_stupne],x=0..4, color=[green,red,blue]); 3 + 3 x x < 1 13 7 x x < 2 linearni := 11 + 5 x x < 3 1 + x otherwise 185 3 + 28 x 101 28 x3 x < 1 121 1163 + + 14 28 x 489 225 14 x2 28 x3 x < 2 kubicky := 1511 3733 + 14 28 x 105 183 2 x2 28 x3 x < 3 878 2801 + + 7 28 x 177 59 7 x2 28 x3 otherwise pateho_stupne := 6497 3 + + 460 x 10701 467 920 x2 920 x5 x < 1 571 1977 + + + 115 460 x 7379 452 226 1341 920 x2 23 x3 23 x4 920 x5 x < 2 9917 106857 202381 + x x 2 2170 859 1281 + + 115 460 920 23 x3 46 x4 920 x5 x < 3 41356 234963 253379 x + x 2 1628 407 407 + 115 460 920 23 x3 46 x4 920 x5 otherwise

Další často používanou aproximací funkcí je metoda nejmenších čtverců. Maple ji počítá příkazem leastsquare, který je obsažený v balíčku stats,fit. > with(stats,fit); [ fit] Teď už můžeme s chutí aproximovat. S lineární aproximací je to jednoduché. Jako parametry je potřeba zadat pouze proměnné, ve kterých bude aproximace počítána a příslušné body, kterými bude přímka prokládána. > fit[leastsquare[[x,y]]]([[0,1,2,3,4],[2,3,-3,2,5]]); 4 x y = + 5 2 Samozřejmě můžeme hledat metodou nejmenších čtverců aproximace jinými funkcemi než lineárními, například kvadratickými. Musíme pouze dodat dva další parametry. druh funkce, kterou budeme aproximovat a její parametry, které metodou nejmenších čtverců Maple dopočítá. > fit[leastsquare[[x,y],y=a*x^2+b*x+c, {a,b,c}]]([[0,1,2,3,4],[2,3,-3,2,5]]);

15 53 y = + 14 x2 14 x 103 35 Na závěr porovnáme všechny ukázané aproximace na průměrně "odporné" funkci sin( x 2 ). > f:= t -> sin(t^2); > lagrange := interp([0,1,2,3,4,5],[f(0),f(1),f(2),f(3),f(4),f(5)],x): > lin_spline := spline([0,1,2,3,4,5],[f(0),f(1),f(2),f(3),f(4),f(5)],x,linear ): > kub_spline := spline([0,1,2,3,4,5],[f(0),f(1),f(2),f(3),f(4),f(5)],x,cubic) : > pat_spline := spline([0,1,2,3,4,5],[f(0),f(1),f(2),f(3),f(4),f(5)],x,5): > least_kvadra := fit[leastsquare[[t,z],z=a*t^2+b*t+c,{a,b,c}]]([[0,1,2,3,4,5], [f(0),f(1),f(2),f(3),f(4),f(5)]]): > kvadra_func:=unapply(rhs(least_kvadra),t): > plot1 := plot([lagrange,lin_spline,kub_spline,pat_spline,kvadra_func(x ),sin(x^2)],x=0..5,color=[red,green,blue,magenta,aquamarine,b lack]): > plot2 := plots[textplot]([[2,3,`lagrangeova interpolace`],[2,2.7, `linearni spline`],[2,2.4,`kubicky spline`],[2,2.1,`spline 5. stupne`],[2,1.8,`nejmensich ctverce - kvadraticka fce.`]],align={above,right}): > plot11 := plots[pointplot]([1.8,3.1],color=red,symbol=box): > plot22 := plots[pointplot]([1.8,2.8],color=green,symbol=box): > plot33 := plots[pointplot]([1.8,2.5],color=blue,symbol=box): > plot44 := plots[pointplot]([1.8,2.2],color=magenta,symbol=box): > plot55 := plots[pointplot]([1.8,1.9],color=aquamarine,symbol=box): > plots[display]({plot1,plot2,plot11,plot22,plot33,plot44,plot5 5}); f := t sin( t 2 )

Poučení z tohoto příkladu je jedno - na špatně zvolené uzly a jejich malý počet je kterákoliv apriximační metoda krátká. Přesto je na první pohled zjevný nedostatek Lagrangeovy interpolace. Samozřejmě aproximovat zvolené body kvadratickou funkcí je nesmysl. Lineární algebra v numerické matematice Na většinu zde probíraných příkladů budeme potřebovat načtení knihovny linalg. > with(linalg): Této knihovně se věnuje převážně list Algebra. Gaussova eliminace a její numerické problémy, norma matice, podmíněnost Jak bylo ukázáno v listu Algebra Maple umí upravovat matice Gaussovou eliminací pomocí příkazu gausselim. Numericky se v Maplu provádí Gaussova eliminace s pivotací. Pokud matice obsahuje desetiná čísla provádí se eliminace v režimu pohyblivé desetinné čárky: > A:= matrix([[2.111,3.15,1.23,4.33],[1.04,-1.3,0,2],[5.33,4.33,

1.22,0],[2,-1,-1.44,-10.12]]); > gausselim(a); 2.111 3.15 1.23 4.33 1.04-1.3 0 2 A := 5.33 4.33 1.22 0 2-1 -1.44-10.12 5.33 4.33 1.22 0. 0-2.624765479-1.897786116-10.12 0 0 1.312763974 10.26975440 0 0 0 1.071824961 Pomocí funkce pivot se v Maplu provádí pivotace matice. Parametry jsou samozřejmě matice, její řádka a sloupec tak abychom po přičtení jistého násobku řádky k ostaním řádkám dosáhli v zadaném sloupci nuly (samozřejmě až na zadaný řádek): > pivot(a,4,1); 0. 4.205500000 2.749920000 15.01166000 0. -0.7800000000 0.7488000000 7.262400000 0. 6.995000000 5.057600000 26.96980000 2-1 -1.440000000-10.12000000 Norma matice se počítá úplně stejně jako norma vektoru, pouze s tím rozdílem, že Maple umí jen normu spektrální (2), maximální sloupcový součet (1), maximální řádkový součet (infinity) a Schurovu (frobenius). Takhle vypadá Schurova norma matice A - tedy odmocnina ze součtu druhých mocnin prvků matice A: > A := matrix(3,3,[[5,-9,5],[1,-2,1],[2,3,3]]); > norm(a,frobenius); 5-9 5 A := 1-2 1 2 3 3 159 Podmíněnost matice zjistíme pomocí funkce cond: > A := matrix(3,3,[[5,-9,5],[1,-2,1],[2,3,3]]); > podminenost_a := cond(a); 5-9 5 A := 1-2 1 2 3 3 podminenost_a := 988 Rozklady matic

Trojúhelníkový rozklad najdeme v Maple pomocí funkce LUdecomp: > A := matrix([[3,-9,-5],[1,5,3],[-5,0,3]]); > LUdecomp(A); 3-9 -5 A := 1 5 3-5 0 3 3-9 -5 14 0 8 3 41 0 0 12 Příkaz LUdecomp je silně variabilní, pomocí jeho parametrů můžeme velmi podrobně ovlivňova postup výpočtů, více viz. help na LUdecomp. Maple ovládá i jiné druhy rozkladů, například Choleského rozklad pozitivně definitní symetrické matic A na dolní trojúhelníkové matice L a L t tak, aby platilo A = L L t. > B:= matrix([[7,-1,4],[-1,5,1],[4,1,5]]); > cholesky(b); 7-1 4 B := -1 5 1 4 1 5 7 0 0 7 238 0 7 7 4 7 11 238 5 102 7 238 34 Nakonec si ukážeme QR rozklad, tj. rozklad matice na horní trojúhelníkovou matici a matici unitární. > QRdecomp(A); 22 35 35 35 112910 0 35 0 0 27 35 35 753 112910 56455 41 3226 1613

Diferenční rovnice S diferenčními rovnicemi si Malpe poradí s pomocí příkazu rsolve. Taky takhle se například dá napsat n-faktoriál: > rsolve({y(n) = n*y(n-1), y(0)=1}, y); Γ ( n + 1 ) Gama fce. ve výsledku si všímat nemusíte stačí vědět, že Γ ( n + 1 ) = n!. Více o gama-funkci najdete v listu Teorie míry a integrálu. Bohužel Maple si nedokáže poradit s okrajovými podmínkami, které jsou zadané také v rekurentní formě. S následujícími rovnicemi si tak Maple neporadí: > rsolve({y(0)=1/2*(1+1/2*y(0)+1/2*y(1)),y(j)=1+1/4*y(j-1)+1/2* y(j)+1/4*y(j+1),y(n)=1+1/2*y(n-1)+1/2*y(n)},{y}); Error, (in rsolve/single/process) more than one recurrence relation for single function Pokud ale rovnice trochu upravíme sečtením a získáme lepší vyjádření pro okrajové podmínky a pro rekurentní vyjádření, můžeme už diferenční rovnici v Maplu vyřešit: > simplify(rsolve({y(0)=2*n,y(1)=6*n-2,y(j)-2*y(j-1)+y(j-2)=-4},{y})); { y( j ) = 2 n + 4 n j 2 j 2 } Numerické řešení diferenciálních rovnic Maple obsahuje poměrně velkou knihovnu všemožných metod na numerické řešení všech možných diferenciálních rovnice. Základní používání těchto metod nastíníme na následující diferenciální rovnici: y'(x) =( 1 + y( x) 2 ) cos( x) s okrajovou podmínkou y( 0 ) = Takhle Maple vypočítá řešení přesné: 3 3, na intervalu řešení [0,6] > presne_reseni := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x),y(0)=sqrt(3)/3},y(x)); presne_reseni := y( x ) = tan sin( x ) + Teď se pokusíme dospět k něčemu podobnému numericky. Není na tom nic těžkého. Dokonce se i používá stejný příkaz - dsolve, jedině přidáme další parametry, které určí, π 6

že budeme počítat numericky a jakou metodou to bude. Takhle v Maplu vypadá nejzákladnější metoda na řešení diferenciálních rovnic - Eulerova : > eulerova := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x), y(0)=sqrt(3)/3}, y(x), type=numeric, method=classical[foreuler]); eulerova := proc( x_classical)... end proc Výsledek na pohled nic moc. Ale to zatím přejdeme, nakonec všechno srovnáme v grafu (nedočkavci ať se podívají hned ;-)). Teď si v Maplu ukážeme další metody: Modifikovaná Eulerova: > meulerova := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x), y(0)=sqrt(3)/3}, y(x), type=numeric, method=classical[impoly]); Runge-Kutta 2.stupně : meulerova := proc( x_classical)... end proc > runge_kutt2 := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x), y(0)=sqrt(3)/3}, y(x), type=numeric, method=classical[rk2]); runge_kutt2 := proc( x_classical)... end proc Z Runge-Kuttových metod umí Maple i metody třetího a čtvrtého stupně tj. rk3 a rk4. Maple ovládá i jen o málo složitější metody prediktor a prediktor korektor. Metoda prediktor: > prediktor := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x), y(0)=sqrt(3)/3}, y(x), type=numeric, method=classical[adambash]); A konečně metoda prediktor-korektor: prediktor := proc( x_classical)... end proc > pkorektor := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x), y(0)=sqrt(3)/3}, y(x), type=numeric, method=classical[abmoulton]); pkorektor := proc( x_classical)... end proc Maple samozřejmě umí i další metody. Jak klasické tak i jiné jako např. rkdf 45 - Fehlbergova Runge-Kutta 4.-5. stupně, která se automaticky používá pokud zadáme pouze type=numeric a nezadáme method. Takovými metodami se tady ale nebudeme zabývat.

Teď se podíváme, jak vypočítané výsledky zobrazíme do grafu. Používá se na to zvláštní funkce odeplot z balíčku plots.. Zobrazíme všechny výsledky do jednoho grafu: > plot1:=plots[odeplot](eulerova,[x,y(x)], 0..6, color=green): > plot2:=plots[odeplot](meulerova,[x,y(x)], 0..6, color=brown): > plot3:=plots[odeplot](runge_kutt2,[x,y(x)], 0..6, color=blue): > plot4:=plots[odeplot](prediktor,[x,y(x)], 0..6, color=blue): > plot5:=plots[odeplot](pkorektor,[x,y(x)], 0..6, color=blue): > plot6:=plot(tan(sin(x)+1/6*pi),x=0..6): > plots[display]({plot1,plot2,plot3,plot4,plot5,plot6}); Jak je vidět, v daném případě všechny metody obstáli poměrně dobře až na nejjednodušší Eulerovu metodu (zeleně). Graf přesné funkce je samozřejmě červeně. Ani pokud bychom chtěli pouze funkční hodnoty není žádný problém. Takhle vypadá funkční hodnota řešení získaného Eulerovou metodou v bodě 1.6: > eulerova(1.6); [ x = 1.6, y( x) = 18.9188271034394546 ] Nakonec si ukážeme, co dělat pokud se nám dosažená numerická přesnost nelíbí. Nejjednoduší řešení takového problému je změnit velikost kroků. Dělá se to parametrem stepsize: > euler2 := dsolve({diff(y(x),x)=(1+y(x)^2)*cos(x), y(0)=sqrt(3)/3}, y(x), type=numeric,

method=classical[foreuler], stepsize=0.0001); A teď si to nakreslíme: euler2 := proc( x_classical)... end proc > plot7 := plots[odeplot](euler2,[x,y(x)], 0..6, color=blue): > plots[display]({plot7,plot6}); Warning, could not obtain numerical solution at all points, plot may be incomplete > > Při dostatečném počtu kroků je poměrně přesná i tato jinak poměrně neefektivní metoda (modře). Samozřejmě můžeme při numerickém řešení diferenciální rovnice měnit v Maplu mnohem více parametrů, více viz. help nadsolve[numeric] a dsolve[classical]. Použitá literatura Jitka Segethová : Základy numerické matematiky Jindřich Bečvář : Vektorové prostory I,II,III. Jiří Anděl : Matematika náhody