27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 1 Interpolacja i aproksymacja, pojęcie modelu regresji
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 2 Plan zajęć 1. Interpolacja wielomianowa. 2. Interpolacja liniowa funkcji jednej zmiennej. 3. Interpolacja funkcjami sklejanymi - przykład funkcji dwóch zmiennych. 4. Interpolacja funkcjami sklejanymi - funkcja jednej zmiennej. 5. Zadanie regresji liniowej
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 3 Zadanie 1 W nowym skrypcie (nadając mu nazwę ~/interpolacja.sce) zapisać polecenia przy pomocy których można wyznaczyć wielomian interpolacyjny postaci W(x)=a 0 +a 1 x 1 +a 2 x 2 +..+a n x n dla podanych punktów o współrzędnych zapisanych jako wektory: X = [-5,-4, -3, -2, -1, 0, 1, 2, 3, 4, 5], f(x)=[-82.5,-39.8,-13.9,-0.6,4.3,5,5.7,10.6,23.9,49.8,92.5] rozwiązując układ równań (niewiadomą jest wektor a =[a 0,a 1,a 2,...,a n ]): Macierz współczynników tego układu ma postać: Narysuj wykres funkcji interpolującej A = 1 1... 1 x x x 1 0 1 1... 1 n............ x x x n 0 n 1... n n
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 4 Zadanie 1 - cd // sformowanie wektorów x, y x=[-5:5] y=[-82.5-39.8-13.9-0.6 4.3 5 5.7 10.6 23.9 49.8 92.5]' m=length(x)
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 5 Zadanie 1 - cd // sformowanie wektorów x, y x=[-5:5] y=[-82.5-39.8-13.9-0.6 4.3 5 5.7 10.6 23.9 49.8 92.5]' m=length(x) // sformowanie macierzy A A = ones(m,m) for i = 1:m for j=2:m A(i,j) = x(i)^(j-1) end end
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 6 // sformowanie wektorów x, y x=[-5:5] 0.5710342 y=[-82.5-39.8-13.9-0.6 4.3 5 5.7 10.6 23.9 49.8 92.5]' 0.7 m=length(x) // sformowanie macierzy A A = ones(m,m) for i = 1:m for j=2:m A(i,j) = x(i)^(j-1) end end Zadanie 1 - cd a1 = // rozwiązanie układu równań A*a=y a1 = linsolve(a,-y); a2 = inv(a)*y // wykres plot2d(x,y) 4.3863982 0.2395459 1.5191751-0.6258516 0.0201306 0.0880366-0.0011664-0.0048473 0.0000221 0.0000893 a2 = 5. - 1.665D-16-5.135D-15-7.772D-16-1.443D-15-8.517D-16-2.862D-17 4.272D-17-2.982D-19 1.863D-19
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 7 Przykład 2 interpolacja funkcji jednej zmiennej - funkcje interpln(), smooth() dane są punkty: -6,-1,2,6,11 oraz wartości pewnej funkcji w tych punktach, odpowiednio: 1,0,2,2,3. Należy: zdefiniować macierz W 2x5 zapisując w pierwszym wierszu współrzędne punktów, w drugim wartości funkcji w tych punktach; obliczyć interpolowane wartości funkcji (oznaczając jako wektor Y) przy użyciu funkcji interpln() dla wektora argumentów X=[-5,10] podzielonego na 20 części; narysować wykres krzywej łączącej punkty (X,Y)
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 8 Przykład 2 interpolacja funkcji jednej zmiennej - funkcje interpln(), smooth() dane są punkty: -6,-1,2,6,11 oraz wartości pewnej funkcji w tych punktach, odpowiednio: 1,0,2,2,3. Należy: zdefiniować macierz W 2x5 zapisując w pierwszym wierszu współrzędne punktów, w drugim wartości funkcji w tych punktach; obliczyć interpolowane wartości funkcji (oznaczając jako wektor Y) przy użyciu funkcji interpln() dla wektora argumentów X=[-5,10] podzielonego na 20 części; narysować wykres krzywej łączącej punkty (X,Y) W=[ -6, -1, 2, 6, 11; 1, 0, 2, 2, 3] X= linspace(-5,10,20) Y= interpln(w,x) plot2d(x,y,[2])
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 9 Przykład 2 interpolacja funkcji jednej zmiennej - funkcje interpln(), smooth() dane są punkty: -6,-1,2,6,11 oraz wartości pewnej funkcji w tych punktach, odpowiednio: 1,0,2,2,3. Należy: zdefiniować macierz W 2x5 zapisując w pierwszym wierszu współrzędne punktów, w drugim wartości funkcji w tych punktach; obliczyć interpolowane wartości funkcji (oznaczając jako wektor Y) przy użyciu funkcji interpln() dla wektora argumentów X=[-5,10] podzielonego na 20 części; narysować wykres krzywej łączącej punkty (X,Y) W=[ -6, -1, 2, 6, 11; 1, 0, 2, 2, 3] X= linspace(-5,10,20) Y= interpln(w,x) plot2d(x,y,[2])
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 10 Przykład 2 - cd interpolacja funkcji jednej zmiennej - funkcje interpln(), smooth() wykorzystując funkcję smooth() wyznaczyć współrzędne punktów krzywej sklejanej, interpolującej punkty węzłowe o współrzędnych zapisanych w macierzy W, narysować wykres krzywej sklejanej (spline).
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 11 Przykład 2 - cd interpolacja funkcji jednej zmiennej - funkcje interpln(), smooth() wykorzystując funkcję smooth() wyznaczyć współrzędne punktów krzywej sklejanej, interpolującej punkty węzłowe o współrzędnych zapisanych w macierzy W, narysować wykres krzywej sklejanej (spline). Xs= smooth(w) plot2d(xs(1,:)',xs(2,:)',[3]) 3.2 2.8 2.4 2.0 1.6 1.2 0.8 0.4 0.0-0.4-6 -4-2 0 2 4 6 8 10 12
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 12 Przykład 3 interpolacja funkcji dwóch zmiennych funkcje splin2d(), interp2d(), linear_interpn() zdefiniować zmienne x=[0,2,3,5],y=[0,2,3,5], oraz macierz z zwierającą wartości pewnej funkcji f w punktach (x i,y i ) (i=1,...,4) jako z=[10,15,11,12;13,16,11,20;22,23,23,17;17,13,14,12]; wykorzystując funkcję splin2d() obliczyć współczynniki funkcji spline interpolującej funkcję f ; przy użyciu funkcji ndgrid() zbudować siatkę punktów opartej na wektorach [0,5] podzielonych na 20 części.
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 13 Przykład 3 interpolacja funkcji dwóch zmiennych funkcje splin2d(), interp2d(), linear_interpn() zdefiniować zmienne x=[0,2,3,5],y=[0,2,3,5], oraz macierz z zwierającą wartości pewnej funkcji f w punktach (x i,y i ) (i=1,...,4) jako z=[10,15,11,12;13,16,11,20;22,23,23,17;17,13,14,12]; wykorzystując funkcję splin2d() obliczyć współczynniki funkcji spline interpolującej funkcję f ; przy użyciu funkcji ndgrid() zbudować siatkę punktów opartej na wektorach [0,5] podzielonych na 20 części. x =[0,2,3,5]; y = x z =[10,15,11,12;13,16,11,20;22,23,23,17;17,13,14,12] // obliczenie współczynników funkcji spline b = splin2d(x,y,z) // budowa siatki 400 punktów na prostokącie[0,5]x[0,5] xp = linspace(0,5,20) [Xx,Yy] = ndgrid(xp,xp)
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 14 Przykład 3 - cd interpolacja funkcji dwóch zmiennych funkcje splin2d(), interp2d(), linear_interpn() przy użyciu funkcji interp2d() obliczyć wartości interpolującej funkcji spline w punktach siatki, oraz narysować wykres powierzchni interpolującej. korzystając z funkcji linear_interpn() znaleźć wartości interpolującej funkcji liniowej w punktach siatki, oraz narysować wykres powierzchni interpolującej w innym oknie graficznym.
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 15 Przykład 3 - cd interpolacja funkcji dwóch zmiennych funkcje splin2d(), interp2d(), linear_interpn() przy użyciu funkcji interp2d() obliczyć wartości interpolującej funkcji spline w punktach siatki, oraz narysować wykres powierzchni interpolującej. korzystając z funkcji linear_interpn() znaleźć wartości interpolującej funkcji liniowej w punktach siatki, oraz narysować wykres powierzchni interpolującej w innym oknie graficznym. Zz = interp2d(xx,yy,x,y,b) plot3d(xp,xp,zz) // otwarcie nowego okna graficznego scf() Zs = linear_interpn(xx,yy,x,y,z) plot3d(xp,xp,zs)
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 16 Przykład 3 - cd interpolacja funkcji dwóch zmiennych funkcje splin2d(), interp2d(), linear_interpn() 30 25 20 Z 15 10 5 0 0 1 2 Y 3 4 5 5 4 3 2 X 1 0 24 22 20 18 Z 16 14 12 10 0 1 2 Y 3 4 5 5 4 3 2 X 1 0
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 17 Ćwiczenie 4 Zapisać w nowym skrypcie polecenia które dla podanych danych pomiarowych:(-1,2),(2,1),(-3,3),(6,2),(4,3),(5,2) przy użyciu funkcji splin(), interp() zbudują i przedstawią na wykresie interpolującą je funkcje sklejaną. Wykres należy narysować w oparciu o wektor [-3,6] podzielony na 50 części. Na wykresie zaznaczyć punkty węzłowe.
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 18 Ćwiczenie 4 Zapisać w nowym skrypcie polecenia które dla podanych danych pomiarowych:(-1,2),(2,1),(-3,3),(6,2),(4,3),(5,2) przy użyciu funkcji splin(), interp() zbudują i przedstawią na wykresie interpolującą je funkcje sklejaną. Wykres należy narysować w oparciu o wektor [-3,6] podzielony na 50 części. Na wykresie zaznaczyć punkty węzłowe. 3.5 x=[-3,-1,2,4,5,6], y=[3,2,1,3,2,2] xp = linspace(-3,6,50) d = splin(x,y); yp = interp(xp, x, y, d); plot2d(xp,yp) plot2d(x,y, style =-2) 3.0 2.5 2.0 1.5 1.0 0.5-3 -2-1 0 1 2 3 4 5 6
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 19 Przykład 5 regresja liniowa Na podstawie danych pomiarowych zapisanych w pliku o nazwie /pub/programy/regdane.txt oraz wbudowanej funkcji reglin() znaleźć równanie prostej regresji o równaniu y=a*x+b, po czym przedstawić jej wykres wraz z punktami pomiarowymi.
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 20 Przykład 5 regresja liniowa Na podstawie danych pomiarowych zapisanych w pliku o nazwie /pub/programy/regdane.txt oraz wbudowanej funkcji reglin() znaleźć równanie prostej regresji o równaniu y=a*x+b, po czym przedstawić jej wykres wraz z punktami pomiarowymi. // wczytanie danych u = file('open','/pub/programy/regdane.txt','old') A = read(u,-1,2); file('close',u); //obliczenie parametrów krzywej regresji [a,b]= reglin(a(:,1)',a(:,2)') x = A(:,1); y = A(:,2) yn=a*x+b plot2d(x,yn, style = 5); plot2d(x,y, style =-2); disp(a); disp(b)
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 21 Przykład 5 regresja liniowa 21 Na podstawie danych pomiarowych zapisanych 20 w pliku o nazwie 19 /pub/programy/regdane.txt oraz wbudowanej funkcji reglin() znaleźć 18 równanie prostej regresji o równaniu y=a*x+b, po czym przedstawić jej 17 16 wykres wraz z punktami pomiarowymi. // wczytanie danych u = file('open','/pub/programy/regdane.txt','old') A = read(u,-1,2); file('close',u); 13 0.26 0.28 0.30 0.32 0.34 0.36 0.38 //obliczenie parametrów krzywej regresji [a,b]= reglin(a(:,1)',a(:,2)') x = A(:,1); y = A(:,2) yn=a*x+b plot2d(x,yn, style = 5); plot2d(x,y, style =-2); disp(a); disp(b) 22 15 14
27 styczeń 2009 SciLab w obliczeniach numerycznych - część 3 Slajd 22 Wykorzystywane funkcje: Funkcje SciLaba smooth(), interp(), interp2d(), interp3d() interpolacja funkcjami sklejanymi interpln(), linear_interpn() interpolacja liniowa splin(), splin2d(), splin3d() obliczenie współczynników funkcji sklejanej, interpolującej podane punkty węzłowe reglin(), regress() wyznaczenie współczynników regresji liniowej