układy równań liniowych macierze rzadkie
Post on 18-Nov-2021
7 Views
Preview:
TRANSCRIPT
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 1
Układy równań liniowychMacierze rzadkie
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 2
Plan zajęć
1. Zadanie rozwiązania układu równań liniowych.
2. Ćwiczenie 1 - rozwiązanie układu równań liniowych postaci Ax = b.
3. Ćwiczenie 2 - operacje We-Wy, porównanie metod rozwiązania układu równań liniowych. oszacowanie błędu (wektora reszt) przy pomocy normy.
4. Przykład 3, Ćwiczenie 4 - wykorzystanie funkcji związanych z macierzami rzadkimi.
5. Ćwiczenie 5 - rozwiązywanie układów równań poprzez znalezienie rozkładu trójkątnego macierzy, wykorzystanie plików bibliotecznych.
6. Ćwiczenie 6 - rozwiązywanie układu równań liniowych z macierzą rzadką, symetryczną, dodatnio określoną. Porównanie rozwiązania metodą Gaussa-Crouta i metodą rozkładu Cholesky'ego.
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 3
Układ równań liniowych
Zapis w postaci macierzowej
=+++
=+++=+++
nnnnnn
nn
nn
bxaxaxa
bxaxaxabxaxaxa
2211
22222121
11212111
0det,][
2
1
2
1
21
22221
11211
≠=
=
AbxAb
bb
x
xx
aaa
aaaaaa
nnnnnn
n
n
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 4
Ćwiczenie 1Rozwiązać, układ równań, zapisany w postaci macierzowej A x = b przy
użyciu funkcji SciLaba linsolve():
UWAGA: funkcja linsolve() rozwiązuje równanie macierzowe postaci A*x+b=0 .
=
−−−−
−
7902
1213211211111111
4
3
2
1
xxxx
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 5
Ćwiczenie 1Rozwiązać, układ równań, zapisany w postaci macierzowej A x = b przy
użyciu funkcji SciLaba linsolve():
UWAGA: funkcja linsolve() rozwiązuje równanie macierzowe postaci A*x+b=0 .
=
−−−−
−
7902
1213211211111111
4
3
2
1
xxxx
A = [ 1, 1, 1, -1; 1, -1, -1, 1; 2, 1, -1, 2; 3, 1, 2, -1]b = [2, 0, 9, 7]'x=linsolve(A, -b)// x = [1, 2, 3, 4]
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 6
Ćwiczenie 2W nowym skrypcie (nadając mu nazwę mo-1.sce) zapisz polecenia wykonujące: ● wczytanie danych z pliku /pub/programy/macierz_a.txt do SciLaba i podstawienie
pod zmienne n,A. W pliku macierz_a.txt (sformatowanym pliku tekstowym) dane zapisane są w jednej kolumnie:
– w pierwszym wierszu wymiar macierzy (podstawić pod zmienną n)
– w kolejnych wierszach współczynniki macierzy kwadratowej A, czytane wierszami.
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 7
Ćwiczenie 2W nowym skrypcie (nadając mu nazwę mo-1.sce) zapisz polecenia wykonujące: ● wczytanie danych z pliku /pub/programy/macierz_a.txt do SciLaba i podstawienie
pod zmienne n,A. W pliku macierz_a.txt (sformatowanym pliku tekstowym) dane zapisane są w jednej kolumnie:
– w pierwszym wierszu wymiar macierzy (podstawić pod zmienną n)
– w kolejnych wierszach współczynniki macierzy kwadratowej A, czytane wierszami.
// wczytanie elementów macierzy z plikuu = file('open','/pub/programy/macierz_a.txt','old')n = read(u,1,1)A = zeros(n, n)for i = 1:n for j = 1:n
A(i,j) = read(u,1,1) endendfile('close',u)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 8
● sformowanie wektora kolumnowego b (n= rozmiar wektora = wymiar macierzy A) ustalając:
niA
b ij
nji ,...,14
max,...,1
===
Ćwiczenie 2 - cd
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 9
● sformowanie wektora kolumnowego b (n= rozmiar wektora = wymiar macierzy A) ustalając:
niA
b ij
nji ,...,14
max,...,1
===
Ćwiczenie 2 - cd
// sformowanie wektora b, wczytanie macierzy A wg schematu opisanego w ćwiczeniufor i=1:n b(i) = max(A(i,1:n))/4end
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 10
● rozwiązanie układu równań Ax = b przy użyciu● funkcji SciLaba linsolve() (rozwiązanie zapisać jako x1)● macierzy odwrotnej do macierzy A (rozwiązanie zapisać jako x2)
● oszacowanie (i wyświetlenie wartości na ekranie) przy użyciu normy || . ||2 dla każdego z otrzymanych rozwiązań xp (p=1,2) błędu (wektora reszt) dla uzyskanego rozwiązania (r = A*xp - b).
Ćwiczenie 2 - cd
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 11
● rozwiązanie układu równań Ax = b przy użyciu● funkcji SciLaba linsolve() (rozwiązanie zapisać jako x1)● macierzy odwrotnej do macierzy A (rozwiązanie zapisać jako x2)
● oszacowanie (i wyświetlenie wartości na ekranie) przy użyciu normy || . ||2 dla każdego z otrzymanych rozwiązań xp (p=1,2) błędu (wektora reszt) dla uzyskanego rozwiązania (r = A*xp - b).
Ćwiczenie 2 - cd
// rozwiązanie układów równań, oszacowanie błędówx1 = linsolve(A,-b)x2 = inv(A)* bp1 = norm(A * x1 - b); p2 = norm(A * x2 - b)disp(p1); disp(p2)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 12
● rozwiązanie układu równań Ax = b przy użyciu● funkcji SciLaba linsolve() (rozwiązanie zapisać jako x1)● macierzy odwrotnej do macierzy A (rozwiązanie zapisać jako x2)
● oszacowanie (i wyświetlenie wartości na ekranie) przy użyciu normy || . ||2 dla każdego z otrzymanych rozwiązań xp (p=1,2) błędu (wektora reszt) dla uzyskanego rozwiązania (r = A*xp - b).
Ćwiczenie 2 - cd
// rozwiązanie układów równań, oszacowanie błędówx1 = linsolve(A,-b)x2 = inv(A)* bp1 = norm(A * x1 - b); p2 = norm(A * x2 - b)disp(p1); disp(p2) // p1 = 188.02344
// p2 = 1.556D-14
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 13
Ćwiczenie 3
Macierz rzadka - macierz w której znaczną część elementów stanowią zeraprofil macierzy - zapis elementów niezerowych macierzy rzadkich
Zlicz jaki procent elementów macierzy A to zera
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 14
Ćwiczenie 3
Macierz rzadka - macierz w której znaczną część elementów stanowią zeraprofil macierzy - zapis elementów niezerowych macierzy rzadkich
Zlicz jaki procent elementów macierzy A to zera
zera=0for i=1:n for j=1:n if A(i,j)==0 then
zera = zera+1 end
endendprocent = zera/(n*n)*100disp(procent)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 15
Przykład 4
Macierz rzadka - macierz w której znaczną część elementów stanowią zeraprofil macierzy - zapis elementów niezerowych macierzy rzadkichUzupełnij skrypt, stworzony w poprzednim zadaniu:
● Wykorzystując funkcję SciLaba sparse() przekształć macierz A do profilu generowanego przez tą funkcję.
A_s = sparse(A)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 16
Przykład 4
Macierz rzadka - macierz w której znaczną część elementów stanowią zeraprofil macierzy - zapis elementów niezerowych macierzy rzadkichUzupełnij skrypt, stworzony w poprzednim zadaniu:
● Wykorzystując funkcję SciLaba sparse() przekształć macierz A do profilu generowanego przez tą funkcję.
A_s = sparse(A)● Rozwiąż układ równań A x = b za pomocą funkcji lusolve()
służącej do rozwiązywania układów równań liniowych z macierzą rzadką. Wynik podstawić pod zmienną x3.
x3 = lusolve (A_s, b)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 17
Przykład 4
Macierz rzadka - macierz w której znaczną część elementów stanowią zeraprofil macierzy - zapis elementów niezerowych macierzy rzadkichUzupełnij skrypt, stworzony w poprzednim zadaniu:
● Wykorzystując funkcję SciLaba sparse() przekształć macierz A do profilu generowanego przez tą funkcję.
A_s = sparse(A)● Rozwiąż układ równań A x = b za pomocą funkcji lusolve()
służącej do rozwiązywania układów równań liniowych z macierzą rzadką. Wynik podstawić pod zmienną x3.
x3 = lusolve (A_s, b)● oszacuj za pomocą normy błąd rozwiązania, porównaj go z wcześniej
otrzymanymi rozwiązaniami.
p3 = norm (A_s * x3 - b)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 18
Struktura programu w SciLabie
Plik
procedur - funkcji
funkcje2.sci function x=fun_2(a) x = a * a endfunction ...
Plik
procedur - funkcji
funkcje1.sci function x=fun_1(a) x = a + a endfunction ...
Program główny
plik.sce
getf(‘funkcje1.sci’) getf(‘funkcje2.sci’) d = 1 z = fun_1(d) w = fun_2(z) ...
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 19
Ćwiczenie 5 Uzupełnić skrypt, poprzez dopisanie poleceń, które:● wykorzystując funkcję lu()znajdą rozkład trójkątny macierzy A = L U● wykorzystując procedury zapisane w pliku /pub/programy/utrojkatne.sci, oraz
otrzymany rozkład trójkątny, znajdą rozwiązanie układu Ax = b (podstawiając rozwiązanie jako xs), wykorzystując podstawienie,
A = LU, LUx = b ⇒ Ly = b, Ux = y ● oszacują błąd rozwiązania:
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 20
Ćwiczenie 5 Uzupełnić skrypt, poprzez dopisanie poleceń, które:● wykorzystując funkcję lu()znajdą rozkład trójkątny macierzy A = L U● wykorzystując procedury zapisane w pliku /pub/programy/utrojkatne.sci, oraz
otrzymany rozkład trójkątny, znajdą rozwiązanie układu Ax = b (podstawiając rozwiązanie jako xs), wykorzystując podstawienie,
A = LU, LUx = b ⇒ Ly = b, Ux = y ● oszacują błąd rozwiązania:
// otrzymanie rozkładu trójkątnego[L, U] = lu(A)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 21
Ćwiczenie 5 Uzupełnić skrypt, poprzez dopisanie poleceń, które:● wykorzystując funkcję lu()znajdą rozkład trójkątny macierzy A = L U● wykorzystując procedury zapisane w pliku /pub/programy/utrojkatne.sci, oraz
otrzymany rozkład trójkątny, znajdą rozwiązanie układu Ax = b (podstawiając rozwiązanie jako xs), wykorzystując podstawienie,
A = LU, LUx = b ⇒ Ly = b, Ux = y ● oszacują błąd rozwiązania:
// otrzymanie rozkładu trójkątnego[L, U] = lu(A)// wczytanie pliku bibliotecznego getf('/pub/programy/utrojkatne.sci')y = uk_trojkatny_dolny(L,b)xt = uk_trojkatny_gorny(U,y)pt = norm (A * xt - b)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 22
Ćwiczenie 6Rozwiązać podany układ równań:
W nowym skrypcie (nadając mu nazwę ~/uk_sym.sce) zapisz polecenia przy pomocy których można
● sformować macierz T, oraz wektor z, następnie przekształcić macierz T do postaci rzadkiej, wykorzystując sposób zapisu macierzy rzadkiej w SciLabie (patrz funkcje sparse(), full())
● rozwiązać układ równań Ty = z wykorzystując
– funkcję lusolve() – faktoryzację Cholesky'ego - funkcje chfact(), chsolve()● oszacować za pomocą normy błąd rozwiązania w każdej z metod
=⋅
101
...21
120]0[......
32233213
]0[320
y
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 23
Ćwiczenie 6 - cd
// sformowanie macierzy TT = zeros(101,101)for i = 1:100 T(i,i) = 19 + i T(i,i+1) = 3; T(i+1,i) = 3 z(i) = iendT(101,101) = 120; z(101) = 101
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 24
Ćwiczenie 6 - cd
// sformowanie macierzy TT = zeros(101,101)for i = 1:100 T(i,i) = 19 + i T(i,i+1) = 3; T(i+1,i) = 3 z(i) = iendT(101,101) = 120; z(101) = 101T_sp = sparse(T) // budowa profilu macierzy rzadkiejy = lusolve (T_sp, z) // rozwiązanie funkcją lusolveT_ch = chfact(T_sp) // rozkład Cholesky'egoy_ch = chsolve(T_ch, z) //rozwiązanie metodą Cholesky'egop_ch = norm (T_sp * y_ch - z) // oszacowanie błędup = norm (T_sp * y - z)disp(p_ch), disp(p)
Instytut K onstrukcji Budowlanych Metody ObliczenioweZakład K omputerowego Wspomagania Projektowania Semestr II.
5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd 25
Funkcje SciLaba
Wykorzystywane funkcje:● norm() obliczenie normy wektora lub macierzy● linsolve() rozwiązanie układu równań liniowych dowolnej postaci● lu() rozkład LU - metoda Gaussa-Crouta● inv() obliczenie macierzy odwrotnej● sparse() formowanie macierzy rzadkich● full() formowanie macierzy kwadratowej z profilu otrzymanego
funkcją sparse()● lusolve() rozwiązanie układu równań liniowych z macierzą rzadką● lufact() utworzenie rozkładu trójkątnego● chfact() rozkład Cholesky'ego ● chsolve() rozwiązanie układu równań liniowych z macierzą rzadką za
pomocą metody Cholesky'ego
top related