104
Pierwsza Poprzednia Następna Ostatnia Wróć Caly ekran Zamknij Wyjdź Strona: 1 Metody numeryczne - laboratorium. Matlab 6.1 wersja 2.3 Kwiecień 2002

[PL] Matlab - Metody numeryczne

Embed Size (px)

Citation preview

Page 1: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 1

Metody numeryczne - laboratorium.Matlab 6.1

wersja 2.3Kwiecień 2002

Page 2: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 2

Spis treści

1 Matlab - podstawy 61.1 Wiadomości ogólne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2 Praca z Matlab -em . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.3 Wyrażenia w Matlab -ie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

1.3.1 Zmienne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.2 Liczby. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3.3 Operatory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.3.4 Funkcje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

1.4 Pliki skryptowe i funkcjne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.5 Rysunki w Matlab -ie - polecenia plot i subplot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251.6 Pliki danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

1.6.1 Polecenie save. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.6.2 Polecenie load. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

1.7 Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2 Nieuniknione błędy. 382.1 Miary błędów. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392.2 Reprezentacja binarna liczby rzeczywistej. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.3 Zamieniamy całkowitą potęgę do układu binarnego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.4 Zamieniamy rzeczywistą mantysę do układu binarnego . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422.5 Liczby użyteczne i nieużyteczne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

3 Macierze i operacje na nich, techniki przetwarzania macierzy. 453.1 Mnożenie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.2 Potęgowanie i dzielenie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.3 Transpozycja i sprzężenie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.4 Rząd macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.5 Wyznacznik macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

Page 3: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 3

3.6 Macierze specjalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.6.1 Macierz diagonalna (przekątniowa) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.6.2 Macierz jednostkowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.6.3 Macierz permutacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.6.4 Macierz trójkątna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.6.5 Macierz odwrotna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.6.6 Macierz symetryczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.6.7 Macierz ortogonalna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

4 Układy równań liniowych. 654.1 Rozwiązanie formalne dla kwadratowej macierzy układu. . . . . . . . . . . . . . . . . . . . . . . . . . . . 684.2 Eliminacja Gaussa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

4.2.1 Rozwiązanie układu diagonalnego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704.2.2 Rozwiązanie układu trójkątnego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724.2.3 Eliminacja Gaussa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754.2.4 Eliminacja Gaussa z wyszukiwaniem elementu głównego . . . . . . . . . . . . . . . . . . . . . . . 784.2.5 Rozwiązanie układu z użyciem opratora dzielenia lewostronnego. . . . . . . . . . . . . . . . . . . 82

4.3 Co robi operator dzielenia lewostronnego? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

5 Aproksymacja. 845.1 Aproksymacja linią prostą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.2 Aproksymacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885.3 Co jeszcze robi operator dzielenia lewostronnego? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

6 Interpolacja. 926.1 Interpolacja wielomianami sklejanymi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.2 Interpolacja kawałkami liniowa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006.3 Interpolacja kawałkami sześcienna - Hermite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026.4 Interpolacja kawałkami sześcienna - splajny. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036.5 Funkcje interpolacyjne Matlab -a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

Page 4: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 4

Page 5: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 5

Wstęp

1. W obliczniach numerycznych (w przeciwieństwie do obliczeń symbolicznych)dopuszczamy błąd w reprezentacji liczby.

2. W celu zaoszczędzenia pamięci komputera stosuje się różne typy zmiennych.

3. Dla potrzeb nauki praktycznego zapoznania się z metodami numerycznymibędziemy stosować programMatlab (MATrix LABoratory), który wykorzy-stuje tylko jeden typ zmiennych - macierz.

Amn =

a11 a12 . . . a1na21 a22 . . . a2n... ... ... ...am1 am2 . . . amn

Page 6: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 6

1. Matlab - podstawy

1.1. Wiadomości ogólne.

Matlabumożliwia wykorzystanie metod rachunku macierzowego za pomocą in-teraktywnego interfejsu i prostego języka poleceń. Wszystkie polecenia są formu-łowane w trybie tekstowym, a podstawową strukturą danych jest macierz, którejelementami mogą być liczby rzeczywiste lub zespolone.

W skład interfejsu wchodzą między innymi:

• Command Window - okno poleceń• Command History - okno poprzednich poleceń• Launch Pad - okno dostępu do pakietów Matlab -a• Current Directory - okno katalogu roboczego• Workspace - inoformacje o zmiennych w przestrzeni roboczej

Page 7: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 7

1.2. Praca z Matlab -em

Praca zMatlab -em przypomina pracę w typowym systemie operacyjnym (DOS,UNIX) i polega na wydawaniu poleceń, które po zatwierdzeniu są wykonywaneprzez interpreter.

• polecenie może być jedno, bądź jest to ciąg poleceń oddzielonych przecinkiemlub średnikiem.

• pliki, które są używane w pakiecie Matlabmają rozszerzenie *.m• w Matlab -ie są rozróżnialne małe i duże litery!

Page 8: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 8

Podstawowe polecenia Matlab -a:

Enter wykonanaj polecenie↑ ponowne wyświetlenie polecenia na ekraniehelp pomoc na dowolny temathelp nazwa tematu pomoc na określony tematexit zakończenie pracy z Matlab -em (lub quit)demo pokaz przykładowych zastosowań Matlab -a

Polecenia DOS-a:dir wyświetlenie zawartości aktualnego katalogutype nazwa pliku wyświetlenie zawartości pliku!notepad wywołanie ”Notatnika” (lub innego programu)

Page 9: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 9

W Matlab -ie podstawowym poleceniem jest instrukcja przypisania:

zmienna = wartość

>> x=5x =

5>> z=6;

jeśli na końcu polecenia zostanie posta-wiony średnik, to wartość zmiennej niebędzie wyświetlona,

zmienna = wyrażenie

>> 5+4ans =

9>> z=5*7z =35

jeśli nie zostanie zdefiniowana zmienna(nie nadana nazwa zmiennej), to Ma-tlabprzypisuje jej nazwę zmiennej ro-boczej ans,

Page 10: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 10

1.3. Wyrażenia w Matlab -ie.

Matlabudostępnia użytkownikowi polecenia - komendy, które w odróżnieniu odinnych języków programowania związane są z macierzami. Polecenia wykonująoperacje na:

• zmiennych,• liczbach,• operatorach,• funkcjach.

Page 11: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 11

1.3.1. Zmienne.

Matlabnie wymaga deklaracji typu i wymiarów zmiennych. Automatycznie two-rzy zmienną i przydziela jej domyślny obszar pamięci. Jeżeli zmienna już istnieje,Matlab zmienia jej zawartość i w sposób dynamiczny przyporządkowuje jej wy-magany obszar pamięci. Polecenie:

>> num_students = 25 tworzy macierz 1 × 1 o nazwienum_students i przechowuje w niejwartość 25.

Nazwa zmiennej musi zaczynać się od litery alfabetu, a po niej może występowaćdowolny znak alfanumeryczny lub znak podkreślenia. Maksymalna długość nazwyzmiennej wynosi 31 znaków. Przy wyborze nazw zmiennych należy pamiętać otym, że Matlab rozróżnia małe i duże litery.

Page 12: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 12

1.3.2. Liczby.

Matlabużywa konwencjonalną notację dziesiętną, z kropką dziesiętną. W przy-padku notacji naukowej litera e służy do określenia wykładnika potęgi dziesięć. Wprzypadku liczb zespolonych używa się zarówno literę i, jak j przy części urojonejliczby zespolonej. Przykłady liczb w programie Matlab :

3 -99 0.00019.6397238 1.60210e-20 6.02252e231i -3.14159j 3e5i

Wszystkie liczby są zachowywane w formacie długim (z ang. format long). Nakomputerach wykorzystujących 32-bitowy procesor odpowiada to dokładności do16 cyfr znaczących po kropce dziesiętnej i zakresowi od 10−308 do 10+308.

Page 13: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 13

Polecenie format kontroluje format liczb wyświetlanych przez programMATLAB.Polecenie jest jedynie odpowiedzialne za sposób wyświetlania liczb, a nie dokład-ność obliczeń i sposób ich zapamiętywania.Ćwiczenie: Format liczby

>> a = 0.12345678901234567890 polecenie nadania wartości zmiennej a

>> a wyświetlenie wartości zmiennej a

>> format short e>> a

ustawienie formatu liczb na 0.12345 10123

>> format short>> a

ustawienie formatu liczb na 0.12345

>> format long>> a

format 0.123456789012345

>> format long e>> a

format 0.123456789012345 10123

Page 14: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 14

1.3.3. Operatory.

Operatory arytmetyczne (macierzowe i tablicowe)Symbol operacji Znaczenie Symbol operacji Priorytetmacierzowej tablicowej operacji

^ potęgowanie .^ najwyższy’ sprzężenie nie ma najwyższy.’ transpozycja nie ma najwyższy* mnożenie .* niższy/ dzielnie prawostronne ./ niższy\ dzielenie lewostronne .\ niższy+ dodawanie + najniższy- odejmowanie - najniższy

Page 15: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 15

Operatory logczneSymbol Znaczenie

< mniej niż<= mniej niż lub równe> większe niż>= większe niż lub równe== równa się~= nie równa się

& iloczyn logiczny (i)| suma logiczna (lub)~ zaprzeczenie (nie)

Uwaga! W języku Matlab tylko liczba zero ma wartość logiczną false - fałsz,pozostałe liczby mają wartość logiczną true - prawda.

Page 16: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 16

1.3.4. Funkcje.

Matlabudostępnia użytkownikowi szereg standardowych elementarnych funk-cji obejmujących m.in. abs, sqrt, exp i sin. Większość tych funkcji akceptujezespolone argumenty.

>> help elfun polecenie wyświetlające listę elementar-nych funkcji matematycznych

>> help specfun>> help elmat

polecenie wyświetlające listę zaawanso-wanych matematycznych i macierzowychfunkcji

Niektóre funkcje takie, jak sqrt i sin, są wbudowane w program, dzięki czemusą bardzo efektywne. Inne funkcje takie, jak gamma i sinh, są zewnętrznymi pli-kami *.m. Użytkownik może przejrzeć kody tych funkcji i ewentualnie poddać jemodyfikacjom.

Page 17: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 17

Matlabudostępnia również szereg funkcji specjalnych generujących pomocnestałe:

pi 3.14159265358979i liczba urojona

√−1

j liczba urojona (to samo znaczenie co i)eps odległość od 1.0 do następnej liczbyrealmin najmniejsza dodatnia liczbarealmax największa ujemna liczbaInf nieskończoność (∞)NaN nie jest to liczba (z ang. not a number)

>> epsans =2.220446049250313e-016

>>eps = 1.e-6

nazwy powyższych funkcji nie są zastrze-żone, dzięki czemu jest możliwa zmianaich wartości

>>clear eps domyślna wartość funkcji może być od-tworzona przy pomocy polecenia

Page 18: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 18

Przykład:

>> a=10/0Warning: Divide by zero.a =Inf

>>b=0/0Warning: Divide by zero.b =NaN

Ostrzeżenie: Dzielenie przez zero.

>>c=Inf-Infc =NaN

Page 19: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 19

Przykład: Wyrażenia z wykorzystaniem wbudowanych funkcji.

>>rho = (1+sqrt(5))/2rho =1.6180

>>a = abs(3+4i)a =5

>>duzo = exp(log(realmax))duzo =1.7977e+308

>>zbytduzo = pi*duzozbytduzo =Inf

funkcje sqrt() -√·, abs() - |·|, . . .

Page 20: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 20

Ćwiczenie: Wypełnij macierze. Sprawdź rezutalt poleceniem whos.

>> a=1.234;>> size(a)

polecenie size zwraca wymiar macierzy,zmienna a to macierz o wymiare 1x1

>> clear a polecenie usunięcia zmiennej a z pamięci

>> a=[1 2 3 4 5; 6 7 8 9 0] wypełnianie macierzy (; jest separato-rem wierszy)

>> a=[1.1:2.2:7] wypełnianie macierzy (min:skok::max),domyślny skok to 1

>> who polecenie who pokazuje wszystkie zmien-ne w przestrzeni roboczej

>> whos polecenie whos pokazuje wszystkiezmienne i ich rozmiary

Page 21: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 21

Ćwiczenie: Wykonaj polecenia - spróbuj przewidzieć wynik. Sprawdź rezutaltpoleceniem whos.

>> a=[1,0,0,0,0,1] zapamiętaj rolę przecinka - oddziela onkoleje pola macierzy

>> b=[2;4;6;10] zapamiętaj rolę średnika - to separatorwierszy macierzy

>> c=[5 3 5; 6 2 -3] spacja pełni rolę taką jak przecinek

>> d=[3 45 79 10]

zapamiętaj rolę zmiany linii (Enter) wtrakcie wypełniania macierzy, jest ona ta-ka sama jak rola średnika

>> e=[3 5 10 0; 0 0 ...0 3; 3 9 9 8]

... to znak kontynuacji wiersza

Page 22: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 22

Ćwiczenie: Wykonaj polecenia - spróbuj przewidzieć wynik. Sprawdź rezutaltpoleceniem whos.

>> t=[4 24 9]>> q=[t 0 t]

zauważ, że elementami macierzy mogąbyć macierze

>> x=[3 6]>> y=[d;x]>> z=[x;d]

macierz d była wprowadzone wcześniej izapamiętana w przestrzeni roboczej

>> r=[c;x,5]>> c

nie pomyl średnika z przecinkiem i ko-niecznie sprawdź poleceniem whos co jużmasz w pamięci, macierz c zdefinowanowcześniej

>> c(2,1)>> v=[c(2,1);b]

c(2,1) wskazuje konkretny element ma-cierzy

>> a(2,1)=-3>> c(1,5)=1

czy wynik tych poleceń jest zaskakujący?

Page 23: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 23

1.4. Pliki skryptowe i funkcjne.

Pliki *.M są plikam ASCII, które mogą zawierać:

• sekwencje poleceń,• wywołania innych plików M lub samych siebie,• skrypty, czyli ciągi poleceń - pliki-M skryptowe,• funkcje tworzone przez użytkownika - pliki-M funkcyjne.Pliki-M funkcyjne zawierają definicje nowych funkcji, które działają na zmiennychlokalnych i globalnych. Komunikują się z przestrzenią roboczą poprzez parametryi zmienne globalne (polecenie global).Pliki-M funkcyjne rozpoczynają się od słowa kluczowego function o następującejskładni:

function [lista param. wyjść] = nazwa funkcji (lista param. wejść)

Page 24: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 24

Ćwiczenie:

1. Utwórz za pomocą dowolnego edytora ASCII plik o nazwie pit.m

2. Wprowadź do niego następujące polecenia:function z = pit(x,y);% moja funkcja%temp = x.^2 + y.^2;z = sqrt(temp);

3. Zapisz plik w katalogu roboczym.

4. Wykonaj polecenia z wykorzystaniem nowej funkcji pit.

5. Spróbuj wykonać inną własną funkcję.

>> pit(3,4)>> a=4, b=6, c=pit(a,b)

Wywołaj funkcję na różne znane ci sposo-by. Wykonaj polecenie help pit. Zmo-dyfikuj komentarz (tekst poprzedzonyznakiem %)

Page 25: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 25

1.5. Rysunki w Matlab -ie - polecenia plot i subplot.

Polecenie plot służy do sporządzania rysunków 2-D i może być wywołane z na-stępującymi parametrami:

plot(y)plot(x,y)plot(x,y,s)plot(x,y,s,x1,y1,s1,...)

y - wektor wrtości na osi pionowej, na osipoziomej będą kolejne liczby natu-ralne

x - wektor wartości na osi poziomej otym samym wymiarze co wektor y

s - ciąg co najwyżej trzech znaków okre-ślających: kolor, rodzaj punktu, typlini.

b niebieski . punkt - ciągłag zielony o koło : kropkowar czerwony x krzyż -. kreska-kropkac turkusowy + plus -- przerywanam amarantowy * gwiazday żółty s kwadratk czarny d diament

v^<> trójkąt

Page 26: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 26

Przykład:

>> x=-pi:0.1:pi;>> plot(x,sin(x),’+-’,x,cos(x),’*’)

pierwsze polecenie wypełnia macierz x wzakresie od −π do π co 0.1, drugie rysujedwie funkcjepolecenie sin(x) generuje macierz war-tości dla wszystkich warości macierzy x

−4 −3 −2 −1 0 1 2 3 4−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

Page 27: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 27

Polecenie subplot dzieli okno graficzne na mniejsze prostokątne pola.

subplot(m,n,p)subplot(mnp)

m,n - ilość pól pionowo i poziomo

p - numer aktywnego pola

Przykład:

>> x = -5:0.01:5;>> subplot(2,2,2), plot(x,sin(x))>> subplot(2,1,2), plot(x,cos(x))

−5 −4 −3 −2 −1 0 1 2 3 4 5−1

−0.5

0

0.5

1

−5 0 5−1

−0.5

0

0.5

1

Page 28: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 28

Polecenia dodatkowe do opisu rysunku:

polecenie opis przykładtitle tytuł title(’Moj rysunek’)xlabel opis osi poziomej xlabel(’x w cm’)ylabel opis osi pionowej ylabel(’f(x)’)legend utworzenie legendy legend(’moja linia’)text wstawienie tekstu w punkcie (x, y) text(1,1,’moj tekst’)gtext wstawienie tekstu przy pomocy myszy gtext(’tekst’)grid wyświetlanie siatkiaxis skalowanie i wygląd osi axis off, axis on

Inne polecenia związane z rysunkiem:

hold nowy rysunek nie usunie istniejącegoprint wydruk lub zapis rysunku do plikuclf wyczyszczenie okna graficznego

Page 29: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 29

Przykład: Rysunek 3-D.

>> [x,y] = meshgrid(-2:.2:2, -2:.2:2);>> z = x .* exp(-x.^2 - y.^2);>> mesh(z)

010

2030

4050

0

10

20

30

40

50−0.5

0

0.5

Page 30: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 30

1.6. Pliki danych

1.6.1. Polecenie save.

Polecenie save pozwala na zapamiętanie zawartości pamięci operacyjnej progra-mu w pliku danych z rozszerzeniem *.MAT, które następnie można wczytać doprogramu dzięki poleceniu load.

savesave ’nazwa pliku’save ’nazwa pliku’ ’lista zmiennych’

’nazwa pliku’ - nazwa pliku do które-go zapisżą się dane (domyślnie ’ma-tlab.mat’),

’lista zmiennych’ - lista zmiennych dozapisania (domyślnie wszystkie).

Dodatkowe opcje:

-ascii w 8-cyfrowym formacie tekstowym-double w 16-cyfrowym formacie tekstowym-tabs elementy macierzy rozdzielone zostają znakami tabulacji-append dopisuje dane do istniejącego pliku *.MAT

Uwaga! W jednym pliku tekstowym (ASCII) powinna być zapamiętana jednazmienna.

Page 31: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 31

Przykład:

>> clear>> A=[1,2,3;4,5,6;7,8,9];>> b=12;>> saveSaving to: matlab.mat

zapis zmiennych A i b do pliku ’ma-tlab.mat’

>> clear>> who>> loadLoading from: matlab.mat>> whoYour variables are:A b

czyścimy wszystkie zmienne poleceniemclear, upewniamy się, że to prawda po-leceniem who i czytamy zapisane wcze-śniej zmienne z pliku ’matlab.mat’

>> save zmiennaa A>> clear>> load zmiennaa>> whoYour variables are:A

zapis i odczyt zmiennej A z pliku ’zmien-naa.mat’

Page 32: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 32

Przykład:

>> AA =1 24 5

>> save zmiennaa.dat A -ascii -double -tabs>> type zmiennaa.dat1.0000000000000000e+0002.0000000000000000e+0004.0000000000000000e+0005.0000000000000000e+000

>> whosName Size Bytes ClassA 2x2 32 double arrayGrand total is 4 elements using 32 bytes

Page 33: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 33

Przykład:

>> B=A’B =1 4 72 5 83 6 9

>> clear A>> whos

Name Size Bytes ClassB 3x3 72 double arrayGrand total is 9 elements using 72 bytes

>> load zmiennaa>> whoYour variables are:A B

Page 34: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 34

Przykład:

>> save zmienne A B>> clear>> load zmienne B>> whoYour variables are:B

Page 35: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 35

1.6.2. Polecenie load.

Polecenie load wczytuje pliki binarne oraz pliki tekstowe zawierające dane nume-ryczne. Plik tekstowy powinien zawierać prostokątną tablicę liczb rozdzielonychspacjami. W pliku tym linia zawiera jeden wiersz macierzy. Każdy z wierszy po-siada równą liczbę elementów.

Page 36: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 36

Ćwiczenie: Utwórz plik tekstowy magik.dat zawierający następujące czterylinie:

16.0 3.0 2.0 13.05.0 10.0 11.0 8.09.0 6.0 7.0 12.04.0 15.0 14.0 1.0

>> load magik.dat>> magik

wczytuje plik danych i tworzy zmiennamagik zawierającą przykładową macierz.

Page 37: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 37

1.7. Literatura

1. Matlab 6 - poradnik użytkownika, Bogumił i Zbigniew Mrozek, ISBN 83-7101-449-X, cena 38zł, 230 stron.

2. Matlab - obliczenia numeryczne i ich zastosowania, Andrzej Zalewski i RafałCegieła, ISBN 83-85060-85-5, cena 30zł, 400 stron.

Page 38: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 38

2. Nieuniknione błędy.Przykład:

>> format long e Polecenie zmiany formatu wyświetlanialiczby (help format).

>> 2.6 + 0.2ans =2.800000000000000e+000

>> ans + 0.2ans =3.000000000000000e+000

>> ans + 0.2ans =3.200000000000001e+000

>> 2.6 + 0.6ans =3.200000000000000e+000

Dlaczego 2.6+0.2+0.2+0.2 6= 2.6+0.6?

Page 39: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 39

2.1. Miary błędów.

błąd bezwzględny = |wartość otrzymana− wartość prawdziwa|

błąd względny =∣∣∣∣∣∣wartość otrzymana− wartość prawdziwa

wartość prawdziwa

∣∣∣∣∣∣

Page 40: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 40

2.2. Reprezentacja binarna liczby rzeczywistej.

• Każdą liczbę można zamienić do następującej postaci, nazywanej znormalizo-waną notacją naukową:

123.456→ 0.123456︸ ︷︷ ︸mantysa

×103

• Skończona liczba bitów jest przeznaczana na zapamiętanie liczby, przy czymczęść bitów bm przeznaczana jest na znormalizowana mantysę z przedziału(0.1,1.0), a część na całkowitą potęgę bp. Zarówno bm jak i bp mogą przyjmowaćwartości 1 lub 0.

64 bity︷ ︸︸ ︷bm︸︷︷︸znak

bmbm · · · · · · · · · bmbmbm︸ ︷︷ ︸52 bity︸ ︷︷ ︸

mantysa

bp︸︷︷︸znak

bpbp · · · bpbpbp︸ ︷︷ ︸10 bitów︸ ︷︷ ︸potęga

Page 41: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 41

2.3. Zamieniamy całkowitą potęgę do układu binarnego

pk = p0 −1∑k=10bpk 2k−1 = pk−1 − bpk 2k−1, gdzie p0 = potęga

Przykład: Niech potęga p0 = 10.

k 2k−1 bpk pk = pk−1 − bpk 2k−1

... 0 104 8 1 23 4 0 22 2 1 01 1 0 0

Page 42: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 42

2.4. Zamieniamy rzeczywistą mantysę do układu binarnego

mk = m0 −52∑k=1bmk

12

k = mk−1 − bmk12

k , gdzie m0 = mantysa

Przykład: Niech mantysa m0 = 0.8125.

k(12

)kbmk mk = mk−1 − bk

(12

)k1 0.5 1 0.31252 0.25 1 0.06253 0.125 0 0.06254 0.0625 1 0.0000...

Page 43: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 43

Ćwiczenie:

1. Rozpakuj plik mn.zip w katalogu: ...\toolbox\

2. Ustaw bieżący katalog (okno Current Directory) na:...\toolbox\mn\bledy.

3. MakraMatlab -a mają rozszerzenie *.m. Sprawdź, czy widoczne jest makroman2bin.m.

4. Kliknij dwa razy w nazwę pliku man2bin.m. Zapoznaj się z jego zawartością:

(a) pierwsza linia zawiera zawsze nagłówek funkcji o takiej samej nazwie jaknazwa pliku,

(b) linie poprzedzone znakiem % to komentarze,(c) słowa w niebieskim kolorze należa do języka Matlab -a.

5. Opis funkcji wywołuje się przez polecenie help "nazwa_funkcji" w okniepoleceń (Command Window).

Page 44: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 44

2.5. Liczby użyteczne i nieużyteczne.

>> relmax

>> relmin

Sprawdź wartości tych zmiennych. Da-lej ich wartości będziemy oznaczać odpo-wiednio: Rmax i Rmin.

Zakresy dyskretnej reprezentacji liczb rzeczywistych:

przydatność liczb zakres wartości komentarznieużyteczne (−∞,−Rmax) przepełnienie (z ang. overflow)użyteczne (−Rmax,−Rmin) pełna precyzja mantysyczęść. użyteczne (−Rmin,−Rmin − ε) gorsza precyzja mantysynieużyteczne (−Rmin − ε, 0,+Rmin − ε) zeroczęść. użyteczne (+Rmin − ε,+Rmax) gorsza precyzja mantysyużyteczne (+Rmin,+Rmax) pełna precyzja mantysynieużyteczne (+Rmax,+∞) przepełnienie

Page 45: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 45

3. Macierze i operacje na nich, technikiprzetwarzania macierzy.

MacierzA to tablica elementów aik na której można wykonać operacje macierzowe.Wskaźnik i = 1, . . .m oznacza numer wiersza, a k = 1, . . . n numer kolumny wktórej znajduje się element. Liczby m× n nazywane są rozmiarem macierzy.

A =

a11 a12 . . . a1na21 a22 . . . a2n... ... ... ...am1 am2 . . . amn

Poznaliśmy na wcześniejszych zajęciach symbole operacji macierzowych: ^ potę-gowanie, ’ sprzężenie, .’ transpozycja, * mnożenie, / dzielenie prawostronne, \dzielenie lewostronne, + odejmowanie, - odejmowanie. Teraz zajmiemy się nimibliżej.

Page 46: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 46

3.1. Mnożenie macierzy

Mnożenie macierzy A o rozmiarze m× k przez macierz B o rozmiarze r × n jestmożliwe jeśli k = r, tzn kiedy ilość kolumn (k) w pierwszej macierzy jest równailości wierszy (r) w drugiej macierzy. Definicja mnożenia macierzy (symbol * wMatlab -ie) jest następująca:

C = AB ⇐⇒ ci,j =r∑k=1ai,kbk,j

Każdy element i-tego wiersza pierwszej macierzy jest mnożony przez j-tą kolumnędrugiej macierzy. Suma wyników mnożeń zapisywana jest w macierzy wynikowejna pozycji (i, j).Własności mnożenia macierzy:

A(BC) = (AB)C, A(B + C) = AB + AC, ale na ogółAB 6= BA.

Page 47: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 47

Wydanie polecenia C=A*B w Matlab -ie spowoduje wykonanie następującegoalgorytmu:

Algorytm 3.1 Mnożenie macierzy.Wynik: C[m x n]Dane: A[m x r], B[r x n]C = zeros(m,n)for j = 1:mfor i = 1:nfor k = 1:rC(i,j) = A(i,k) * B(k,j) + C(i,j);endendend

Page 48: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 48

3.2. Potęgowanie i dzielenie macierzy

Operacja potęgowania (symbol ^ wMatlab -ie) to krótszy zapis mnożenia macie-rzy przez samą siebie, czyli A2 = AA, a A3 = (AA)A, gdzie A musi być macierząkwadratową.

Operacja odwrotna do mnożenia to dzielenie macierzy. Jeśli C = AB to podobniejak dla wielkości skalarnych z dzielenia prawostronnego (symbol /) otrzymamyA = C/B oraz przy dzieleniu lewostronnym (symbol \) B = A \ C. Wynikdzielenia macierzy może być nieokreślony.

Page 49: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 49

Ćwiczenie: Pomnóż i podziel macierze

Niech

A =

4 3 2−4 2 −20 −1 0−1 2 2

, w =1−23

, x =−324

.

Oblicz y = Aw i z = Ax. Następnie utwórz macierz B = [w, x] i wykonajmnożenie C = AB. Porównaj kolumny macierzy C z macierzami y i z.

Oblicz D = A \ C i porównaj z macierzą B. Podobnie sprawdź, czy E = C/Brówna się A?

Oblicz F = A \ A, oraz G = A/A. Zauważ, że F i G różnią się rozmiarami. Czywiesz jakie wartości będą miały elementy na przekątnej macierzy H = B/B?

Page 50: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 50

3.3. Transpozycja i sprzężenie macierzy

Dla dowolnej macierzy A o elementach aij istnieje macierz transponowana AT ,której kolumny są wierszami macierzy A. W Matlab -ie symbolem operatoratranspozycji są dwa znaki występujące jeden za drugim (bez spacji) .’

A =

a11 a12 . . . a1na21 a22 . . . a2n... ... ... ...am1 am2 . . . amn

→ AT =

a11 a21 . . . am1a12 a22 . . . am2... ... ... ...a1n a2n . . . amn

.

Operator sprzężenia ’ działa tak samo jak operator .’ na macierzach o elementachrzeczywistych, dlatego używany jest zamiennie. Jeśli elementami macierzy są liczbyzespolone to sprzężenie macierzy powoduje jej transpozycję i zamianę każdego zelementów na sprzężony.

Page 51: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 51

Przykład:

>> A=[1+2i 2 3 4; 5 6 7 8].’

A =1.0000 + 2.0000i 5.00002.0000 6.00003.0000 7.00004.0000 8.0000

element a11 = 1+2i jest liczbą zespoloną

>> A=[1+2i 2 3 4; 5 6 7 8]’

A =1.0000 - 2.0000i 5.00002.0000 6.00003.0000 7.00004.0000 8.0000

liczba sprzężona do 1 + 2i to 1− 2i

Page 52: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 52

3.4. Rząd macierzy

Rząd macierzy (z ang. rank) A o rozmiarze m× n to ilość wierszy lub kolumn li-niowo niezależnych (wykłady). WMatlab -ie istnieje polecenie rank, które liczyrząd macierzy (dalej oznaczany przez r). Podobnie jak wszystkie inne oblicze-nia numeryczne, obliczenie rzędu macierzy są obarczone błędami nieunikniony-mi. Rząd macierzy o rozmiarze m × n spełnia nierówność r ¬ min{m,n}. Jeślir = min{m,n} mówimy, że macierz ma rząd najwyższy.Przykład:

>> A=[1 0 1; 2 1 0; 3 1 1]A =

1 0 12 1 03 1 1

>> rank(A)ans =

2

ta macierz ma niepełny rząd ponieważ2 < min{3, 3}

Page 53: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 53

3.5. Wyznacznik macierzy

Dla każdej macierzy kwadratowej A o rozmiarze n × n istnieje liczba nazywanawyznacznikiem, którą oznaczamy symbolem det(A). Jeśli det(A) 6= 0, to macierznazywa się nieosobliwą. Jeśli, na przykład, rozmiar macierzy jest 2 × 2 to wy-znacznik

det(A) =∣∣∣∣∣∣ a11 a12a21 a22

∣∣∣∣∣∣ = a11a22 − a12a21.W ogólności definicję wyznacznika możemy zapisać poprzez minoryMij, które sąwyzacznikami macierzy o rozmiarze n − 1 × n − 1 utworzonymi przez zmazaniei-tego wiersza i j-tej kolumny

det(A) =n∑j=1(−1)i+jaijMij, gdzie i oznacza jeden z wierszy.

Wyznacznik w Matlab-ie obliczymy wydając polecenie det(A).

Page 54: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 54

3.6. Macierze specjalne

Ponieważ macierze mogą być dowolnymi tablicami dwuwymiarowymi o elemen-tach liczbowych to istnieją macierze specjalne mające określone własności. Znającwłasności tych macierzy można uprościć obliczenia. Matlabdostarcza zestawkomend do ich tworzenia.

Page 55: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 55

3.6.1. Macierz diagonalna (przekątniowa)

Macierz diagonalna ma elementy jedynie na głównej przekątnej

C = diag(c11, c22, . . . , cnn) =

c11 0 . . . 00 c22 . . . 0... ... ... ...0 0 . . . cnn

.

Jeżeli pomnożymy dowolną macierz przez macierz diagonalną to otrzymamy efektskalowania kolumn, a mnożąc w odwrotnej kolejności skalowania wierszy.

Page 56: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 56

Przykład:

>> x = [1 -5];>> A = diag(x)A =

1 00 -5

PolecenieMatlab -a diag służy do two-rzenia macierzy diagonalnej jeśli argu-mentem wejściowym jest macierz, którejjeden z wymiarów jest równy 1 (wektor).

>> B = [1 -5; 6 12];>> y = diag(B)y =

112

Polecenie diag zwraca elemnty z przekąt-nej, o ile argumentem jest macierz o wy-miarach różnych od 1.

>> C = ones(2,2};>> C*Aans =

1 -51 -5

Polecenie ones wypełnia macierz jedyn-kami. Dalej pokazany jest efekt sklowa-nia kolumn poprzez mnożenie z macierządiagonalna A. Mnożąc AC, otrzymamyefekt sklowania wierszy.

Page 57: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 57

Ćwiczenie: Macierze wielo-diagonalne.

Poleceni diag(x,k) ma dwa parametry. Pierwszy z nich x to macierz elemntówleżących na przekątnej, a drugi to numer przekątnej macierzy. Brak k oznacza do-myślnie 0. Numer 0 przypisany jest do głównej przekątnej, liczby ujemne wskazujana przekątne poniżej, a dodatnie powyżej głównej przekątnej. Wykonaj polecenie:

A = diag(2*ones(4,1)) - diag(ones(3,1),1) - diag(ones(3,1),-1)

B = tridiag(-1,2,-1) Tę samą macierz trójdiagonalną moż-na otrzymać poleceniem tridiags, któ-re znajdziesz w podkatalogu Matlab -a...\toolbox\mn\macierze\

Page 58: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 58

3.6.2. Macierz jednostkowa

Macierz jednostkowa to macierz diagonalna o elementach na głownej przekątnejrównych 1

I = diag(1, 1, . . . , 1) =

1 0 . . . 00 1 . . . 0... ... ... ...0 0 . . . 1

.

Jeżeli pomnożymy dowolną macierz przez macierz jednostkową to otrzymamy tęsamą macierz.

AI = I A = A

>> I = eye(n) Polecenie eye(n) tworzy macierz jed-nostkową o rozmiarze n× n.

>> I = eye(m,n) Polecenie eye(m,n) tworzy macierz po-dobną do jednostkej o rozmiarze m× n.

Page 59: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 59

3.6.3. Macierz permutacji

Jeżeli w macierzy jednostkowej przestawimy wiersze lub kolumny to otrzymamymacierz permutacji P , na przykład:

P =

0 1 00 0 11 0 0

.

Mnożąc dowolną macierz przez macierz pertmutacji otrzymamy taką samą macierzz tym, że wiersze tej macierzy (lub kolumny) ulegną przestawieniu w taki samsposób jak przestawione są wiersze (lub kolumny) w macierzy permutacji.

Page 60: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 60

Przykład:

>> A = [1 2 3 4; 5 6 7 8; 9 10 11 12];>> P = [1 0 0; 0 0 1; 0 1 0];

Macierz dowolna A i macierz permutacjiP

>> B = P*AB =

1 2 3 49 10 11 125 6 7 8

>> C = A’*PC =

1 9 52 10 63 11 74 12 8

Realizacja efeku przestawienia wierszy ikolumn przy uzyciu macierzy permutacji.

Page 61: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 61

3.6.4. Macierz trójkątna

Przez macierz trójkątną rozumiemy macierz postaci:

L =

l11 0 . . . 0l21 l22 . . . 0... ... ... ...ln1 ln2 . . . lnn

, lub R =

r11 r12 . . . r1n0 r22 . . . r2n... ... ... ...0 0 . . . rnn

.

Macierz L nazywamy macierzą trójkątną lewą (lub dolną), a macierz R - prawą(lub górną). Suma, iloczyn i odwrotność macierzy trójkątnej tego samego rodzajusą dalej macierzami trójkątnymi. Macierze trójkątne mają wiele innych ciekawychwłasności, które są wykorzystywane przy rozwiązywaniu układów równań.

Page 62: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 62

3.6.5. Macierz odwrotna

Macierz odwrotna do A onaczana jest przez A−1 i jest to macierz spełniającanastępujący warunek:

A−1A = AA−1 = I.

Macierz odwrotna jest związana z rozwiązywaniem układów rownań liniowych októrych będzie mowa na następnych zajęciach.

Polecenie Matlab -a inv(A) liczy macierz odwrotną A−1.

Page 63: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 63

3.6.6. Macierz symetryczna

Macierz symetryczna to taka macierz dla której spełniony jest następujący waru-nek:

A = AT .

Jej elemnty są symetryczne względem głównej przekątnej aij = aji.

Przykład:

>> B=[1 2; 3 4; 5 6]; Macierz B nie jest symetryczna.

>> B*B’ans =

5 11 1711 25 3917 39 61

>> B’*Bans =35 4444 56

Jednym ze sposobów generacji macierzysymetrycznej z dowolnej macierzy jestpomnożenie jej przez macierz transpono-waną.

Page 64: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 64

3.6.7. Macierz ortogonalna

Macierz ortogonalna Q to taka macierz dla której spełniony jest następujący wa-runek:

QT Q = I.

Page 65: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 65

4. Układy równań liniowych.Układ n równań liniowych o n niewiadomych x1, x2, x3, . . . , xn

n∑k=1ai,k xk = bi (i = 1, 2, . . . , n) lub AX = B

ma rozwiązanie wtedy i tylko wtedy, gdy macierz układu A i macierz rozszerzonaR = [A,B] mają ten sam rząd w przeciwnym przypadku są sprzeczne

A =

a11 a12 . . . a1na21 a22 . . . a2n... ... ... ...an1 an2 . . . ann

i R =

a11 a12 . . . a1n b1a21 a22 . . . a2n b2... ... ... ... ...an1 an2 . . . ann bn

.

Jeśli rząd macierzy układu rank(A) = n, to dla dowolnej macierzy B istniejerozwiązanie układu X i jest ono jednoznaczne.

Page 66: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 66

Przykład:Poszukajmy współczyników równania kwadratowego, które aproksymuje krzywąpompy.

0 0.5 1 1.575

80

85

90

95

100

105

110

115

120

q(m3/s) * 10−3

h(m

)

krzywa pompy

q(m3/s) h(m)1× 10−4 116.28× 10−4 106.414× 10−4 82.4

Model (h - wysokość pompowania, q - wydatek pompy):

h = c1q2 + c2q + c3,

gdzie c1, c2, c3 są szukanymi niewiadomymi.

Page 67: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 67

Podstawmy trzy wybrane punkty (q,h) (patrz rysunek) do modelu

116.2 = 1× 10−8 c1+ 1× 10−4 c2+ c3,106.4 = 64× 10−8 c1+ 8× 10−4 c2+ c3,82.4 = 196× 10−8 c1+ 14× 10−4 c2+ c3.

Po przepisaniu do formy macierzowej otrzymamy:

Ax = b

gdzie

A =

1× 10−8 1× 10−4 164× 10−8 8× 10−4 1196× 10−8 14× 10−4 1

, x =c1c2c3

, b =116.2106.482.4

.

Ćwiczenie:Zdefiniuj macierz A, b i wykonaj A−1 b poleceniem: >> x = inv(A)*b. Otrzy-masz c1 = −2 × 107, c2 = 4 × 103 c3 = 116. Wykonaj wykres funkcji h(q) wzakresie q = (0, 1.5× 10−3).

Page 68: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 68

4.1. Rozwiązanie formalne dla kwadratowej macierzy ukła-du.

Formalne rozwiązanie układu równań AX = B to

X = A−1B

gdzie rozmiar A jest n× n.

Nie rozwiązuj AX = B szukając A−1 i mnożąc przez B

Jeśli widzisz: X = A−1B, to szukaj: rozwiązania AX = B przez eliminacjeGaussa lub inny podobny algorytm.

Page 69: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 69

4.2. Eliminacja Gaussa.

Celem eliminacji Gaussa jest zamiana dowolnego układu równań (n× n) na rów-noważny układ, którego macierz jest trójkątna. Przyjrzyjmy się przykładom roz-wiązań dla układów o macierzy diagonalnej i trójkątnej. Do każdego przypadkuprezentowany jest przykładowy algorytm, który należy szczgółowo przeanalizować.

Page 70: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 70

4.2.1. Rozwiązanie układu diagonalnego

Przykład:

Układ zdefinowany przez

A =

1 0 00 3 00 0 5

, b =−16

−15

.

jest równoważny z

x1 = −13x2 = 65x3 = −15

→x1 = −1x2 = 6

3 = 2x3 = −15

5 = −3.

Page 71: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 71

Algorytm 4.1 Układ diagonalny.Wynik: x[n x 1]Dane: A[n x n], b[n x 1]for i = 1:nx(i) = b(i) / A(i,i)

end

W Matlab -ie:

>> A = ...>> b = ...>> x = b./diag(A)

A to macierz diagonalna. To jest jedy-ny przypadek, gdzie dzielenie elementuprzez element (./) jest wykorzystane dorozwiązywania układu równań.

Page 72: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 72

4.2.2. Rozwiązanie układu trójkątnego

Przykład:

Układ zdefinowany przez

A =

−2 1 20 3 −20 0 4

, b =9−18

.

jest równoważny z

−2x1 + x2 + 2x3 = 93x2 + −2x3 = −1

4x3 = 8→

x3 = 84 = 2

x2 = 13(−1 + 2x3) =

33 = 1

x1 = 1−2(9− x2 − 2x3) =

4−2 = −2

Page 73: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 73

Algorytm 4.2 Układ trójkątny górny. Proces rozwiązywania polega na za-stosowaniu metody podstawiania w odwrotnej kolejności poczynając od xn dox1.Wynik: x[n x 1]Dane: U[n x n], b[n x 1]x(n) = b(n) / U(n,n)for i = n-1:1s = b(i)for j = i+1:ns = s - U(i,j) * x(j)

endx(i) = s / U(i,i)

end

Page 74: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 74

Algorytm 4.3 Układ trójkątny dolny. Proces rozwiązywania polega na za-stosowaniu metody podstawiania w kolejności poczynając od x1 do xn.Wynik: x[n x 1]Dane: L[n x n], b[n x 1]x(1) = b(1) / L(1,1)for i = 2:ns = b(i)for j = 1:i-1s = s - L(i,j) * x(j)

endx(i) = s / L(i,i)

end

Page 75: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 75

4.2.3. Eliminacja Gaussa

Przykład:

Rozwiążemy układ o macierzy:

A =

−3 2 −16 −6 73 −4 4

, b =−1−7−6

.

W tym celu utworzymy macierz rozszerzoną

A = [Ab] =

−3 2 −1 −16 −6 7 −73 −4 4 −6

a następnie będziemy przekształcać wiersze macierzy A tak by otrzymać macierztrójkątną.

Page 76: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 76

Dodajmy 2 razy wiersz 1 do wierza 2, a następnie dodajmy 1 raz wiersz 1 do 3,by poniżej głownej przekątnej w kolumnie 1 otrzymac zera.

A(1) =

−3 2 −1 −10 −2 5 −90 −2 3 −7

Teraz zajmiemy się kolumną drugą. Należy odjąć od wiersza 3 wiersz 2.

A(2) =

−3 2 −1 −10 −2 5 −90 0 −2 2

→x3 = 2

−2 = −1x2 = 1

−2(−9− 5x3) = 2x1 = 1

−3(−1− 2x2 + x3) = 2

Page 77: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 77

Algorytm 4.4 Eliminacja Gaussa.Wynik: U[n x n]Dane: A[n x n]U=[A b]for i = 1:n-1for k = i+1:nfor j = i:n+1U(k,j) = U(k,j) - (U(k,i) / U(i,i)) * U(i,j)

endend

end

Page 78: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 78

4.2.4. Eliminacja Gaussa z wyszukiwaniem elementu głównego

Przykład:

Rozwiążemy inny układ o macierzy:

A =

2 4 −2 −21 2 4 −3−3 −3 8 −2−1 1 6 −3

, b =−4577

.

Podobnie jak poprzednio utworzymy macierz rozszerzoną2 4 −2 −2 −41 2 4 −3 5−3 −3 8 −2 7−1 1 6 −3 7

i tak jak poprzednio spróbujemy utworzyć macierz trójkątną.

Page 79: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 79

Odejmiemy 1/2 raza wiersz 1 od wiersza 2, dodamy 3/2 raza 1 do 3 i 1/2 razawiersz 1 do 4.

2 4 −2 −2 −40 0 5 −2 70 3 5 −5 10 3 5 −4 5

okazuje się że element (22) na głównej przekatnej (element główny) jest równyzero co uniemożliwia dalsze operacje. Dlatego musimy wykonać dodatkowe prze-stawienie wiersza 2 i 4

2 4 −2 −2 −40 3 5 −5 10 3 5 −4 50 0 5 −2 7

Page 80: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 80

Kontynuujemy eliminację: odejmujemy 1 raz wiersz 2 od 3. Ponownie na przekątnejpojawia się zero zatem przestawiamy wiersz 3 z 4.

2 4 −2 −2 −40 3 5 −4 50 0 0 −1 −40 0 5 −2 7

2 4 −2 −2 −40 3 5 −4 50 0 5 −2 70 0 0 −1 −4

Dalej już postępujemy tak jak poprzednio.

Page 81: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 81

Algorytm 4.5 Eliminacja Gaussa z wyszukiwaniem elementu głównego.Wynik: U[n x n]Dane: A[n x n]U=[A b]for i = 1:n-1for k=i:nposzukaj numer wiersza j gdzie max(|U(j,i)|)>=max(|U(k,i)|)przestaw wiersz U(j,:) z wierszem U(i,:)

endfor i = i+1:nfor j = i:n+1U(k,j) = U(k,j) - (U(k,i) / U(i,i)) * U(i,j)

endend

end

Page 82: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 82

4.2.5. Rozwiązanie układu z użyciem opratora dzielenia lewo-stronnego.

Dla równania skalarnego wiemy, że na przykład

5x = 20→ x = (5)−1 20 = 4

Analogicznie możemy zapisać dla układu równań

Ax = b→ x = A−1 b

gdzie A−1 b jest formalnym rozwiązaniem równań.

W notacji Matlab -a polecenie rozwiązania układu ma postać następującą

x = A\b

Page 83: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 83

4.3. Co robi operator dzielenia lewostronnego?

Dla zadanej macierzy A o rozmiarze n×n i wektora b operator \ wykonuje szeregtestów macierzy A. Matlabwybiera metodę rozwiązania układu tak by błędynumeryczne i ilość operacji były najmniejsze.

1. Sprawdza, czy macierz można przedstawić w postaci trójkątnej? Jeśli tak, toprzyjmuje metodę trójkątów.

2. Sprawdza, czy A jest symetryczna i dodatnia? Jeśli tak, to przyjmuje metodęCholeskiego.

3. Jeśli metoda Choleskiego zawiedzie lub jeśli macierz jest niesymetryczna, toMatlab stosuje metodę rozkładu macierzy A na dolną i górną LU .

Limity maszynowe:

• zapotrzebowanie na RAM ∼ n2,• czas obliczeń ∼ n3.

Page 84: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 84

5. Aproksymacja.Zajmiemy się szukaniem krzywej y = F (x), dla zadanej liczby punktów (xi, yi)dla i = 1, . . . ,m

F (x) = c1f1(x) + c2f2(x) + · · · + cnfn(x),

gdzie cj to nieznane współczynniki, a funkcje fj(x) nazywane są funkcjami bazo-wymi, gdzie j = 1, . . . , n.Aproksymację stosujemy wówczas, gdy ilość zadanych punktów m jest większaod ilości nieznanych współczynników n krzywej F (x). Zwykle nie można przepro-wadzić krzywej przez wszystkie zadane punkty. Szuka się wówczas ”najlepszej”krzywej, w sensie minimum kwadratu błędów.

Page 85: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 85

5.1. Aproksymacja linią prostą

Rozważmy najprostszy przypadek, kiedy f1(x) = x, f2(x) = 1, a pozostałe funkcjefj(x) = 0. Wówczas dla kolejnych punktów (xi, yi) mamy

c1x1 +c2 = y1c1x2 +c2 = y2... ...cnxm +c2 = ym

lub

x1 1x2 1... ...xm 1

c1c2

=

y1y2...ym

Zatem w postaci macierzowej zapiszemy Ac = y. Ponieważ równanie to dlam > nnie ma dokładnego rozwiązania możemy zapisać

r = y − Ac,

gdzie r jest wektorem pionowych odległości pomiędzy szukaną krzywą i zadanymipunktami. Będziemy szukali takiego rowiązania dla którego

m∑i=1r2i lub macierzowo rTr ma wartość minimalną.

Page 86: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 86

Ponieważ r = y − Ac, to iloczyn rTr możemy zapisać w następującej formie:

rTr = (y − Ac)T (y − Ac)= yTy − yTAc− cTATy + cTATAc= yTy − 2yTAc + cTATAc.

Iloczyn ten osiąga minimum jeśli

ddc(rTr) = 0 → −ATy + ATAc = 0,

co ostatecznie prowadzi do równaia

(ATA)c = ATy,

które nazywane jest równaniem aproksymacji.

Page 87: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 87

Przykład: Aproksymacja liniowa.Szukamy linii prostej aproksymującej punkty (1 1), (2 2), (4 2), (5 3).

>> x=[1 2 4 5]; y=[1 2 2 3];>> x=x’; y=y’;>> A=[x ones(size(x))];>> c=(A’*A)\(A’*y)c =0.40000.8000

Definiujemy wektory x i y ze współrzęd-nymi punktów. Ponieważ dalej potrzeb-ne są wektory kolumnowe, wykonujemytranspozycję. Następnie wypełniamy ma-cierz A, która w pierwszej kolumnie mawektor x, a w drugiej wektor jedynkowyo rozmiarze macierzy x. Macierz współ-czynników c liczymy wykorzystując rów-nanie aproksymacji i operator dzielenialewostronnego \.

>> ya=c(1)*x+c(2)>> plot(x,y,’o’,x,ya,’-’)>> grid on>> xlabel(’x’)>> ylabel(’y=F(x)’)

Znając współczynniki c1, c2 możemy ob-liczyc nowe aproksymowane wartości yai przedstawić wyniki graficznie.

Page 88: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 88

5.2. Aproksymacja

Można wykazać, że równanie aproksymacji

(ATA)c = ATy

jest prawdziwe dla dowolnej funkcji aproksymacji w postaci:

F (x) = c1f1(x) + c2f2(x) + · · · + cnfn(x),

gdzie cj to nieznane współczynniki, fj(x) to funkcje bazowe, a macierze A, c i ymają następującą postać:

A =

f1(x1) f2(x1) . . . fn(x1)f1(x2) f2(x2) . . . fn(x2)... ... ... ...

f1(xm) f2(xm) . . . fn(xm)

, c =

c1c2...cn

, =

y1y2...ym

.

Page 89: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 89

Przykład: AproksymacjaSzukamy funkcji w postaci

y =c1x+ c2x,

która aproksymuje następujące punkty:

x 0.955 1.380 1.854 2.093 2.674 3.006 3.255 3.940 4.060y 5.722 4.812 4.727 4.850 5.011 5.253 5.617 6.282 6.255

Znajdziesz je w pliku ...\mn\dane\aprox.dat.

>> load aprox.dat>> x=aprox(:,1)>> y=aprox(:,2)

Ładowanie danych z pliku i kopiowaniedanych do odpowiednich wektorów ko-lumnowych x, y.

Page 90: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 90

>> A=[1./x x];>> c=(A’*A)\(A’*y)c =4.25961.3008

>> xa=linspace(min(x),max(x),100);>> xa=xa’;>> Aa=[1./xa xa];>> ya=Aa*c;>> plot(x,y,’o’,xa,ya,’-’)>> xlabel(’x’)>> ylabel(’y=F(x)’)>> legend(’dane’,’aproksymacja’)

Przygotowanie macierzy A i rozwiąza-nia równania aproksymacji. Polecenielinspace generyje wektor wierszowy oelementach równoodleglych w zadanymzakresie. Zmienne z literą ”a” w nazwieodnoszą się do wartości aproksymowa-nych.

Page 91: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 91

5.3. Co jeszcze robi operator dzielenia lewostronnego?

Rozwiązanie równania macierzowego Ax = y, polega na wyborze właściwej meto-dy i jej zostosowaniu. Wiemy już, że dla zadanej macierzy A o rozmiarze n × ni wektora y, operator \ wykonuje szereg testów macierzy A. Matlabwybierametodę rozwiązania układu tak by błędy numeryczne i ilość operacji były naj-mniejsze.

Matlabdzięki wbudowanej wiedzy z algebry potrafi znacznie więcej.

x = A\y = (A’*A)\(A’*y)W przypadku kiedy macierz układu A ma rozmiar m × n, gdzie m > n au-tomatycznie zakłada, że użytkownik chce otrzymać aproksymację rozwiązania znajmniejszym błędem w sensie minimum kwadratu błędów. Zatem w Matlab -ie równanie aproksymacji jest wywoływane bez udziału użytkownika, wystaryczyużyć magicznego dzielenia lewostronnego.

Page 92: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 92

6. Interpolacja.

daneaproksymacjainterpolacja

Interpolacja polega (podobnie jak aproksyma-cja) na poszukiwaniu funkcji pomiędzy znany-mi punktami. W przeciwieństwie do aproksy-macji funkcja ta

• przechodzi przez te punkty.Jeżeli poszukujemy funkcji poza zakresem za-danych punktów to mówimy o ekstrapolacji.

Page 93: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 93

Wybrane metody interpolacji.

0 0.5 1 1.5−20

0

20

40

60

80

100

120

Najblizszy sasiad

0 0.5 1 1.5−20

0

20

40

60

80

100

120

Kawalkami liniowo

0 0.5 1 1.5−20

0

20

40

60

80

100

120

Kawalkami kwadratowo

0 0.5 1 1.5−20

0

20

40

60

80

100

120

Splajny kwadratowo

Page 94: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 94

Ćwiczenie: Interpolacja wielomianem.

Pn−1(x) = c1xn−1 + c2xn−2 + · · · + cn−1x + cn>> rok=[1986 1988 1990 1992 1994 1996];>> cena=[3.13 3.32 3.38 3.41 3.37 3.44];>> plot(rok,cena,’o’)>> A=vander(rok);% funkcja MATLABA [x^n x^n-1 .. 1], n wym. x>> cena=cena’; % macierz prawych stron układu>> c=A\cena % otrzymasz ostrzeżenie - złe skalowanie>> xnowe=linspace(min(rok),max(rok),100);>> ynowe=polyval(c,xnowe);>> plot(rok,cena,’o’,xnowe,ynowe,’-’)

>> rokumowny=rok-mean(rok) % poprawienie skalowania macierzy A

Wykonaj ponownie wszystkie obliczenia dla zmiennej niezależnej (przesuniętej)rokumowny. Na kartce ”Zadania do zaliczenia (5)” w polu ”Zadanie 2” wpiszobliczone ci. W katalogu ...\toolbox\mn\interpolacja znajdziesz pomocnąfunkcję Idemo_02.

Page 95: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 95

Ćwiczenie: Interpolacja wielomianem Lagrange-a.

Pn−1(x) = y1L1(x) + y2L2(x) + · · ·+ ynLn(x), gdzie Lj(x) =n∏

k=1,k 6=j

x− xkxj − xk

W katalogu ...\toolbox\mn\interpolacja znajdziesz funkcję ILagrange.Korzystając z tej funkcji, oblicz cenę benzyny w 1991 roku dla danych z poprzed-niego przykładu.

Ćwiczenie: Interpolacja wielomianem Newton-a.

Pn−1(x) = c1+c2(x−x1)+c3(x−x1)(c−x2)+· · ·+cn(x−x1)(x−x2) · · · (x−xn)

W katalogu ...\toolbox\mn\interpolacja znajdziesz funkcję INewton. Ko-rzystając z tej funkcji, oblicz cenę benzyny w 1993 roku.

Funkcje Idemo_03 i Idemo_04 demonstrują wykorzystanie funkcji: ILagrange,INewton.Uwaga! Nie trzeba rozwiązywać układu równań. Jest to zaleta tych metod.

Page 96: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 96

Porównanie interpolacji:

100

101

102

103

102

103

104

105

liczba interpolowanych punktów

Flop

s

wielomianLagrangeNewton

Page 97: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 97

Ćwiczenie: Zbadaj wpływ stopnia wielomianu użytego do interpolacji na jejjakość. Skorzystaj z funkcji Idemo_05. Wniosk wpisz na kartce ”Zadania do zali-czenia (5)” w polu ”Zadanie 3”

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

0 2 4 6 8 10−5

0

5

Page 98: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 98

6.1. Interpolacja wielomianami sklejanymi.

Interpolacja wielomianami sklejanymi to praktyczne rozwiązanie koniecznościzwiększania stopnia wielomianu. Zamiast stosować jeden wielomian dla wszystkichdanych punktów, metoda sklejania polega na użyciu wielu wielomianów niskiegostopnia Pi(x) dla przedziału danych xi ¬ x ¬ xi+1. Punkty łączenia wielomia-nów będziemy nazywali węzłami. W węzłach możemy żądać spełnienia określonychwarunków np. na ciągłość pochodnych.

Page 99: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 99

Interpolacja wielomianami sklejanymi.

xi x

i+1

funkcja interpolacyjnawezlydane punkty

Pi

Pi+1

Pi+2

Page 100: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 100

6.2. Interpolacja kawałkami liniowa.

0 1 2 3 4 5 6 7−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

plot

(x,s

in(x

))

x

x=linespace(0,2*pi,100)x=linespace(0,2*pi,6)

Page 101: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 101

Ćwiczenie: Znajdź dla danych VT.dat temperaturę złącza dla napięcia 0.8mV,oraz napięcie na złączu dla temperatury 37 stopni. Wykorzystaj funkcję ILiniowa.

>>>> load(’VT.dat’)>> V=VT(:,1);>> T=VT(:,2);

Ładowanie danych z pliku ”VT.dat” dozmiennej VT, a następnie przepisanie da-nych z odpowiedniej kolumny macierzyVT do V (napięcie) i T (temperatura).Wynik wpisz w polu ”Zadania 4”.

>> Tszukane=ILiniowa(V,T,0.8) Wywołanie funkcji ILiniowa dla przy-padku kiedy T = f(V ).

Page 102: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 102

6.3. Interpolacja kawałkami sześcienna - Hermite.

Pi(x) = ai + bi(x− xi) + ci(x− xi)2 + di(x− xi)3,

gdzie ai, bi, ci, di są szukanymi współczynnikami przy następujących warunkach wwęzłach:

• ciągłość Pi−1(xi) = Pi(xi),• znane wartości pierwszej pochodnej i jej ciągłość P ′i−1(xi) = P ′i (xi).Ćwiczenie: Skorzystaj z funkcji IHermite i Idemo_06 by określić jakość inter-polacji od ilości węzłów dla funkcji y = xe−x. W polu ”Zadania 5” wpisz wielkośćbłędu dla 6 i 10 węzłów.

Page 103: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 103

6.4. Interpolacja kawałkami sześcienna - splajny.

Metod splajnów jest zbliżona do interpolacji Hermite’a. Nie wymaga ona znajo-mości pochodnych we wszystkich punktach węzłowych. Natomiast wymaga dodat-kowo:

• ciągłości drugiej pochodnej P ′′i−1(xi) = P ′′i (xi),• znanej wartości pierwszej pochodnej (nachylenia) na końcach P ′1(x1) i P ′n(xn):– Ustalone nachylenie: P ′1(x1) = stała1 i P

′n(xn) = stała2,

– Nachylenie naturalne: P ′′1 (x1) = P′′n (xn) = 0,

– Nachylenie nieznane: P ′′′1 (x2) = P′′′2 (x2) i P

′′′1 (x2) = P

′′′2 (x2).

Ćwiczenie: Zbadaj przy pomocy funkcji Idemo_07 i Idemo_08 zależność wa-runku na końcach na jakość aproksymacji. Sprawdź wniosek dla różnych ilościwęzłów. Wnioski zapisz w polu ”Zadania 6”.

Page 104: [PL] Matlab - Metody numeryczne

•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 104

6.5. Funkcje interpolacyjne Matlab -a.

Funkcja Matlab -a interp1 wykonuje interpolację jedną z metod:

• nearest - najbliższego sąsiada, polegającą na użyciu funkcji stałych,• linear - kawałkami liniowa, przy użyciu wielomianu rzędu jeden,• cubic - kawałkami sześcienna, przy użyciu wielomianów rzędu trzy, takichże pierwsza pochodna jest ciągła,

• spline - splajnów (to samo co funkcja spline).Może być wywołana następująco:Ynowe=interp1(Xdane,Ydane,Xnowe)Ynowe=interp1(Xdane,Ydane,Xnowe,’metoda’).

Oznaczenia:

Ydane - wektor rzędnych funkcji w zadanych punktach,

Xdane - wektor odciętych zadanych punktów,

Xnowe - wektor odciętych dla których szukamy wartości funkcji.