100 likes | 232 Views
Příklady z Matlabu 2 . Práce s polynomy v Matlabu. Zadávání polynomů Zadávají se jako vektory koeficientů polynomu. Polynom n-tého řádu je vektor o n+1 prvcích: p ( x )=2x 5 -3x 4 +x 2 -4x-2 p=[2, -3, 0, 1, -4, - 2] V yčí slen í pol y nomu (funkce polyval) pro x=2 :
E N D
Příklady z Matlabu 2 Práce s polynomy v Matlabu
Zadávání polynomů Zadávají se jako vektory koeficientů polynomu. Polynom n-tého řádu je vektor o n+1 prvcích: p(x)=2x5-3x4+x2-4x-2 p=[2, -3, 0, 1, -4, -2] Vyčíslení polynomu (funkce polyval) pro x=2 : p(2)=2.25-3.24+22-4.2-2=10 polyval(p,2) ans=10 Derivace polynomu (funkce polyder): polyder(p) ans= [10 -12 0 2 -4] Tedy d p(x)/dt = 10x 4 -12x 3 +2x-4
Kořeny polynomu(funkce roots): roots(p) ans= 1.7900 0.5000 + 1.0790i 0.5000 - 1.0790i -0.7900 -0.5000 Vytvoření polynomu k zadaným kořenům (funkce poly): A=[1,3,2] r=roots(A) r= -2 -1 poly(r) ans= 1 3 2
Vynásobení a vydělení polynomů: a=[1, 2, 3]; b= [2, -2, 1]; conv(a,b) %násobení polynomu ans= 2 2 3 -4 3 deconv(a, b) %dělení polynomů ans=0.5 Proložení naměřených dat polynomy (funkce polyfit) x=[ -4:0.5:4 ]; y=[ 0 : 0.5 : 3.5,4, 3.5:-0.5:0]; p1=polyfit(x, y, 1) %prolozeni dat polynomem 1.radu p1= -0.0000 1.8824 p2=polyfit(x, y, 2) %prolozeni dat polynomem 2.radu p2= -0.2229 0.0000 3.2198 p5=polyfit(x, y, 5) %prolozeni dat polynomem 5.radu p5= 0.0000 0.0114 -0.000 -0.3972 0.0000 3.5285
Vykreslení do grafu: x=[ -4:0.5:4 ]; y=[ 0 : 0.5 : 3.5,4, 3.5:-0.5:0]; p1=polyfit(x, y, 1);%prolozeni dat polynomem 1.radu p2=polyfit(x, y, 2);%prolozeni dat polynomem 2.radu p5=polyfit(x, y, 5);%prolozeni dat polynomem 5.radu hold on plot(x, y, 'r'); % původní data - červeně plot(x, polyval(p1, x), 'b' );% polynom 1.stupně- modře plot(x, polyval(p2, x), 'g' );% polynom 2.stupně- zeleně plot(x, polyval(p5, x), 'k' );% polynom 5.stupně- černě hold off; grid on legend('lomena cara' , 'linearni prol. ', 'kvadraticke prol. ', 'polynom 5.radu') ;
Datová interpolace: x1 = linspace( 0, 2*pi, 60 );% lineární interpolace x2 = linspace( 0, 2*pi, 6 ); plot(x1,sin(x1),x2,sin(x2), '--'); xlabel('x'); ylabel('sin(x)'); title('lineární interpolace');
Splinová interpolace (s využitím funkce interp1): Tyto 2 vektory representují sčítání liduod roku 1900 do roku 1990 a tomu korespondující množství populace v USA v milionech obyvatel. t = 1900:10:1990; p = [75.995 91.972 105.711 123.203 131.669... 150.697 179.323 203.212 226.505 249.633]; Výrazinterp1(t,p,1975)interpoluje tuto hodnotu v roce 1975. Výsledek je ans = 214.8585 Nyní interpolujeme hodnotu od roku 1900 do roku 2000 a vyneseme výsledek do grafu: x = 1900:1:2000; y = interp1(t,p,x,'spline'); plot(t,p,'o',x,y) grid on
Př.: Máme naměřené hodnoty bodů o souřadnicích x=[ 0:9 ];y=[ 0,2,3,4,6,9,11,11,10,8]; Proložte je polynomem 1 až 8 řádu a vykreslete je do grafu. clc; clear x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; y = [0, 2, 3, 4, 6, 9, 11, 11, 10, 8]; plot(x, y, 'or', 'MarkerSize', 10, 'MarkerFaceColor', 'r'); % nakresleni bodů grid on; xlabel('x'); ylabel('y'); title('Prolozeni namerenych hodnot'); hold on; % umožnění připisování grafu xp=linspace(0,9,100); p=polyfit(x,y,1); y1=polyval(p,xp); plot(xp,y1,'k'); p=polyfit(x,y,2); y2=polyval(p,xp); plot(xp,y2,'r'); p=polyfit(x,y,3); y3=polyval(p,xp); plot(xp,y3,'g'); p=polyfit(x,y,4); y4=polyval(p,xp); plot(xp,y4,'b'); p=polyfit(x,y,5); y5=polyval(p,xp); plot(xp,y5,'c'); p=polyfit(x,y,6); y6=polyval(p,xp); plot(xp,y6,'m'); p=polyfit(x,y,7); y7=polyval(p,xp); plot(xp,y7,'y'); p=polyfit(x,y,8); y8=polyval(p,xp); plot(xp,y8,'k'); hold off; legend('namerene hodnoty', '1. stupen', '2. stupen', '3. stupen', '4. stupen', '5. stupen', '6. stupen', '7. stupen','8.stupen');