%========================================================================= % APROXIMACE FUNKCE NA OKOLI BODU %========================================================================= %------------------------------------------------------------------------- % function taylor_polynom(f, x0, polomer, max_stupen,zobraz_vse); % % Sestroji Tayloruv polynom stupne n (n=0,1,...,max_stupen) % pro symbolicky zadanou funkci f v bode x0 % na okoli % (pro zobraz_vse=1 zobrazi vsechny polynomy) %------------------------------------------------------------------------- taylor_polynom('sin(x)', 0, pi, 4, 1); taylor_polynom('sin(x)', 0, pi, 4, 0); taylor_polynom('sin(x)', 0.1, pi, 8, 1); taylor_polynom('sin(x)', 0.1, pi, 8, 0); taylor_polynom('1/x', 1, 0.95, 16, 1) taylor_polynom('1/x', 1, 0.95, 16, 0) %========================================================================= % APROXIMACE FUNKCE INTERPOLACNIM POLYNOMEM %========================================================================= %------------------------------------------------------------------------- % function lagrangeuv_polynom(zobraz_vse,x,f); % % Sestroji Lagrangeuv interpolacni polynom % pro funkci zadanou tabulkou [x;f(x)] % % pro zobraz_vse=1 zobrazi vsechny dilci polynomy % nejsou-li zadane vektory x,f => zadaji se mysi %------------------------------------------------------------------------- x=[0 1 3]; f=[1 2 0]; lagrangeuv_polynom(1,x,f); x=[0 2 4 7 9]; f=[2 5 3 4 5]; lagrangeuv_polynom(1,x,f); lagrangeuv_polynom(1); lagrangeuv_polynom; %------------------------------------------------------------------------- % function newtonuv_polynom(zobraz_vse,x,f); % % Sestroji Newtonuv interpolacni polynom %------------------------------------------------------------------------- x=[0 1 -1 3]; f=[1 2 2 0]; newtonuv_polynom(1,x,f); x=[0 1 3 6 8 10]; f=[1 4 5 4 3 4]; newtonuv_polynom(1,x,f); newtonuv_polynom(1); newtonuv_polynom; %------------------------------------------------------------------------- % function nevilluv_algoritmus(zobraz_vse,x,f,alfa); % % Vypocte hodnotu Newtonova interpolacniho polynomu v bode alfa % pro funkci zadanou tabulkou [x;f(x)] % % nejsou-li zadane vektory x,f => zadaji se mysi % neni-li zadano alfa => zada se rucne % pro zobraz_vse=1 zobrazi vsechny dilci ukony %------------------------------------------------------------------------- x=[0 1 2 3 4]; f=[1 0.36788 0.13534 0.04979 0.01832]; alfa=1.8; nevilluv_algoritmus(0,x,f,alfa); nevilluv_algoritmus(1,x,f,alfa); x =[0 1 5 6 8 9]; f=[1 4 5 4 2 2]; alfa=2; nevilluv_algoritmus(0,x,f,alfa); nevilluv_algoritmus(1,x,f,alfa); nevilluv_algoritmus %------------------------------------------------------------------------- % NEVYHODY INTERPOLACNICH POLYNOMU %------------------------------------------------------------------------- % Pri extrapolaci x=-3:3; f=sign(x).*0.001.*x; alfa=5; %newtonuv_polynom(0,x,f); nevilluv_algoritmus(1,x,f,alfa); x=[ 0 2 4 7 9]; f=[ 2 1 1 2 2]; alfa=13; nevilluv_algoritmus(1,x,f,alfa); % Pro hodne zadanych bodu x=1:8; f=10*rand(size(x)); alfa=7.5; nevilluv_algoritmus(1,x,f,alfa); x=1:10; f=0.05*rand(size(x)); alfa=0; nevilluv_algoritmus(1,x,f,alfa); % Pro aproximaci racionalni lomenne funkce x=[0.01 0.027 0.125 0.343]; f=[100 37 8 3]; alfa=0.25; nevilluv_algoritmus(1,x,f,alfa); pomx=0.1:0.2:1.1; x=pomx.^2; f=1./x; alfa=x(1); nevilluv_algoritmus(1,x,f,alfa); % Citlivost na vstupni data pri ekvidistantnich datech % (spatne podminena uloha) x=1:10; f=zeros(size(x)); f(5)=0.0001; lagrangeuv_polynom(0,x,f,0); x=uzly_cebysev(1,10,10); f=zeros(size(x)); f(5)=0.0001; lagrangeuv_polynom(0,x,f,0); uzly_cebysev(0,1,10,1); uzly_cebysev(0,1,15,1); %------------------------------------------------------------------------- % APROXIMACE FUNKCE POMOCI SPLINE %------------------------------------------------------------------------- x=1:7; f=[3 8 1 7 2 4 3]; Da=0;Db=0; kubicky_spline(x,f,Da,Db); x=[0.01 0.05 0.25 1/3 1 ]; f=[100 20 4 3 1 ]; Da=0;Db=-1; kubicky_spline(x,f,Da,Db); x=[0 1 2 3 4 5 6 7 8 9 10]; f=[3 5 0 2 -4 0 2 2 -2 2 3]; Da=1;Db=1; kubicky_spline(x,f,Da,Db); kubicky_spline; %========================================================================= % APROXIMACE FUNKCE VE SMYSLU NEJMENSICH CTVERCU %========================================================================= %------------------------------------------------------------------------- % function l2_aproximace(x,f,stupen); % % Sestroji diskretni L2-aproximaci % pro funkci zadanou tabulkou [x;f(x)] % pouzitim polynomu stupne stupen % % nejsou-li zadane vektory x,f => zadaji se mysi %------------------------------------------------------------------------- x=[0.5 0.8 0.9 1.1 1.2 ]; f=[2.25 0.72 0.33 -0.27 -0.48]; stupen=1; l2_aproximace(x,f,stupen); x=1:5; f=[3 4 6 7 8]; l2_aproximace(x,f,1); l2_aproximace(x,f,2); l2_aproximace(x,f,3); l2_aproximace(x,f,4); l2_aproximace(x,f); l2_aproximace; %------------------------------------------------------------------------- % function l2_aproximace_spojita(zobraz_vse,f,a,b,stupen); % % Sestroji spojitou L2-aproximaci pro funkci f=f(x) % na intervalu pouzitim polynomu stupne stupen % % pri volbe zobraz_vse=1 zobrazi % aproximace polynomy stupne 0 az do optimalniho stupne %------------------------------------------------------------------------- l2_aproximace_spojita(0,'sqrt(x)',0,1,1); l2_aproximace_spojita(0,'sqrt(x)',0,1,2); l2_aproximace_spojita(1,'sqrt(x)',0,1,4); l2_aproximace_spojita(1,'sqrt(x)',0,1); l2_aproximace_spojita(1,'tan(x)',-1.5,1.5,4); l2_aproximace_spojita(0,'tan(x)',-1.5,1.5); l2_aproximace_spojita(1,'exp(x)',-10,1,4); l2_aproximace_spojita(0,'exp(x)',-10,1); %========================================================================= % FOURIEROVA ANALYZA PRO PERIODICKE FUNKCE %========================================================================= %------------------------------------------------------------------------- % function fourierova_analyza(zobraz_vse,x,f,stupen); % % provede diskretni Fourierovu analyzu % pro periodickou funkci zadanou tabulkou % % stupen ... pocet bazovych funkci % ( pokud neni zadan stupen vezme % maximalni mozny pocet bazovych funkci % odpovidajici poctu zadanych bodu ) % uvazujeme ekvidistantni uzly x, % pricemz posledni bod nezadavame % (funkcni hodnota je stejna jako u prvniho bodu % a x-ovou souradnici lehko urcime, nebot % uvazujeme ekvidistantni rozlozeni uzlu) %------------------------------------------------------------------------- x=[0 pi/2 pi 3*pi/2]; f=[12 -4 0 4 ]; fourierova_analyza(1,x,f); x=0:pi/6:2*pi-pi/6; f=cos(x)-sin(x/3); fourierova_analyza(1,x,f); fourierova_analyza(1,x,f,3); fourierova_analyza(0,x,f,3); fourierova_analyza(0,x,f); x=0:pi/5:2*pi-pi/5; f=1./sin(1+sin(x)); fourierova_analyza(1,x,f); N=4; x=1:2*N-1; f=sign(N-x); fourierova_analyza(1,x,f); N=8; x=1:2*N-1; f=sign(N-x); fourierova_analyza(1,x,f); N=16; x=1:2*N-1; f=sign(N-x); fourierova_analyza(1,x,f);