MATLAB® ( část 2b – mnohočleny)
Základní definice mnohočlenu (polynomu): Mnohočleny Základní definice mnohočlenu (polynomu): Stačí napsat řádkový vektor popisující koeficienty polynomu: Polynom y = x2 + 20x + 100 je v Matalbu definován vektorem koeficientů sestupně s mocninou nezávisle proměnné: Poly=[1 20 100]
Pokud je polynom definován lze na něj aplikovat některou z funkcí: výpočet kořenů: roots(Poly) koreny=roots(Poly) koreny=roots([1 20 100] ) zpětně koeficienty: Poly1=poly(koreny) (pokud bude mít nejvyšší koeficient > 1, pak je třeba výsledek násobit tímto koeficientem) výpočet pro konkrétní hodnotu nezávislé proměnné (např. x=2): polyval(Poly,2) Např.: P=[2 10 -5];Q=[1 8 5] násobení 2 polynomů P Q:Nasob=conv(P,Q) dělení 2 polynomů P Q: Deleni=deconv(P,Q) derivace polynomu: Der=polyder(Poly)
nalezení koeficientů mnohočlenu stupně n, který aproximuje průběh metodou nejmenších čtverců , danný vektory x a y na osách nezávisle a závisle proměnných : p=polyfit(x,y,n) aj. Příklad: >> Poly=[1 20 100]; >> polyval(Poly,2) ans=144
Příklady: p(x)=4x5 + 3.1x3 – 7x2 + 11 q(x)=-x4 + x3 – x p=[4 0 3.1 –7 0 11]; q=[-1 1 0 –1 0 ] vyčíslení polynomu p pro všechny hodnoty vektoru x: x=[-0.1 1 0.1 0.2] y=polyval(p,x) >>y = 10.9269 11.0000 10.9331 10.7461 násobení polynomů p a q: r=conv(p,q) >>r = -4.0 4.0 -3.1 6.1 –7. –14.1 18.0 0 –11 0 kořeny polynomu: r=roots(p)
>> r = -0.5124+1.4413i -0.5124-1.4413i 0.9727+0.5747i 0.9727-0.5747i -0.9207 Srovnání polynomiální a splinové interpolace:
x=[1:9] % zadání x-ových souřadnic bodů (vektoru) x % Proložení dat - bodů se souřadnicemi x,y (interpolace) x=[1:9] % zadání x-ových souřadnic bodů (vektoru) x y=[1:5,4:-1:1] % zadání y-ovýchsouřadnic bodů (vektoru) y xx=[1:0.05:9]; % body, ve kterých bude počítána aproximace y1=polyval(polyfit(x,y,1),xx); % body získané polyn.interpolací % (polynom 1. stupně) y2=polyval(polyfit(x,y,2),xx); % body získané polyn.interpolací % (polynom 2. stupně) y5=polyval(polyfit(x,y,5),xx); % body získané polyn.interpolací % (polynom 5. stupně) y9=polyval(polyfit(x,y,9),xx); % body získané polyn.interpolací % (polynom 9. stupně) % proložení polynomem 9. stupně je pro tento případ nevhodné yi=interp1(x,y,xx,'spline'); % body získané splinovou interpolací % vykreslení dvourozměrného grafu plot(x,y,'p',xx,y1,xx,y2,xx,y5,xx,y9,xx,yi) % legenda ke grafu legend('body','polynom 1.st (primka)','polynom 2.st (parabola)','polynom 5.st','polynom 9.st (nevhodne)','spline')