25
I nstytut K onstrukcji Budowlanych M etody Obliczeniowe Z akład K omputerowego W spomagania Projektowania Semestr II. 5 marzec 2009 SciLab w obliczeniach numerycznych - część 1 Slajd1 Układy równań liniowych Macierze rzadkie

Układy równań liniowych Macierze rzadkie

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Układy równań liniowych Macierze rzadkie

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

Page 2: Układy równań liniowych Macierze 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.

Page 3: Układy równań liniowych Macierze rzadkie

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

Page 4: Układy równań liniowych Macierze rzadkie

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

Page 5: Układy równań liniowych Macierze rzadkie

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]

Page 6: Układy równań liniowych Macierze rzadkie

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.

Page 7: Układy równań liniowych Macierze rzadkie

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)

Page 8: Układy równań liniowych Macierze rzadkie

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

Page 9: Układy równań liniowych Macierze rzadkie

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

Page 10: Układy równań liniowych Macierze rzadkie

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

Page 11: Układy równań liniowych Macierze rzadkie

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)

Page 12: Układy równań liniowych Macierze rzadkie

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

Page 13: Układy równań liniowych Macierze rzadkie

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

Page 14: Układy równań liniowych Macierze rzadkie

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)

Page 15: Układy równań liniowych Macierze rzadkie

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)

Page 16: Układy równań liniowych Macierze rzadkie

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)

Page 17: Układy równań liniowych Macierze rzadkie

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)

Page 18: Układy równań liniowych Macierze rzadkie

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) ...

Page 19: Układy równań liniowych Macierze rzadkie

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:

Page 20: Układy równań liniowych Macierze rzadkie

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)

Page 21: Układy równań liniowych Macierze rzadkie

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)

Page 22: Układy równań liniowych Macierze rzadkie

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

Page 23: Układy równań liniowych Macierze rzadkie

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

Page 24: Układy równań liniowych Macierze rzadkie

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)

Page 25: Układy równań liniowych Macierze rzadkie

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