Metody umerycze Laboratorium 5 Ifo Aproksymacja - proces określaia rozwiązań przybliżoych a podstawie rozwiązań zaych, które są bliskie rozwiązaiom dokładym w ściśle sprecyzowaym sesie. Metoda ajmiejszych kwadratów Opis metody zacziemy od prostego przykładu zastosowaia fukcji liiowej jako fukcji aproksymującej. Załóżmy, że podae pukty P 1 (x 1, y 1 ), P 2 (x 2, y 2 ),, P (x, y ) układają się w zależość liiową wówczas ie ma sesu stosować wielomiau wyższego stopia poieważ wystarczy zastosować rówaie prostej y=ax+b gdzie a i b to współczyiki, których wartości ależy ustalić. Poszukiwaie parametrów takiej prostej, która przechodziłaby możliwie ajbliżej wszystkich puktów doświadczalych (P i ), polega a miimalizacji sumy: S(a, b) = [y i y(x i )] 2 = [y i (ax i + b)] 2 gdzie y(x i ) to wartości współrzędej y obliczoej z rówaia prostej dla daych x i a to liczba puktów. Po uwzględiei zapisu ogólego fukcji y(x) = a 0 + a 1 x, zdefiiowaiu pochodych cząstkowych (fukcja wielu zmieych ma miimum w pukcie, dla którego pochode cząstkowe tej fukcji po wszystkich zmieych są rówe zeru) i dokoaiu stosowych przekształceń wzory a współczyiki fukcji liiowej przedstawiają się astępująco: a 1 = x iy i x i y i x2 i ( x i ) 2 a 0 = y i 2 x i xi x i y i x2 i ( x i ) 2 Aalogiczych przekształceń dokouje się dla układów wyższych stopi. Na przykład dla wielomiau aproksymacyjego drugiego stopia y(x) = a 0 + a 1 x + a 2 x 2 układ rówań przedstawia się astępująco: a 0 + a 1 x i + a 2 x i 2 = y i a 0 x i + a 1 x 2 i + a 2 x 3 i = x i y i 2 a 0 x i + a 1 x 3 i + a 2 x 4 i = x 2 i y i A dla wielomiau aproksymacyjego trzeciego stopia y(x) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 układ rówań ma postać: a 0 + a 1 x i + a 2 x 2 3 i + a 3 x i = y i 3 a 0 x i + a 1 x 4 i + a 2 x 5 6 i + a 3 x i = x 3 i y i Układy rówań ormalych odpowiadające wielomiaom aproksymacyjym wyższych stopi rozbudowuje się w sposób aalogiczy.
Układy rówań ormalych są układami rówań liiowych, w których iewiadomymi są a 0, a 1,, a a sumy różych potęg x i k (X) oraz iloczyów x i k y i (A) odpowiedio staowią wyrazy wole oraz wartości współczyików przy iewiadomych. Ozacza to, że uzyskay układ rówań moża zapisać w postaci macierzowej jako: X A = Y gdzie (dla wielomiau drugiego stopia): 2 x i x i a 0 y i 2 3 X = [ x i x i x i ] A = [ a 1 ] Y = [ x i y i ] 2 3 4 x i x i x a 2 2 i x i y i Rozwiązaie układu to: A = X 1 Y Przykład Zastosować wielomia aproksymacyjy: a) drugiego stopia, b) trzeciego stopia, dla zadaych puktów: P 1 ( 4, 1), P 2 ( 2, 4), P 3 (0,0), P 4 (2, 4), P 5 (4, 1), P 6 (5,1), P 7 (6, 2). Rys 1 Rys. 2
plik Lab5_P.m %UWAGA Przykład iekomplety -> brak algorytmów ustalających wartości macierzy X, Y i yi %liczba puktów %współrzęde puktów x=[-4, -2,0,2,4, 5, 6]; y=[-1, 4,0,-4,-1, 1,-2]; if legth(x)==legth(y) %ustalamy stopień wielomiau aproksymacyjego stopie=3; =legth(x); X=zeros(stopie+1,stopie+1); A=zeros(stopie+1,1); Y=zeros(stopie+1,1); %obliczaie macierzy X for :stopie+1 for j=1:stopie+1 %algorytm ustalający wartości w macierzy X %X(i,j)=...; ed ed disp("macierz X"); disp(x); %obliczaie macierzy Y for :stopie+1 for k=1: %algorytm ustalający wartości w macierzy (wektorze) Y %Y(i,1)=... ed ed disp("macierz Y"); disp(y); A=iv(X)*Y; disp("macierz A - współczyików"); disp(a); %obliczaie wartości fukcji a podstawie obliczoych wartości współczyików wielomiau yi=zeros(1,); for : for j=1:stopie+1 %algorytm ustalający wartości w macierzy (wektorze) yi %yi(1,i)=... ed ed disp("macierz yi") disp(yi); plot(x,y, 'bx--'); grid o; hold o; plot(x,yi, 'ro--'); tytul_rys=spritf('niebieskie - pukty rzeczywiste, czerwoe - pukty obliczoe a podstawie uzyskaego wielomiau %d stopia',stopie); title(tytul_rys); else disp("liczba współrzędych x ie jest rówa liczbie współrzędych y"); ed
Przykład iterpolacji w Octave: plik Lab5_2.m x=[0, 1, 2, 3, 4, 5, 6]; %współrzęde puktów zadaych y=[-1, 2, 3, 3.5, 5, 7, 9]; xi=x; yi=iterp1(x,y, xi,'liear'); %współrzęde puktów obliczoych dla argumetów xi (xi=x) %ie metody: splie, cubic, pchip, earest subplot(2,2,1); title("wykres puktowy"); grid o; hold o; plot(x,y,'o'); plot(x,yi,'rx'); subplot(2,2,2); title("wykres liiowy"); grid o; hold o; plot(x,y); plot(x,yi); %iterpolacja fukcji sius i cosius t=0:5; ys=si(t); ti=0:0.1:5; ysi=iterp1(t,ys,ti); yc=cos(t); yci=iterp1(t,yc,ti); subplot(2,2,3); title("iterpolacja fukcji sius i cosius "); grid o; hold o; plot(ti, ysi); plot(ti, yci, 'r'); Rys. 3
%współrzęde puktów zadaych x=[0,1,2,3,4,5,6]; y=[-1,2,4,3.5,2,7,9]; stopie=4; %macierz (wektor) współczyików wielomiau A=polyfit(x, y, stopie); yi=zeros(1,7); Przykład aproksymacji w Octave: plik Lab5_3.m %obliczaie wartości fukcji a podstawie ustaloego wielomiau for :7 yi(1,i)=0; for j=1:stopie+1 yi(1,i)=yi(1,i) + A(1,j)*x(1,i)^(stopie+1-j); ed ed plot(x,y,'rx'); grid o; hold o; plot(x, yi); Rys. 4