Pakiety Matematyczne

Transkrypt

Pakiety Matematyczne
Pakiety matematyczne
Matematyka Stosowana
dr inż. Krzysztof Burnecki
3.04.2013
Wykład 7
 Algebra liniowa
Slajdy powstały na podstawie prezentacji „Informatyka” otrzymanej od
dr hab. Małgorzaty Kotulskiej
Algebra liniowa. Identyczna ilość równań
i zmiennych
Algebra liniowa. Identyczna ilość równań
i zmiennych
 Algebra liniowa stosuje wiele różnych metod do rozwiązania
układu równań liniowych np. eliminacji Gaussa, faktoryzacji LU,
faktoryzacji Cholesky’ego, Cramera i in.
 Matlab automatycznie stosuje metodę najbardziej optymalną dla
podanej macierzy, wprowadzając operację dzielenia lewostronnego
\
 Aby być pewnym, że otrzymane rozwiązanie będzie bliskie
rzeczywistości można najpierw obliczyć funkcję warunku cond(A).
Jeżeli w wyniku nie otrzymamy liczby bardzo dużej (najlepiej jeżeli
jest bliska 1), to macierz A-1 ma dobre własności numeryczne i
Matlab potrafi dobrze rozwiązać równanie A*XX=b. Inną metodą
(mniej polecaną) niż dzielenie lewostronne jest obliczenie macierzy
odwrotnej A-1= inv(A).
Algebra liniowa. Funkcja „cond”
>> A = [5 7 4; 8 2 -3; 1 1 -1]
A=
5 7 4
8 2 -3
1 1 -1
>> cond(A)
ans =
12.8583
Algebra liniowa. Metoda dzielenia
lewostronnego
Sprawdzenie:
>> A = [5 7 4; 8 2 -3; 1 1 -1];
>> b = [3 2 1]';
>> XX = A\b
XX =
-0.0625
0.6875
-0.3750
>> wyn = A*XX
wyn=3
2
1
Algebra liniowa. Metoda macierzy
odwrotnej
(metoda wolniejsza)
XX = A-1*b
>>XX = inv(A)*b
XX= -0.0625
0.6875
-0.3750
Algebra liniowa. Metoda macierzy
pseudoodwrotnej – funkcja „pinv”
 Metoda kosztowna, stosowana jedynie wówczas, gdy nie można
wyznaczyć macierzy odwrotnej. Na ogół w sytuacjach, o których
będzie mowa poniżej.
>> XX = pinv(A)*b
Metoda Cramera
>> A = [5 7 4; 8 2 -3; 1 1 -1]
>> b = [3 2 1]'
>> AX = [b,A(:,2),A(:,3)]
AX =
3 7 4
2 2 -3
1 1 -1
>> AY = [A(:,1),b,A(:,3)]
>> AZ = [A(:,1),A(:,2),b]
Metoda Cramera
>> wyznacznikA = det(A)
wyznacznikA =
64
>> wyznacznikAX = det(AX)
wyznacznikAX =
-4
>> wyznacznikAY = det(AY)
wyznacznikAY =
44
>> wyznacznikAZ = det(AZ)
wyznacznikAZ =
-24
Metoda Cramera
>> X = wyznacznikAX / wyznacznikA
X=
-0.0625
>> Y = wyznacznikAY / wyznacznikA
Y=
0.6875
>> Z = wyznacznikAZ / wyznacznikA
Z=
-0.3750
Metody rozwiązywania układów równań
liniowych o nadmiernej ilości równań
 W takiej sytuacji nie ma jednoznacznego rozwiązania.
Potrzeba rozwiązania takiego problemu pojawia się
wówczas, gdy ilość danych pomiarowych jest większa niż
ilość niewiadomych. Wszystkie dane są obarczone błędami
(pomiarowymi) i brak podstaw do wskazania, które z nich
należy odrzucić.
 Przykładowo mierzymy zależność y(x). Wiemy, ze jest ona
liniowa, ale nie znamy jej równania. Na podstawie
wielokrotnych pomiarów chcemy wyznaczyć równanie
prostej obarczonej błędem w minimalnym stopniu. Mamy
więcej zmiennych niż potrzeba.
Metody rozwiązywania układów równań
liniowych o nadmiernej ilości równań
 Rozwiązanie można uzyskać dwoma metodami:
I. Dzielenie lewostronne (metoda najmniejszych
kwadratów)
II. Za pomocą macierzy pseudoodwrotnej
(metoda Moore’a – Penrose’a)
I. Dzielenie lewostronne
(metoda najmniejszych kwadratów)
Poszukuje się rozwiązania średniokwadratowego, dla którego
||A*X-b|| jest minimalna. Jest to rozwiązanie metodą
najmniejszych kwadratów.
(Zakładamy, że A*X=b)
>> X = A\b
Przykład
>> A = [1 2 3; 4 5 6; 7 8 0; 2 5 8]
>> b = [366, 804,351,514]'
% Zakładamy, że b=A*X. Mamy 4 równania i 3 niewiadome
>> X = A\b
x= 247.98
-173.11
114.93
>> e = A*X-b % Obliczamy błąd
e= -119.4545
11.9455
0.0000
35.8364
>> norm(e)
II. Za pomocą macierzy pseudoodwrotnej
(metoda Moore’a – Penrose’a)
W metodzie tej wykorzystywana jest funkcja pinv (ang.
pseudoinverse).
>> X = pinv(A)
Obliczona w ten sposób macierz X (pseudoodwrotna do X)
spełnia następujące warunki:
1. A*X*A = A
2. X*A*X = X
3. A*X oraz X*A są macierzami hermitowskimi (B jest
hermitowska, jeżeli B = B* i B* oznacza macierz sprzężoną)
Przykład
Rozwiązanie:
>> p = pinv(A)
>> X = p*b
Przykładowe zadanie
 Wielkość y jest funkcją liniową x. Nie znamy równania tej
funkcji. Aby je wyznaczyć wykonujemy serię pomiarów (x,y),
obarczonych przypadkowym błędem pomiarowym, aby na tej
podstawie wyznaczyć równanie prostej y=a*x+c.
 Uzyskujemy układ n równań:
y1=a*x1+c
y2=a*x2+c
…….
yn=a*xn+c
 W tym układzie równań nieznane są wartości a, c.
Rozwiązanie
 Układ równań można zapisać macierzowo jako:
Rozwiązanie, cd.
function [a1,c1,a2,c2] = nadokr(x,y)
%Wyznaczanie prostej na podstawie nadokreślonego układu
%równań (np. wyznaczenie prostej z wielu punktów
%pomiarowych)
% obliczamy współczynniki dla prostej
A = [x',ones(length(x),1)];
b = y';
% metoda dzielenia lewostronnego
Q = A\b;
a1 = Q(1); c1 = Q(2);
% metoda macierzy pseudoodwrotnej
Q = pinv(A)*b;
a2 = Q(1); c2 = Q(2);
Przykład. Zaburzamy prostą szumem
Gaussa
>> x = [1:0.1:7];
>> y = x + randn(1,length(x));
>> [a1,c1,a2,c2] = nadokr(x,y)
>> plot(x,y, '*',x,a1*x+c1,'--r',x,a2*x+c2,':g')
>> figure; plot(x,y-a1*x-c1, '*')
Dopasowywanie krzywej wielomianem
(ang. fit). Funkcja „polyfit”
 Metoda najmniejszych kwadratów.
 Wybieramy stopień wielomianu n. Jeżeli n = 1 regresja
liniowa.
polyfit
P = polyfit(x,y,n)
P – współczynniki wielomianu od najwyższej potęgi
n - stopień wielomianu
Przykład
>> x = [0:0.1:1];
>> y = [-.0447, 1.978, 3.28, 6.16, 7.08, 7.34, 7.66, 9.56, 9.48, 9.3,...
11.2];
>> n = 2;
>> p = polyfit(x,y,n)
p=
-9.1075 19.2431
0.2018
Czyli:
y(x) = -9.1075 x2 +19.2431 x+ 0.2018
Obliczanie wartości wielomianu o
współczynnikach p. Funkcja „polyval”
>> xi = x;
>> yi = polyval(p,xi);
>> plot(x,y, '*',xi,yi,':')