Professional Documents
Culture Documents
Matlab 6.1
wersja 2.3
Kwiecień 2002
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 1
Spis treści
1 Matlab - podstawy 6
1.1 Wiadomości ogólne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Praca z Matlab -em . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Wyrażenia w Matlab -ie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.1 Zmienne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.2 Liczby. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3.3 Operatory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.4 Funkcje. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 Pliki skryptowe i funkcjne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5 Rysunki w Matlab -ie - polecenia plot i subplot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.6 Pliki danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.6.1 Polecenie save. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.6.2 Polecenie load. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.7 Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2 Nieuniknione błędy. 38
2.1 Miary błędów. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.2 Reprezentacja binarna liczby rzeczywistej. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.3 Zamieniamy całkowitą potęgę do układu binarnego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.4 Zamieniamy rzeczywistą mantysę do układu binarnego . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.5 Liczby użyteczne i nieużyteczne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5 Aproksymacja. 84
5.1 Aproksymacja linią prostą . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.2 Aproksymacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.3 Co jeszcze robi operator dzielenia lewostronnego? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6 Interpolacja. 92
6.1 Interpolacja wielomianami sklejanymi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.2 Interpolacja kawałkami liniowa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.3 Interpolacja kawałkami sześcienna - Hermite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.4 Interpolacja kawałkami sześcienna - splajny. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5 Funkcje interpolacyjne Matlab -a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 3
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 4
Wstęp
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 5
1. Matlab - podstawy
1.1. Wiadomości ogólne.
Matlab umoż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órej
elementami mogą być liczby rzeczywiste lub zespolone.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 6
1.2. Praca z Matlab -em
Praca z Matlab -em przypomina pracę w typowym systemie operacyjnym (DOS,
UNIX) i polega na wydawaniu poleceń, które po zatwierdzeniu są wykonywane
przez interpreter.
• polecenie może być jedno, bądź jest to ciąg poleceń oddzielonych przecinkiem
lub średnikiem.
• pliki, które są używane w pakiecie Matlab mają rozszerzenie *.m
• w Matlab -ie są rozróżnialne małe i duże litery!
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 7
Podstawowe polecenia Matlab -a:
Enter wykonanaj polecenie
↑ ponowne wyświetlenie polecenia na ekranie
help pomoc na dowolny temat
help nazwa tematu pomoc na określony temat
exit zakończenie pracy z Matlab -em (lub quit)
demo pokaz przykładowych zastosowań Matlab -a
Polecenia DOS-a:
dir wyświetlenie zawartości aktualnego katalogu
type nazwa pliku wyświetlenie zawartości pliku
!notepad wywołanie ”Notatnika” (lub innego programu)
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 8
W Matlab -ie podstawowym poleceniem jest instrukcja przypisania:
zmienna = wartość
zmienna = wyrażenie
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 9
1.3. Wyrażenia w Matlab -ie.
Matlab udostępnia użytkownikowi polecenia - komendy, które w odróżnieniu od
innych języków programowania związane są z macierzami. Polecenia wykonują
operacje na:
• zmiennych,
• liczbach,
• operatorach,
• funkcjach.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 10
1.3.1. Zmienne.
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ść nazwy
zmiennej wynosi 31 znaków. Przy wyborze nazw zmiennych należy pamiętać o
tym, że Matlab rozróżnia małe i duże litery.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 11
1.3.2. Liczby.
Matlab uż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ęć. W
przypadku liczb zespolonych używa się zarówno literę i, jak j przy części urojonej
liczby zespolonej. Przykłady liczb w programie Matlab :
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 12
Polecenie format kontroluje format liczb wyświetlanych przez program MATLAB.
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
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 13
1.3.3. Operatory.
Operatory arytmetyczne (macierzowe i tablicowe)
Symbol operacji Znaczenie Symbol operacji Priorytet
macierzowej 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
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 14
Operatory logczne
Symbol 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.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 15
1.3.4. Funkcje.
Matlab udostępnia użytkownikowi szereg standardowych elementarnych funk-
cji obejmujących m.in. abs, sqrt, exp i sin. Większość tych funkcji akceptuje
zespolone argumenty.
Niektóre funkcje takie, jak sqrt i sin, są wbudowane w program, dzięki czemu
są 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ć je
modyfikacjom.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 16
Matlab udostępnia również szereg funkcji specjalnych generujących pomocne
stałe:
pi 3.14159265358979 √
i liczba urojona −1
j liczba urojona (to samo znaczenie co i)
eps odległość od 1.0 do następnej liczby
realmin najmniejsza dodatnia liczba
realmax największa ujemna liczba
Inf nieskończoność (∞)
NaN nie jest to liczba (z ang. not a number)
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 17
Przykład:
>> a=10/0 Ostrzeżenie: Dzielenie przez zero.
Warning: Divide by zero.
a =
Inf
>>b=0/0
Warning: Divide by zero.
b =
NaN
>>c=Inf-Inf
c =
NaN
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 18
Przykład: Wyrażenia z wykorzystaniem wbudowanych funkcji.
√
>>rho = (1+sqrt(5))/2 funkcje sqrt() - ·, abs() - |·|, . . .
rho =
1.6180
>>a = abs(3+4i)
a =
5
>>duzo = exp(log(realmax))
duzo =
1.7977e+308
>>zbytduzo = pi*duzo
zbytduzo =
Inf
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 19
Ćwiczenie: Wypełnij macierze. Sprawdź rezutalt poleceniem whos.
>> a=1.234; polecenie size zwraca wymiar macierzy,
>> size(a) zmienna a to macierz o wymiare 1x1
>> clear a polecenie usunięcia zmiennej a z pamięci
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 20
Ćwiczenie: Wykonaj polecenia - spróbuj przewidzieć wynik. Sprawdź rezutalt
poleceniem whos.
>> a=[1,0,0,0,0,1] zapamiętaj rolę przecinka - oddziela on
koleje pola macierzy
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 21
Ćwiczenie: Wykonaj polecenia - spróbuj przewidzieć wynik. Sprawdź rezutalt
poleceniem whos.
>> t=[4 24 9] zauważ, że elementami macierzy mogą
>> q=[t 0 t] być macierze
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 22
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 zmiennych
lokalnych i globalnych. Komunikują się z przestrzenią roboczą poprzez parametry
i zmienne globalne (polecenie global).
Pliki-M funkcyjne rozpoczynają się od słowa kluczowego function o następującej
składni:
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 23
Ć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);
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 24
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) y - wektor wrtości na osi pionowej, na osi
plot(x,y) poziomej będą kolejne liczby natu-
plot(x,y,s) ralne
0.8
0.6
0.4
0.2
−0.2
−0.4
−0.6
−0.8
−1
−4 −3 −2 −1 0 1 2 3 4
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 26
Polecenie subplot dzieli okno graficzne na mniejsze prostokątne pola.
subplot(m,n,p) m,n - ilość pól pionowo i poziomo
subplot(mnp) 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))
1
0.5
−0.5
−1
−5 0 5
0.5
−0.5
−1
−5 −4 −3 −2 −1 0 1 2 3 4 5
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 27
Polecenia dodatkowe do opisu rysunku:
polecenie opis przykład
title 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 siatki
axis skalowanie i wygląd osi axis off, axis on
Inne polecenia związane z rysunkiem:
hold nowy rysunek nie usunie istniejącego
print wydruk lub zapis rysunku do pliku
clf wyczyszczenie okna graficznego
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 28
Przykład: Rysunek 3-D.
>> [x,y] = meshgrid(-2:.2:2, -2:.2:2);
>> z = x .* exp(-x.^2 - y.^2);
>> mesh(z)
0.5
−0.5
50
40 50
30 40
20 30
20
10
10
0 0
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 29
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ć do
programu dzięki poleceniu load.
save ’nazwa pliku’ - nazwa pliku do które-
save ’nazwa pliku’ go zapisżą się dane (domyślnie ’ma-
save ’nazwa pliku’ ’lista zmiennych’ tlab.mat’),
’lista zmiennych’ - lista zmiennych do
zapisania (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
>> whos
Name Size Bytes Class
A 2x2 32 double array
Grand total is 4 elements using 32 bytes
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 32
Przykład:
>> B=A’
B =
1 4 7
2 5 8
3 6 9
>> clear A
>> whos
Name Size Bytes Class
B 3x3 72 double array
Grand total is 9 elements using 72 bytes
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 33
Przykład:
>> save zmienne A B
>> clear
>> load zmienne B
>> who
Your variables are:
B
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 34
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 rozdzielonych
spacjami. W pliku tym linia zawiera jeden wiersz macierzy. Każdy z wierszy po-
siada równą liczbę elementów.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 35
Ćwiczenie: Utwórz plik tekstowy magik.dat zawierający następujące cztery
linie:
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 36
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.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 37
2. Nieuniknione błędy.
Przykład:
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 39
2.2. Reprezentacja binarna liczby rzeczywistej.
• Każdą liczbę można zamienić do następującej postaci, nazywanej znormalizo-
waną notacją naukową:
3
123.456 → 0.123456
| {z } ×10
mantysa
64 bity
z }| {
bm |bm bm · · · · · {z· · · · b b b
|{z}
m m m
} bp b| p bp · ·{z· bp bp bp}
|{z}
znak 52 bity znak 10 bitów
| {z }| {z }
mantysa potęga
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 40
2.3. Zamieniamy całkowitą potęgę do układu binarnego
1
pk = p0 − bpk 2k−1 = pk−1 − bpk 2k−1 ,
X
gdzie p0 = potęga
k=10
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 41
2.4. Zamieniamy rzeczywistą mantysę do układu binarnego
k k
m 1 m 1
52
mk = m0 − = mk−1 − bk
X
bk , gdzie m0 = mantysa
k=1 2 2
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 42
Ćwiczenie:
1. Rozpakuj plik mn.zip w katalogu: ...\toolbox\
2. Ustaw bieżący katalog (okno Current Directory) na:
...\toolbox\mn\bledy.
3. Makra Matlab -a mają rozszerzenie *.m. Sprawdź, czy widoczne jest makro
man2bin.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 jak
nazwa 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 oknie
poleceń (Command Window).
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 43
2.5. Liczby użyteczne i nieużyteczne.
>> relmax Sprawdź wartości tych zmiennych. Da-
lej ich wartości będziemy oznaczać odpo-
>> relmin wiednio: Rmax i Rmin .
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 44
3. Macierze i operacje na nich, techniki
przetwarzania macierzy.
Macierz A 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 w
której znajduje się element. Liczby m × n nazywane są rozmiarem macierzy.
a11 a12 . . . a1n
a21 a22 . . . a2n
A=
.. .. .. ..
. . . .
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ę nimi
bliżej.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 45
3.1. Mnożenie macierzy
Mnożenie macierzy A o rozmiarze m × k przez macierz B o rozmiarze r × n jest
możliwe jeśli k = r, tzn kiedy ilość kolumn (k) w pierwszej macierzy jest równa
ilości wierszy (r) w drugiej macierzy. Definicja mnożenia macierzy (symbol * w
Matlab -ie) jest następująca:
r
C = AB ⇐⇒ ci,j =
X
ai,k bk,j
k=1
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 wynikowej
na pozycji (i, j).
Własności mnożenia macierzy:
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 46
Wydanie polecenia C=A*B w Matlab -ie spowoduje wykonanie następującego
algorytmu:
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:m
for i = 1:n
for k = 1:r
C(i,j) = A(i,k) * B(k,j) + C(i,j);
end
end
end
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 47
3.2. Potęgowanie i dzielenie macierzy
Operacja potęgowania (symbol ^ w Matlab -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ą.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 48
Ćwiczenie: Pomnóż i podziel macierze
Niech
4 3 2
−3
1
−4 2 −2
A= , w = −2 , x = 2 .
0 −1 0
3 4
−1 2 2
Oblicz y = Aw i z = Ax. Następnie utwórz macierz B = [w, x] i wykonaj
mnożenie C = AB. Porównaj kolumny macierzy C z macierzami y i z.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 49
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 operatora
transpozycji są dwa znaki występujące jeden za drugim (bez spacji) .’
a11 a12 . . . a1n a11 a21 . . . am1
a21 a22 . . . a2n a12 a22 . . . am2
AT =
A=
.. .. .. ..
→
... ... ... ... .
. . . .
am1 am2 . . . amn a1n a2n . . . amn
Operator sprzężenia ’ działa tak samo jak operator .’ na macierzach o elementach
rzeczywistych, dlatego używany jest zamiennie. Jeśli elementami macierzy są liczby
zespolone to sprzężenie macierzy powoduje jej transpozycję i zamianę każdego z
elementów na sprzężony.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 50
Przykład:
A =
1.0000 + 2.0000i 5.0000
2.0000 6.0000
3.0000 7.0000
4.0000 8.0000
A =
1.0000 - 2.0000i 5.0000
2.0000 6.0000
3.0000 7.0000
4.0000 8.0000
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 51
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). W Matlab -ie istnieje polecenie rank, które liczy
rzą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śli
r = min{m, n} mówimy, że macierz ma rząd najwyższy.
Przykład:
>> A=[1 0 1; 2 1 0; 3 1 1] ta macierz ma niepełny rząd ponieważ
A = 2 < min{3, 3}
1 0 1
2 1 0
3 1 1
>> rank(A)
ans =
2
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 52
3.5. Wyznacznik macierzy
Dla każdej macierzy kwadratowej A o rozmiarze n × n istnieje liczba nazywana
wyznacznikiem, którą oznaczamy symbolem det(A). Jeśli det(A) 6= 0, to macierz
nazywa się nieosobliwą. Jeśli, na przykład, rozmiar macierzy jest 2 × 2 to wy-
znacznik
a11 a12
11 22 − a12 a21 .
det(A) = = a a
a21 a22
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 53
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ąc
własności tych macierzy można uprościć obliczenia. Matlab dostarcza zestaw
komend do ich tworzenia.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 54
3.6.1. Macierz diagonalna (przekątniowa)
Macierz diagonalna ma elementy jedynie na głównej przekątnej
c11 0 . . . 0
0 c22 . . . 0
C = diag(c11 , c22 , . . . , cnn ) =
... ... ... ... .
0 0 . . . cnn
Jeżeli pomnożymy dowolną macierz przez macierz diagonalną to otrzymamy efekt
skalowania kolumn, a mnożąc w odwrotnej kolejności skalowania wierszy.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 55
Przykład:
>> x = [1 -5]; Polecenie Matlab -a diag służy do two-
>> A = diag(x) rzenia macierzy diagonalnej jeśli argu-
A = mentem wejściowym jest macierz, której
jeden z wymiarów jest równy 1 (wektor).
1 0
0 -5
>> B = [1 -5; 6 12]; Polecenie diag zwraca elemnty z przekąt-
>> y = diag(B) nej, o ile argumentem jest macierz o wy-
y = miarach różnych od 1.
1
12
>> C = ones(2,2}; Polecenie ones wypełnia macierz jedyn-
>> C*A kami. Dalej pokazany jest efekt sklowa-
ans = nia kolumn poprzez mnożenie z macierzą
diagonalna A. Mnożąc AC, otrzymamy
1 -5 efekt sklowania wierszy.
1 -5
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 56
Ćwiczenie: Macierze wielo-diagonalne.
Poleceni diag(x,k) ma dwa parametry. Pierwszy z nich x to macierz elemntów
leżą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 wskazuja
na 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\
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 57
3.6.2. Macierz jednostkowa
Macierz jednostkowa to macierz diagonalna o elementach na głownej przekątnej
równych 1
1 0 . . . 0
0 1 ... 0
I = diag(1, 1, . . . , 1) = .. .. .. .. .
. . . .
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.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 58
3.6.3. Macierz permutacji
Jeżeli w macierzy jednostkowej przestawimy wiersze lub kolumny to otrzymamy
macierz permutacji P , na przykład:
0 1 0
P = 0 0 1 .
1 0 0
Mnożąc dowolną macierz przez macierz pertmutacji otrzymamy taką samą macierz
z tym, że wiersze tej macierzy (lub kolumny) ulegną przestawieniu w taki sam
sposób jak przestawione są wiersze (lub kolumny) w macierzy permutacji.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 59
Przykład:
>> C = A’*P
C =
1 9 5
2 10 6
3 11 7
4 12 8
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 60
3.6.4. Macierz trójkątna
Przez macierz trójkątną rozumiemy macierz postaci:
l11 0 . . . 0 r11 r12 . . . r1n
l21 l22 . . . 0 0 r22 . . . r2n
L=
.. .. .. .. , lub R =
... ... ... ... .
. . . .
ln1 ln2 . . . lnn 0 0 . . . rnn
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 61
3.6.5. Macierz odwrotna
Macierz odwrotna do A onaczana jest przez A−1 i jest to macierz spełniająca
następujący warunek:
A−1 A = A A−1 = I.
Macierz odwrotna jest związana z rozwiązywaniem układów rownań liniowych o
których będzie mowa na następnych zajęciach.
Polecenie Matlab -a inv(A) liczy macierz odwrotną A−1 .
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 62
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.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 64
4. Układy równań liniowych.
Układ n równań liniowych o n niewiadomych x1 , x2 , x3 , . . . , xn
n
X
ai,k xk = bi (i = 1, 2, . . . , n) lub AX = B
k=1
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 65
Przykład:
Poszukajmy współczyników równania kwadratowego, które aproksymuje krzywą
pompy.
krzywa pompy
120
115
110
105
100
h(m)
95
90
85
h = c1 q 2 + c2 q + c3 ,
Ax = b
gdzie
1 × 10−8 1 × 10−4 1
c1 116.2
64 × 10−8 8 × 10−4 1 ,
A=
x=
c2 , b=
106.4 .
196 × 10−8 14 × 10−4 1
c3 82.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) w
zakresie q = (0, 1.5 × 10−3 ).
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 67
4.1. Rozwiązanie formalne dla kwadratowej macierzy ukła-
du.
Formalne rozwiązanie układu równań A X = B to
X = A−1 B
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 68
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 przypadku
prezentowany jest przykładowy algorytm, który należy szczgółowo przeanalizować.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 69
4.2.1. Rozwiązanie układu diagonalnego
Przykład:
Układ zdefinowany przez
−1
1 0 0
A = 0 3 0 , b = 6 .
0 0 5 −15
jest równoważny z
x1 = −1 x1 = −1
3x2 = 6 → x2 = 36 = 2
5x3 = −15 x3 = −15
5 = −3.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 70
Algorytm 4.1 Układ diagonalny.
Wynik: x[n x 1]
Dane: A[n x n], b[n x 1]
for i = 1:n
x(i) = b(i) / A(i,i)
end
W Matlab -ie:
>> A = ... A to macierz diagonalna. To jest jedy-
>> b = ... ny przypadek, gdzie dzielenie elementu
>> x = b./diag(A) przez element (./) jest wykorzystane do
rozwiązywania układu równań.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 71
4.2.2. Rozwiązanie układu trójkątnego
Przykład:
Układ zdefinowany przez
−2 1 2
9
A = 0 3 −2 , b = −1 .
0 0 4 8
jest równoważny z
8
−2x1 + x2 + 2x3 = 9 x3 = 4 =2
1
3x2 + −2x3 = −1 → x2 = 3 (−1 + 2x3 ) = 33 = 1
1 4
4x3 = 8 x1 = −2 (9 − x2 − 2x3 ) = −2 = −2
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 72
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 do
x1 .
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:1
s = b(i)
for j = i+1:n
s = s - U(i,j) * x(j)
end
x(i) = s / U(i,i)
end
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 73
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:n
s = b(i)
for j = 1:i-1
s = s - L(i,j) * x(j)
end
x(i) = s / L(i,i)
end
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 74
4.2.3. Eliminacja Gaussa
Przykład:
Rozwiążemy układ o macierzy:
−3 2 −1 −1
A=
6 −6 7 , b=
−7 .
3 −4 4 −6
W tym celu utworzymy macierz rozszerzoną
−3 2 −1 −1
à = [Ab] = 6 −6 7 −7
3 −4 4 −6
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 75
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.
−3 2 −1 −1
Ã(1) = 0 −2 5 −9
0 −2 3 −7
Teraz zajmiemy się kolumną drugą. Należy odjąć od wiersza 3 wiersz 2.
2
−3 2 −1 −1 x3 = −2 = −1
1
Ã(2) = 0 −2 5 −9 → x2 = −2 (−9 − 5x3 ) = 2
1
0 0 −2 2 x1 = −3 (−1 − 2x2 + x3 ) = 2
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 76
Algorytm 4.4 Eliminacja Gaussa.
Wynik: U[n x n]
Dane: A[n x n]
U=[A b]
for i = 1:n-1
for k = i+1:n
for j = i:n+1
U(k,j) = U(k,j) - (U(k,i) / U(i,i)) * U(i,j)
end
end
end
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 77
4.2.4. Eliminacja Gaussa z wyszukiwaniem elementu głównego
Przykład:
Rozwiążemy inny układ o macierzy:
2 4 −2 −2 −4
1 2 4 −3
5
A= , b= .
−3 −3 8 −2
7
−1 1 6 −3 7
Podobnie jak poprzednio utworzymy macierz rozszerzoną
2 4 −2 −2 −4
1 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ą.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 78
Odejmiemy 1/2 raza wiersz 1 od wiersza 2, dodamy 3/2 raza 1 do 3 i 1/2 raza
wiersz 1 do 4.
4 −2 −2 −4
2
0
0 5 −2 7
0
3 5 −5 1
0 3 5 −4 5
okazuje się że element (22) na głównej przekatnej (element główny) jest równy
zero co uniemożliwia dalsze operacje. Dlatego musimy wykonać dodatkowe prze-
stawienie wiersza 2 i 4
−2 −2 −4
2 4
0 3
5 −5 1
0 3
5 −4 5
0 0 5 −2 7
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 79
Kontynuujemy eliminację: odejmujemy 1 raz wiersz 2 od 3. Ponownie na przekątnej
pojawia się zero zatem przestawiamy wiersz 3 z 4.
4 −2 −2 −4 4 −2 −2 −4
2
2
0 3 5 −4 5
0 3 5 −4 5
→
0 0 0 −1 −4
0 0 5 −2 7
0 0 5 −2 7 0 0 0 −1 −4
Dalej już postępujemy tak jak poprzednio.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 80
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-1
for k=i:n
poszukaj numer wiersza j gdzie max(|U(j,i)|)>=max(|U(k,i)|)
przestaw wiersz U(j,:) z wierszem U(i,:)
end
for i = i+1:n
for j = i:n+1
U(k,j) = U(k,j) - (U(k,i) / U(i,i)) * U(i,j)
end
end
end
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 81
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
Ax = b → x = A−1 b
x = A\b
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 82
4.3. Co robi operator dzielenia lewostronnego?
Dla zadanej macierzy A o rozmiarze n × n i wektora b operator \ wykonuje szereg
testów macierzy A. Matlab wybiera metodę rozwiązania układu tak by błędy
numeryczne i ilość operacji były najmniejsze.
1. Sprawdza, czy macierz można przedstawić w postaci trójkątnej? Jeśli tak, to
przyjmuje 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, to
Matlab stosuje metodę rozkładu macierzy A na dolną i górną LU .
Limity maszynowe:
• zapotrzebowanie na RAM ∼ n2,
• czas obliczeń ∼ n3.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 83
5. Aproksymacja.
Zajmiemy się szukaniem krzywej y = F (x), dla zadanej liczby punktów (xi , yi )
dla i = 1, . . . , m
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 84
5.1. Aproksymacja linią prostą
Rozważmy najprostszy przypadek, kiedy f1 (x) = x, f2 (x) = 1, a pozostałe funkcje
fj (x) = 0. Wówczas dla kolejnych punktów (xi , yi ) mamy
c1 x1 +c2 = y1 x1 1 y1
c1 x2 +c2 = y2 x2 1 c1 y2
.. .. lub
... ...
=
..
c2
. .
.
cn xm +c2 = ym xm 1 ym
Zatem w postaci macierzowej zapiszemy Ac = y. Ponieważ równanie to dla m > n
nie ma dokładnego rozwiązania możemy zapisać
r = y − Ac,
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 85
Ponieważ r = y − Ac, to iloczyn rT r możemy zapisać w następującej formie:
rT r = (y − Ac)T (y − Ac)
= y T y − y T Ac − cT AT y + cT AT Ac
= y T y − 2y T Ac + cT AT Ac.
Iloczyn ten osiąga minimum jeśli
d T
(r r) = 0 → −AT y + AT Ac = 0,
dc
co ostatecznie prowadzi do równaia
(AT A)c = AT y,
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 86
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]; Definiujemy wektory x i y ze współrzęd-
>> x=x’; y=y’; nymi punktów. Ponieważ dalej potrzeb-
>> A=[x ones(size(x))]; ne są wektory kolumnowe, wykonujemy
transpozycję. Następnie wypełniamy ma-
>> c=(A’*A)\(A’*y) cierz A, która w pierwszej kolumnie ma
c = wektor x, a w drugiej wektor jedynkowy
o rozmiarze macierzy x. Macierz współ-
0.4000 czynników c liczymy wykorzystując rów-
0.8000 nanie aproksymacji i operator dzielenia
lewostronnego \.
>> xlabel(’x’)
>> ylabel(’y=F(x)’)
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 87
5.2. Aproksymacja
Można wykazać, że równanie aproksymacji
(AT A)c = AT y
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 88
Przykład: Aproksymacja
Szukamy funkcji w postaci
c1
y=
+ c2 x,
x
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.060
y 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 Ładowanie danych z pliku i kopiowanie
>> x=aprox(:,1) danych do odpowiednich wektorów ko-
>> y=aprox(:,2) lumnowych x, y.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 89
>> A=[1./x x]; Przygotowanie macierzy A i rozwiąza-
>> c=(A’*A)\(A’*y) nia równania aproksymacji. Polecenie
c = linspace generyje wektor wierszowy o
elementach równoodleglych w zadanym
4.2596 zakresie. Zmienne z literą ”a” w nazwie
1.3008 odnoszą się do wartości aproksymowa-
nych.
>> 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’)
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 90
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 × n
i wektora y, operator \ wykonuje szereg testów macierzy A. Matlab wybiera
metodę rozwiązania układu tak by błędy numeryczne i ilość operacji były naj-
mniejsze.
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 z
najmniejszym błędem w sensie minimum kwadratu błędów. Zatem w Matlab -
ie równanie aproksymacji jest wywoływane bez udziału użytkownika, wystaryczy
użyć magicznego dzielenia lewostronnego.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 91
6. Interpolacja.
Interpolacja polega (podobnie jak aproksyma-
dane
cja) na poszukiwaniu funkcji pomiędzy znany-
aproksymacja
interpolacja 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.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 92
Wybrane metody interpolacji.
120 120
80 80
60 60
40 40
20 20
0 0
−20 −20
0 0.5 1 1.5 0 0.5 1 1.5
120 120
80 80
60 60
40 40
20 20
0 0
−20 −20
0 0.5 1 1.5 0 0.5 1 1.5
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 93
Ćwiczenie: Interpolacja wielomianem.
Pn−1 (x) = c1 +c2 (x−x1 )+c3 (x−x1 )(c−x2 )+· · ·+cn (x−x1 )(x−x2 ) · · · (x−xn )
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 95
Porównanie interpolacji:
5
10
4
10
wielomian
Lagrange
Newton
Flops
3
10
2
10
0 1 2 3
10 10 10 10
liczba interpolowanych punktów
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 96
Ćwiczenie: Zbadaj wpływ stopnia wielomianu użytego do interpolacji na jej
jakość. Skorzystaj z funkcji Idemo_05. Wniosk wpisz na kartce ”Zadania do zali-
czenia (5)” w polu ”Zadanie 3”
5 5
0 0
−5 −5
0 2 4 6 8 10 0 2 4 6 8 10
5 5
0 0
−5 −5
0 2 4 6 8 10 0 2 4 6 8 10
5 5
0 0
−5 −5
0 2 4 6 8 10 0 2 4 6 8 10
5 5
0 0
−5 −5
0 2 4 6 8 10 0 2 4 6 8 10
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 97
6.1. Interpolacja wielomianami sklejanymi.
Interpolacja wielomianami sklejanymi to praktyczne rozwiązanie konieczności
zwiększania stopnia wielomianu. Zamiast stosować jeden wielomian dla wszystkich
danych punktów, metoda sklejania polega na użyciu wielu wielomianów niskiego
stopnia 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ślonych
warunków np. na ciągłość pochodnych.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 98
Interpolacja wielomianami sklejanymi.
Pi+1
P
i
x x
i i+1
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 99
6.2. Interpolacja kawałkami liniowa.
1
x=linespace(0,2*pi,100)
0.8 x=linespace(0,2*pi,6)
0.6
0.4
0.2
plot(x,sin(x))
−0.2
−0.4
−0.6
−0.8
−1
0 1 2 3 4 5 6 7
x
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 100
Ć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.
>> Ładowanie danych z pliku ”VT.dat” do
>> load(’VT.dat’) zmiennej VT, a następnie przepisanie da-
>> V=VT(:,1); nych z odpowiedniej kolumny macierzy
VT do V (napięcie) i T (temperatura).
>> T=VT(:,2); Wynik wpisz w polu ”Zadania 4”.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 101
6.3. Interpolacja kawałkami sześcienna - Hermite.
Pi (x) = ai + bi (x − xi ) + ci (x − xi )2 + di (x − xi )3 ,
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 102
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:
00
• ciągłości drugiej pochodnej Pi−1 (xi ) = Pi00 (xi ),
• znanej wartości pierwszej pochodnej (nachylenia) na końcach P10 (x1) i Pn0 (xn):
– Ustalone nachylenie: P10 (x1 ) = stała1 i Pn0 (xn ) = stała2,
– Nachylenie naturalne: P100 (x1 ) = Pn00 (xn ) = 0,
– Nachylenie nieznane: P1000 (x2 ) = P2000 (x2 ) i P1000 (x2 ) = P2000 (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ści
węzłów. Wnioski zapisz w polu ”Zadania 6”.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 103
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.
•Pierwsza •Poprzednia •Następna •Ostatnia •Wróć •Cały ekran •Zamknij •Wyjdź •Strona: 104