5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd Ukłdy rówń liiowych Mcierze rzdkie
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd Pl zjęć. Zdie rozwiązi ukłdu rówń liiowych.. Ćwiczeie - rozwiązie ukłdu rówń liiowych postci A = b. 3. Ćwiczeie - opercje We-Wy, porówie metod rozwiązi ukłdu rówń liiowych. oszcowie błędu (wektor reszt) przy pomocy ormy. 4. Przykłd 3, Ćwiczeie 4 - wykorzystie fukcji związych z mcierzmi rzdkimi. 5. Ćwiczeie 5 - rozwiązywie ukłdów rówń poprzez zlezieie rozkłdu trójkątego mcierzy, wykorzystie plików biblioteczych. 6. Ćwiczeie 6 - rozwiązywie ukłdu rówń liiowych z mcierzą rzdką, symetryczą, dodtio określoą. Porówie rozwiązi metodą Guss-Crout i metodą rozkłdu Cholesky'ego.
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 3 Ukłd rówń liiowych Zpis w postci mcierzowej = + + + = + + + = + + + b b b 0 det, ] [ = = A b A b b b
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 4 Ćwiczeie Rozwiązć, ukłd rówń, zpisy w postci mcierzowej A = b przy użyciu fukcji SciLb lisolve(): UWAGA: fukcj lisolve() rozwiązuje rówie mcierzowe postci A*+b=0. = 7 9 0 3 4 3
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 5 Ćwiczeie Rozwiązć, ukłd rówń, zpisy w postci mcierzowej A = b przy użyciu fukcji SciLb lisolve(): UWAGA: fukcj lisolve() rozwiązuje rówie mcierzowe postci A*+b=0. = 7 9 0 3 4 3 A = [,,, -;, -, -, ;,, -, ; 3,,, -] b = [, 0, 9, 7]' =lisolve(a, -b) // = [,, 3, 4]
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 6 Ćwiczeie W owym skrypcie (djąc mu zwę mo-.sce) zpisz polecei wykoujące: wczytie dych z pliku /pub/progrmy/mcierz_.tt do SciLb i podstwieie pod zmiee,a. W pliku mcierz_.tt (sformtowym pliku tekstowym) de zpise są w jedej kolumie: w pierwszym wierszu wymir mcierzy (podstwić pod zmieą ) w kolejych wierszch współczyiki mcierzy kwdrtowej A, czyte wierszmi.
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 7 Ćwiczeie W owym skrypcie (djąc mu zwę mo-.sce) zpisz polecei wykoujące: wczytie dych z pliku /pub/progrmy/mcierz_.tt do SciLb i podstwieie pod zmiee,a. W pliku mcierz_.tt (sformtowym pliku tekstowym) de zpise są w jedej kolumie: w pierwszym wierszu wymir mcierzy (podstwić pod zmieą ) w kolejych wierszch współczyiki mcierzy kwdrtowej A, czyte wierszmi. // wczytie elemetów mcierzy z pliku u = file('ope','/pub/progrmy/mcierz_.tt','old') = red(u,,) A = zeros(, ) for i = : for j = : A(i,j) = red(u,,) ed ed file('close',u)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 8 Ćwiczeie - cd sformowie wektor kolumowego b (= rozmir wektor = wymir mcierzy A) ustljąc: Aij b = m i =,..., i j =,..., 4
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 9 Ćwiczeie - cd sformowie wektor kolumowego b (= rozmir wektor = wymir mcierzy A) ustljąc: Aij b = m i =,..., i j =,..., 4 // sformowie wektor b, wczytie mcierzy A wg schemtu opisego w ćwiczeiu for i=: ed b(i) = m(a(i,:))/4
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 0 Ćwiczeie - cd rozwiązie ukłdu rówń A = b przy użyciu fukcji SciLb lisolve() (rozwiązie zpisć jko ) mcierzy odwrotej do mcierzy A (rozwiązie zpisć jko ) oszcowie (i wyświetleie wrtości ekrie) przy użyciu ormy. dl kżdego z otrzymych rozwiązń p (p=,) błędu (wektor reszt) dl uzyskego rozwiązi (r = A*p - b).
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd Ćwiczeie - cd rozwiązie ukłdu rówń A = b przy użyciu fukcji SciLb lisolve() (rozwiązie zpisć jko ) mcierzy odwrotej do mcierzy A (rozwiązie zpisć jko ) oszcowie (i wyświetleie wrtości ekrie) przy użyciu ormy. dl kżdego z otrzymych rozwiązń p (p=,) błędu (wektor reszt) dl uzyskego rozwiązi (r = A*p - b). // rozwiązie ukłdów rówń, oszcowie błędów = lisolve(a,-b) = iv(a)* b p = orm(a * - b); p = orm(a * - b) disp(p); disp(p)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd Ćwiczeie - cd rozwiązie ukłdu rówń A = b przy użyciu fukcji SciLb lisolve() (rozwiązie zpisć jko ) mcierzy odwrotej do mcierzy A (rozwiązie zpisć jko ) oszcowie (i wyświetleie wrtości ekrie) przy użyciu ormy. dl kżdego z otrzymych rozwiązń p (p=,) błędu (wektor reszt) dl uzyskego rozwiązi (r = A*p - b). // rozwiązie ukłdów rówń, oszcowie błędów = lisolve(a,-b) = iv(a)* b p = orm(a * - b); p = orm(a * - b) disp(p); disp(p) // p = 88.0344 // p =.556D-4
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 3 Ćwiczeie 3 Mcierz rzdk - mcierz w której zczą część elemetów stowią zer profil mcierzy - zpis elemetów iezerowych mcierzy rzdkich Zlicz jki procet elemetów mcierzy A to zer
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 4 Ćwiczeie 3 Mcierz rzdk - mcierz w której zczą część elemetów stowią zer profil mcierzy - zpis elemetów iezerowych mcierzy rzdkich Zlicz jki procet elemetów mcierzy A to zer zer=0 for i=: for j=: if A(i,j)==0 the zer = zer+ ed ed ed procet = zer/(*)*00 disp(procet)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 5 Przykłd 4 Mcierz rzdk - mcierz w której zczą część elemetów stowią zer profil mcierzy - zpis elemetów iezerowych mcierzy rzdkich Uzupełij skrypt, stworzoy w poprzedim zdiu: Wykorzystując fukcję SciLb sprse() przeksztłć mcierz A do profilu geerowego przez tą fukcję. A_s = sprse(a)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 6 Przykłd 4 Mcierz rzdk - mcierz w której zczą część elemetów stowią zer profil mcierzy - zpis elemetów iezerowych mcierzy rzdkich Uzupełij skrypt, stworzoy w poprzedim zdiu: Wykorzystując fukcję SciLb sprse() przeksztłć mcierz A do profilu geerowego przez tą fukcję. A_s = sprse(a) Rozwiąż ukłd rówń A = b z pomocą fukcji lusolve() służącej do rozwiązywi ukłdów rówń liiowych z mcierzą rzdką. Wyik podstwić pod zmieą 3. 3 = lusolve (A_s, b)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 7 Przykłd 4 Mcierz rzdk - mcierz w której zczą część elemetów stowią zer profil mcierzy - zpis elemetów iezerowych mcierzy rzdkich Uzupełij skrypt, stworzoy w poprzedim zdiu: Wykorzystując fukcję SciLb sprse() przeksztłć mcierz A do profilu geerowego przez tą fukcję. A_s = sprse(a) Rozwiąż ukłd rówń A = b z pomocą fukcji lusolve() służącej do rozwiązywi ukłdów rówń liiowych z mcierzą rzdką. Wyik podstwić pod zmieą 3. 3 = lusolve (A_s, b) oszcuj z pomocą ormy błąd rozwiązi, porówj go z wcześiej otrzymymi rozwiązimi. p3 = orm (A_s * 3 - b)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 8 Struktur progrmu w SciLbie Progrm główy plik.sce Plik procedur - fukcji fukcje.sci fuctio =fu_() = + edfuctio... getf( fukcje.sci ) getf( fukcje.sci ) d = z = fu_(d) w = fu_(z)... Plik procedur - fukcji fukcje.sci fuctio =fu_() = * edfuctio...
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 9 Ćwiczeie 5 Uzupełić skrypt, poprzez dopisie poleceń, które: wykorzystując fukcję lu()zjdą rozkłd trójkąty mcierzy A = L U wykorzystując procedury zpise w pliku /pub/progrmy/utrojkte.sci, orz otrzymy rozkłd trójkąty, zjdą rozwiązie ukłdu A = b (podstwijąc rozwiązie jko s), wykorzystując podstwieie, A = LU, LU = b Ly = b, U = y oszcują błąd rozwiązi:
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 0 Ćwiczeie 5 Uzupełić skrypt, poprzez dopisie poleceń, które: wykorzystując fukcję lu()zjdą rozkłd trójkąty mcierzy A = L U wykorzystując procedury zpise w pliku /pub/progrmy/utrojkte.sci, orz otrzymy rozkłd trójkąty, zjdą rozwiązie ukłdu A = b (podstwijąc rozwiązie jko s), wykorzystując podstwieie, A = LU, LU = b Ly = b, U = y oszcują błąd rozwiązi: // otrzymie rozkłdu trójkątego [L, U] = lu(a)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd Ćwiczeie 5 Uzupełić skrypt, poprzez dopisie poleceń, które: wykorzystując fukcję lu()zjdą rozkłd trójkąty mcierzy A = L U wykorzystując procedury zpise w pliku /pub/progrmy/utrojkte.sci, orz otrzymy rozkłd trójkąty, zjdą rozwiązie ukłdu A = b (podstwijąc rozwiązie jko s), wykorzystując podstwieie, A = LU, LU = b Ly = b, U = y oszcują błąd rozwiązi: // otrzymie rozkłdu trójkątego [L, U] = lu(a) // wczytie pliku biblioteczego getf('/pub/progrmy/utrojkte.sci') y = uk_trojkty_doly(l,b) t = uk_trojkty_gory(u,y) pt = orm (A * t - b)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd Ćwiczeie 6 Rozwiązć pody ukłd rówń: 0 3 [0] W owym skrypcie (djąc mu zwę ~/uk_sym.sce) zpisz polecei przy pomocy których moż sformowć mcierz T, orz wektor z, stępie przeksztłcić mcierz T do postci rzdkiej, wykorzystując sposób zpisu mcierzy rzdkiej w SciLbie (ptrz fukcje sprse(), full()) rozwiązć ukłd rówń Ty = z wykorzystując fukcję lusolve() 3 3 3 3... [0] y =...... 0 0 fktoryzcję Cholesky'ego - fukcje chfct(), chsolve() oszcowć z pomocą ormy błąd rozwiązi w kżdej z metod
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 3 Ćwiczeie 6 - cd // sformowie mcierzy T T = zeros(0,0) for i = :00 T(i,i) = 9 + i T(i,i+) = 3; T(i+,i) = 3 z(i) = i ed T(0,0) = 0; z(0) = 0
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 4 Ćwiczeie 6 - cd // sformowie mcierzy T T = zeros(0,0) for i = :00 T(i,i) = 9 + i T(i,i+) = 3; T(i+,i) = 3 z(i) = i ed T(0,0) = 0; z(0) = 0 T_sp = sprse(t) // budow profilu mcierzy rzdkiej y = lusolve (T_sp, z) // rozwiązie fukcją lusolve T_ch = chfct(t_sp) // rozkłd Cholesky'ego y_ch = chsolve(t_ch, z) //rozwiązie metodą Cholesky'ego p_ch = orm (T_sp * y_ch - z) // oszcowie błędu p = orm (T_sp * y - z) disp(p_ch), disp(p)
5 mrzec 009 SciLb w obliczeich umeryczych - część Sljd 5 Wykorzystywe fukcje: Fukcje SciLb orm() obliczeie ormy wektor lub mcierzy lisolve() rozwiązie ukłdu rówń liiowych dowolej postci lu() rozkłd LU - metod Guss-Crout iv() obliczeie mcierzy odwrotej sprse() formowie mcierzy rzdkich full() formowie mcierzy kwdrtowej z profilu otrzymego fukcją sprse() lusolve() rozwiązie ukłdu rówń liiowych z mcierzą rzdką lufct() utworzeie rozkłdu trójkątego chfct() rozkłd Cholesky'ego chsolve() rozwiązie ukłdu rówń liiowych z mcierzą rzdką z pomocą metody Cholesky'ego