podstawowe struktury danych tablice,...
Post on 24-Jun-2020
10 Views
Preview:
TRANSCRIPT
Podstawowe
struktury danych
Tablice, macierze
LABORKA © Piotr Ciskowski
przykład 1. zabawy z macierzami
• wygeneruj macierze Pascala różnych rozmiarów,wydedukuj z nich zasadę tworzenia
» pascal ( 5 )
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• zsumuj jej elementy w kolumnach
» sum ( A )
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• stransponuj ją
» A’
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• oblicz sumę elementów w kolumnach tej macierzy stransponowanej
» sum ( ans )
» sum ( A’ )
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• oblicz sumę elementów w kolumnach tej macierzy stransponowaneji umieść ja w kolumnie
» sum(A’)’
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• wyciągnij z macierzy A główną przekątną i umieść ją w kolumnie
» diag ( A )
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• oblicz sumę elementów na głównej przekątnej
» sum ( diag ( A ) )
» trace ( A )
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• oblicz sumę elementów w czwartej kolumnie macierzy A
» A(1,4) + A(2,4) + A(3,4) + A(4,4)
» sum ( A(:,4) )
przykład 1. zabawy z macierzami
• utwórz macierz z obrazu Dürera
» A = [ 16 3 2 13 ; 5 10 11 8 ;
9 6 7 12 ; 4 15 14 1 ]
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• wygeneruj ciąg liczb od 1 do 16
» 1 : 16
• zsumuj wszystkie elementy macierzy A i podziel przez 4
» sum ( A ( 1:16 ) ) / 4
» sum ( A ( : ) ) / 4
» sum ( sum ( A ) ) / 4
przykład 1. zabawy z macierzami
• utwórz macierz magiczną o wymiarze 4 x 4
» B = magic ( 4 )
B = 16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
• przypomnij sobie macierz A
» A
A = 16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
przykład 1. zabawy z macierzami
• w macierzy B zamień miejscami kolumny 2 i 3
» B = B ( : , [ 1 3 2 4 ] )
przykład 1. zabawy z macierzami
• w macierzy B zamień miejscami kolumny 2 i 3
» B = B ( : , [ 1 3 2 4 ] )
B = 16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
• jeszcze raz zamień miejscami kolumny 2 i 3
» B = B ( : , [ 1 3 2 4 ] )
B = 16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
przykład 1. zabawy z macierzami
• sprawdź, które elementy macierzy A i B są sobie równe
» A = = B
• sprawdź, czy macierze A i B są sobie równe
» all ( A = = B )
» all ( all ( A = = B ) )
przykład 1. zabawy z macierzami
• sprawdź, które elementy macierzy A i B są sobie równe
» A = = B
ans =
1 0 0 1
1 0 0 1
1 0 0 1
1 0 0 1
• sprawdź, czy którekolwiek elementy macierzy A i Bsą sobie równe
» any ( A = = B )
» any ( any ( A = = B ) )
przykład 1. zabawy z macierzami
• sprawdź, które elementy macierzy A i B są sobie równe
» A = = B
ans =
1 0 0 1
1 0 0 1
1 0 0 1
1 0 0 1
• sprawdź, czy którekolwiek elementy macierzy A i Bsą różne
» any ( A ~ = B )
» any ( any ( A ~ = B ) )
przykład 1. zabawy z macierzami
• sprawdź, które elementy macierzy A i B są sobie równe
» A = = B
ans =
1 0 0 1
1 0 0 1
1 0 0 1
1 0 0 1
• sprawdź, czy wszystkie elementy macierzy A i Bsą od siebie różne
» all ( all ( A ~ = B ) )
przykład 1. zabawy z macierzami
• oblicz wyznaczniki obu macierzy
» det(A)
» det(B)
• oblicz odwrotności obu macierzy
» inv(A)
» inv(B)
» A^(-1)
» B^(-1)
przykład 2. macierze rzadkie
• macierze o dużej liczbie zer
• MATLAB pamięta tylko elementy niezerowe i ich pozycje
• szybkie obliczenia
• ryzyko błędów np. cos(0) = 1
• gęstość / wypełnienie macierzy rzadkiej– stosunek elementów niezerowych do wszystkich
przykład 2. macierze rzadkie
• wygeneruj zwykłą macierz jednostkową o wymiarach 10×10
» A = eye ( 10 )
• sprawdź, ile ma elementów niezerowych
» nnz ( A )
• spytaj, czy jest rzadka
» issparse ( A )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz jednostkową o wymiarach 10×10
» Asp = speye ( 10 )
» Asp = sparse ( A )
• spytaj, czy jest rzadka
» issparse ( Asp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 5×5 i wypełnieniu 0.5
» Bsp = sprandn ( 5 , 5 , 0.5 )
• oblicz jej gęstość
» nnz ( Bsp ) / 25
• zamień ją na macierz normalną (pełną)
» B = full ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 5×5 i wypełnieniu 0.8
» Bsp = sprandn ( 5 , 5 , 0.8 )
• odwróć ją
» Bodwr = Bsp ^ ( -1 )
• i zobacz, ile ma elementów
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 50×50 i wypełnieniu 0.3
» Bsp = sprandn ( 50 , 50 , 0.3 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 50×50 i wypełnieniu 0.5
» Bsp = sprandn ( 50 , 50 , 0.5 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 50×50 i wypełnieniu 0.8
» Bsp = sprandn ( 50 , 50 , 0.8 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 50×50 i wypełnieniu 0.95
» Bsp = sprandn ( 50 , 50 , 0.95 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 500×500 i wypełnieniu 0.3
» Bsp = sprandn ( 500 , 500 , 0.3 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 500×500 i wypełnieniu 0.1
» Bsp = sprandn ( 500 , 500 , 0.1 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 500×500 i wypełnieniu 0.05
» Bsp = sprandn ( 500 , 500 , 0.05 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 500×500 i wypełnieniu 0.01
» Bsp = sprandn ( 500 , 500 , 0.01 ) ;
• i obejrzyj ją
» spy ( Bsp )
przykład 2. macierze rzadkie
• wygeneruj rzadką macierz liczb losowych z rozkładu normalnegoo wymiarach 5×5 i wypełnieniu 0.5
» Bsp = sprandn ( 5 , 5 , 0.5 )
• i sprawdź, czy rzeczywiście MATLAB pomyli się przy cos(0)
» Csp = cos ( Bsp )
• obejrzyj sobie macierz w normalnym widoku
» C = full ( Csp )
przykład 3. odwracanie macierzy
• wygeneruj zwykłą macierz liczb losowycho wymiarach 100×100
» D = rand ( 100 ) ;
• obejrzyj ją na obrazku
» imagesc ( D )
» colormap ( hot ) % w semestrze zimowym
» colormap ( cool ) % w semestrze letnim
» axis square
przykład 3. odwracanie macierzy
• odwróć ją
» E = inv ( D )
• i wynik obejrzyj na obrazku(w nowym okienku)
» figure
» imagesc ( E )
» colormap ( hot ) % w semestrze zimowym
» colormap ( cool ) % w semestrze letnim
» axis square
przykład 3. odwracanie macierzy
• pomnóż obie macierze
» F = D * E ;
• i wynik obejrzyj na obrazku(w nowym okienku)
» figure
» imagesc ( F )
» colormap ( hot ) % w semestrze zimowym
» colormap ( cool ) % w semestrze letnim
» axis square
przykład 3. odwracanie macierzy
• pomnóż obie macierze
» F = D * E ;
• i znów obejrzyj na obrazku(w nowym okienku)
» figure
» imagesc ( F )
» colormap ( hot ) % w semestrze zimowym
» colormap ( cool ) % w semestrze letnim
» axis square
• Funkcję ex można przedstawić w postaci szeregu:
• Napisz funkcję, która oblicza sumę tego szeregu dla podanej wartości x:
– metodą nieefektywną – obliczając każdy wyraz osobnoi korzystając z zewnętrznej funkcji do obliczania silni
– lepszą metodą - obliczając każdy wyraz na podstawie poprzedniego
• Niech funkcja kończy obliczenia dla wyrazu, dla któregogdzie ε jest z góry zadaną dokładnością
• Oblicz e-5.5 z dokładnością 10-10
• Porównaj wyniki z wynikami wbudowanej funkcji exp(x)
• Oblicz 1000 razy e-5.5 z dokładnością 10-10
i porównaj czas obliczeń nieefektywnych, efektywnych oraz wbudowanej funkcji exp
• Narysuj wykres błędu oszacowania – różnicy między obu funkcjami
• function [ y ] = expszer ( x , eps )
zadanie 1. obliczanie wartości liczby e
1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
!
ix
iε<
• function [ y ] = expszer1 ( x , eps )
y = ...
i = ...
yi = ...
y = ...
while ...
i = ...
yi = x^i / silnia(i) ;
y = ...
end
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• function [ y ] = silnia ( x )
y = 1 ;
for i = 1 : x ,
y = y * i ;
end
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• skrypt exptest1:
clc
disp ( 'Obliczanie funkcji exp z szeregu ' ) ;
disp ( '-------------------------------- ' ) ;
x = input ( 'Podaj x: ' ) ;
eps = input ( 'Podaj dokładność obliczeń: ' ) ;
format short , shortWynik = [ expszer1(x,eps) ; exp(x) ]
format long , longWynik = [ expszer1(x,eps) ; exp(x) ]
format long e, longeWynik = [ expszer1(x,eps) ; exp(x) ]
format long g, longgWynik = [ expszer1(x,eps) ; exp(x) ]
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
» exptest1
Obliczanie funkcji exp z szeregu
--------------------------------
Podaj x: 1
Podaj dokładność obliczeń: 0.001
shortWynik = 2.7183
2.7183
longWynik = 2.718253968253968
2.718281828459046
longeWynik = 2.718253968253968e+000
2.718281828459046e+000
longgWynik = 2.71825396825397
2.71828182845905
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• function [ y ] = expszer2 ( x , eps )
y = ...
i = ...
yi = ...
y = ...
while ...
i = ...
yi = yi * x / i ;
y = ...
end
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• skrypt exptest2:
clc
disp ( 'Obliczanie funkcji exp z szeregu ' ) ;
disp ( '-------------------------------- ' ) ;
x = input ( 'Podaj x: ' ) ;
eps = input ( 'Podaj dokładność obliczeń: ' ) ;
format short , shortWynik = [ expszer2(x,eps) ; exp(x) ]
format long , longWynik = [ expszer2(x,eps) ; exp(x) ]
format long e, longeWynik = [ expszer2(x,eps) ; exp(x) ]
format long g, longgWynik = [ expszer2(x,eps) ; exp(x) ]
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
» exptest2
Obliczanie funkcji exp z szeregu
--------------------------------
Podaj x: 1
Podaj dokładność obliczeń: 0.001
shortWynik = 2.7183
2.7183
longWynik = 2.718253968253968
2.718281828459046
longeWynik = 2.718253968253968e+000
2.718281828459046e+000
longgWynik = 2.71825396825397
2.71828182845905
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
» exptest2
Obliczanie funkcji exp z szeregu
--------------------------------
Podaj x: -5.5
Podaj dokładność obliczeń: 0.0000000001
shortWynik = 0.0041
0.0041
longWynik = 0.004086771447736
0.004086771438464
longeWynik = 4.086771447736385e-003
4.086771438464067e-003
longgWynik = 0.00408677144773638
0.00408677143846407
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• function [ y , i ] = expszer3 ( x , eps )
% ta funkcja robi dokładnie to samo, co expser2,
% tylko w wyniku podaje również liczbę kroków,
% po których funkcja zakończyła szereg
...
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• skrypt exptest3:
clc
disp ( 'Obliczanie funkcji exp z szeregu - wykresy ' ) ;
disp ( '------------------------------------------ ' ) ;
x = input ( 'Podaj x: ' ) ;
liczbaKrokow = zeros(21,1) ;
y = zeros(21,1) ;
i = 1 ;
for eps = logspace(0,-20,21) ,
[ y(i,1) , liczbaKrokow(i,1) ] = expszer3(x,eps) ;
i = i + 1 ;
end
eps = logspace(0,-20,21)' ;
porownanie = [ 0 , 0 , exp(x) , 0 ; % wart. funkcji exp
eps , liczbaKrokow , y , y - exp(x)*ones(21,1) ]
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
» exptest3
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• skrypt exptest4:
clc
disp ( 'Obliczanie funkcji exp z szeregu - czas ' ) ;
disp ( '--------------------------------------- ' ) ;
x = input ( 'Podaj x : ' ) ;
eps = input ( 'Podaj eps: ' ) ;
n = input ( 'Podaj n : ' ) ;
expSzer1pocz = clock ; % metoda nieefektywna
for i = 1 : n ,
y = expszer1(x,eps);
end
expSzer1kon = clock ;
expSzer1czas = etime ( expSzer1kon , expSzer1pocz ) ;
expSzer2pocz = ... % metoda efektywna
expPocz = ... % funkcja wbudowana
czasy = [ expSzer1czas ; expSzer2czas ; expCzas ]
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
» exptest4
zadanie 1. obliczanie wartości liczby1 2 3
11! 2! 3! !
ix x x x x
ei
= + + + + + +L L
• Należy obliczyć wartość wielomianu dla pewnej wartości argumentu
• Wn(z) można obliczyć wprost ze wzoru – wtedy liczba działań wynosi: … mnożeń i … dodawań
• Jeśli wielomian przedstawimy w takiej postaci:
to będziemy mogli wykorzystać schemat Hornera:
do wykonania którego potrzeba … mnożeń i … dodawań
zadanie 2. obliczanie wartości wielomianu - schemat Hornera
( ) 1
0 1 1
n n
n n nW x a x a x a x a
−
−= + + + +L
x z=
( ) ( )( )( )( )( )0 1 3 1n x n nW x a x a x a x a a x a
−= + + + + +L
( )
0 0
1 0 1
2 1 2
1i i i
n n
b a
b b z a
b b z a
b b z a
W z b
−
=
= +
= +
= +
=
K
K
•
•
•
zadanie 2. obliczanie wartości wielomianu - schemat Hornera
( ) 1
0 1 1
n n
n n nW x a x a x a x a
−
−= + + + +L
( ) ( )( )( )( )( )0 1 3 1n x n nW x a x a x a x a a x a
−= + + + + +L
( )
0 0
1 0 1
2 1 2
1i i i
n n
b a
b b z a
b b z a
b b z a
W z b
−
=
= +
= +
= +
=
K
K
a0 a1 a2 … an-1an-1 an
b0z b1z bn-2z bn-1z
+ + + +
b1b0=a0 b2
…
… bn-1 bn
⋅ z
bn=Wn(z)
•
•
• Napisz funkcję, która dla wielomianu stopnia no podanych współczynnikach [ a1, a2, a3, …, an ]oraz danej wartości x=z obliczawartość wielomianu Wn(z)
• function [ W ] = horner ( a , z )
zadanie 2. obliczanie wartości wielomianu - schemat Hornera
( ) ( )( )( )( )( )0 1 3 1n x n nW x a x a x a x a a x a
−= + + + + +L
( )
0 0
1 0 1
2 1 2
1i i i
n n
b a
b b z a
b b z a
b b z a
W z b
−
=
= +
= +
= +
=
K
K
WE n, a1, …, an,z
P
K
NIE
b0:=a0
i:=1
TAKi:=i+1
WY W
bi:=bi-1z+ai
i = n
W:=bn
zadanie 3. liczby pierwsze
• Liczba pierwsza to taka liczba naturalna, która nie dzieli się przez żadną inna liczbęoprócz siebie i jedności. Liczby złożone (nie będące pierwszymi) dają się przedstawić jako iloczyn liczb pierwszych. Liczby pierwsze wykorzystuje się w kryptografii
• Jednym z prostszych i chyba najpopularniejszym algorytmem generowania liczb pierwszychjest sito Erastotenesa – eliminuje liczby podzielne przez jakąkolwiek liczbę oprócz badanej
• Algorytm zapisany kiedyś w pseudojęzyku (dla języka Pascal)zapisz jako funkcję w MATLABie
• Znajdź inne algorytmy generowania liczb pierwszych,ew. sprawdzania, czy dana liczba jest liczbą pierwszą
zadanie 3. liczby pierwsze
Początek
Czytaj(M);
Pisz(2);
i:=3;
dzielnik:=2;
Dopóki i<M wykonuj
Początek
Powtarzaj
Dopóki (i mod dzielnik=0) wykonuj
Początek
i:=i+1;
dzielnik:=2
Koniec;
dzielnik:=dzielnik+1
aż do dzielnik≥i div 2;
Jeśli i<=M to Pisz(i);
i:=i+1;
dzielnik:=2
Koniec
Koniec
WE M
P
K
i:=3
dzielnik:=2
dzielnik:=dzielnik+1
WY 2
TAKNIE
TAKNIE
i:=i+1
dzielnik:=2
NIETAK
TAKNIE
WY i
i:=i+1
dzielnik:=2
i < M
i mod dzielnik = 0
dzielnik div 2 = 0
i ≤ M
zadanie 4. ułamki proste
• Ułamek właściwy można przedstawić jako sumę ułamków prostych, np.Licznik ułamka prostego jest równy 1.
• Poniższy algorytm polega na tworzeniu kolejnych mianowników ułamków prostych Ti
przez poszukiwanie takich liczb i, dla których
Pierwsza liczba i spełniająca tę nierówność zapamiętywana jest w tablicy T,po czym następuje modyfikacja wielkości Licznik i Mianownik.Proces jest kontynuowany dopóty, dopóki wartość Licznik jest różna od 0
• Schemat działań zaprogramuj w postaci funkcji MATLABa,przyjmującej dwa parametry – num i den – licznik i mianownik pierwotnego ułamka właściwego,a zwracającej tablicę dens – mianowników kolejnych ułamków prostych
5 1 1 1
11 3 9 99= + +
10
Licznik
Mianownik i− >
zadanie 4. ułamki proste
WE Licznik,
Mianownik
P
K
Licznik:=Licznik⋅i-Mianownik
Mianownik:=Mianownik⋅i
Tj:=i
NIE TAK
i:=i+1
NIETAK
WY Tn
n:=n+1
j:=0
j:=j+1
i:=2
TAKNIE
n:=1
1/i > Licznik/Mianownik
Licznik = 0
n = j
przykład 4. przekształcenia macierzy
• operacje elementarne na macierzy:
• pomnożenie wiersza/kolumny macierzy przez liczbę różną od zera
• zamiana wiersza/kolumny
• dodanie do wiersza/kolumny innego wiersza/kolumny pomnożonego przez liczbę
• nie zmieniają rzędu
• mogą zmienić wyznacznik
przykład 4. przekształcenia macierzy
• pomnożenie i-tego wiersza macierzy A przez liczbę k różną od zeraodpowiada lewostronnemu pomnożeniu tej macierzyprzez macierz „jednostkową” z i-tym elementem diagonalnym równym k
• zdefiniuj macierz A
» A = [ 1 2 3 4 ;
5 6 7 8 ;
9 10 11 12 ]
• pomnóż jej drugi wiersz przez 2
» P = [ 1 0 0;
0 2 0 ;
0 0 1 ]
» B = P * A
3 3 3 4 3 4P A B
× × ×⋅ =
przykład 4. przekształcenia macierzy
• pomnożenie j-tej kolumny macierzy A przez liczbę k różną od zeraodpowiada prawostronnemu pomnożeniu tej macierzyprzez macierz „jednostkową” z j-tym elementem diagonalnym równym k
• zdefiniuj macierz A
» A = [ 1 2 3 4 ;
5 6 7 8 ;
9 10 11 12 ]
• pomnóż jej trzecią kolumnę przez 3
» P = [ 1 0 0 0 ;
0 1 0 0 ;
0 0 3 0 ;
0 0 0 1 ] ;
» A
» B = A * P
3 4 4 4 3 4A P B
× × ×⋅ =
przykład 4. przekształcenia macierzy
• zamiana i-tego wiersza z j-tym odpowiada lewostronnemu pomnożeniu macierzy Aprzez następującą macierz przekształcenia
• wygeneruj macierz A8x3
wypełnioną liczbami losowymi od 1 do 9
» A = ceil ( rand ( 8 , 3 ) * 9 )
• zamień miejscami wiersz drugi z czwartym
» P = [ 1 0 0 0 0 0 0 0 ; % P = eye (8);
0 0 0 1 0 0 0 0 ; % P(2,2) = 0 ;
0 0 1 0 0 0 0 0 ; % P(4,4) = 0 ;
0 1 0 0 0 0 0 0 ; % P(2,4) = 1 ;
0 0 0 0 1 0 0 0 ; % P(4,2) = 1 ;
0 0 0 0 0 1 0 0 ;
0 0 0 0 0 0 1 0 ;
0 0 0 0 0 0 0 1 ] , B = P * A
8 8 8 3 8 3P A B
× × ×⋅ =
przykład 4. przekształcenia macierzy
• zamiana i-tej kolumny z j-tą odpowiadaprawostronnemu pomnożeniu macierzy Aprzez następującą macierz przekształcenia
• w macierzy A zamień miejscamikolumny drugą i trzecią
» P = [ 1 0 0 ;
0 0 1 ;
0 1 0 ]
» A
» C = A * P
8 3 3 3 8 3A P B
× × ×⋅ =
przykład 4. przekształcenia macierzy
• dodanie do i-tego wiersza macierzy A jej j-tego wierszapomnożonego przez liczbę m
można zrealizować poprzez lewostronne pomnożenie macierzy Aprzez macierz przekształcenia P P A⋅
przykład 4. przekształcenia macierzy
• dodanie do i-tej kolumny macierzy A jej j-tej kolumnypomnożonej przez liczbę m
można zrealizować poprzez prawostronne pomnożenie macierzy Aprzez stransponowaną macierz przekształcenia P
TA P⋅
przykład 4. przekształcenia macierzy
• wylosuj macierz liczb 5x5 od 1 do 9, oblicz jej rząd i wyznacznik
• pomnóż któryś wiersz przez coś, oblicz jej rząd i wyznacznik
• zamień miejscami wiersze 2 i 4, oblicz rząd i wyznacznik macierzy
• porównaj rzędy i wyznaczniki
» A = ceil ( rand ( 5 ) * 9 )
» Pmnoz = eye(5); Pmnoz(2,2) = 4 ; B = Pmnoz*A
» Pzam = eye(5); Pzam(2,2) = 0 ;
Pzam(4,4) = 0 ;
Pzam(2,4) = 1 ;
Pzam(4,2) = 1 ; C = Pzam *A
» rzedy = [ rank(A) rank(B) rank(C) ]
» wyznaczniki = [ det(A) det(B) det(C) ]
rzedy = 5 5 5
wyznaczniki = -3528 -14112 3528
przykład 5. rząd macierzy – metodą eliminacji Gaussa
• rząd macierzy to maksymalna liczba liniowo niezależnych wektorówtworzących wiersze/kolumny danej macierzy
• wprowadź macierz A
» A = [ 1 -1 2 2 ;
2 -2 1 0 ;
-1 2 1 -2 ;
2 -1 4 0 ]
• skopiuj ją do macierzy B
» B = A
• oblicz rząd macierzy B korzystając z metody eliminacji Gaussa
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
2 -2 1 0
-1 2 1 -2
2 -1 4 0
• od wiersza drugiego odejmij wielokrotność wiersza pierwszegotak, aby wyzerować pierwszy element w drugim wierszu
» B(2,:) = B(2,:) – 2 * B(1,:)
B = 1 -1 2 2
0 0 -3 -4
-1 2 1 -2
2 -1 4 0
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 0 -3 -4
-1 2 1 -2
2 -1 4 0
• od wiersza trzeciego odejmij wielokrotność wiersza pierwszegotak, aby wyzerować pierwszy element w trzecim wierszu
» B(3,:) = B(3,:) + 1 * B(1,:)
B = 1 -1 2 2
0 0 -3 -4
0 1 3 0
2 -1 4 0
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 0 -3 -4
0 1 3 0
2 -1 4 0
• od wiersza czwartego odejmij wielokrotność wiersza pierwszegotak, aby wyzerować pierwszy element w czwartym wierszu
» B(4,:) = B(4,:) - 2 * B(1,:)
B = 1 -1 2 2
0 0 -3 -4
0 1 3 0
0 1 0 -4
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 0 -3 -4
0 1 3 0
0 1 0 -4
• w drugim wierszu na przekątnej jest zero – to niedobrze
• zamień miejscami wiersze 2 z 3
» B = B ( [ 1 3 2 4 ] , : )
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 1 0 -4
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 1 0 -4
• w wierszu drugim jest na początku jedno zero – to dobrze
• w wierszu trzecim są na początku dwa zera – to dobrze
• odejmij wiersz drugi od wiersza czwartegotak, aby w wierszu czwartym też na początku były dwa zera
» B(4,:) = B(4,:) – B(2,:)
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 0 -3 -4
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 0 -3 -4
• wiersze 3 i 4 są jednakowe – zależne - rząd macierzy na pewno nie będzie równy 4
• odejmij wiersz trzeci od wiersza czwartegotak, aby na początku wiersza czwartego były trzy zera
» B(4,:) = B(4,:) – B(3,:)
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 0 0 0
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 0 0 0
• macierz B = macierzy schodkowa
• rząd = liczba schodków = liczba niezerowych wierszy
przykład 5. rząd macierzy – metodą eliminacji Gaussa
B = 1 -1 2 2
0 1 3 0
0 0 -3 -4
0 0 0 0
• oblicz rząd macierzy A korzystając z funkcji rank
» rank(A)
top related