>> format compact
>> I=eye(5,5)
I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> E1=I;
>> E1([2 5],:)= E1([5 2],:)
E1 =
1 0 0 0 0
0 0 0 0 1 % rivi 2 <- rivi 5
0 0 1 0 0
0 0 0 1 0
0 1 0 0 0 % rivi 5 <- rivi 2
>> E2=I;
>> E2(4,4)=4*E2(4,4)
E2 =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 4 0
0 0 0 0 1
% Tai koko riville (kuten käsketään):
>> E2=I; % Huomaa, että E2 pitää palauttaa arvoon I.
>> E2(4,:)=4*E2(4,:)
E2 =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 4 0
0 0 0 0 1
>> E3=I;
>> E3(4,:)=E3(4,:)+4*E3(1,:)
E3 =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
4 0 0 1 0
0 0 0 0 1
>> E1, E1I=inv(E1)
E1 =
1 0 0 0 0
0 0 0 0 1
0 0 1 0 0
0 0 0 1 0
0 1 0 0 0
E1I =
1 0 0 0 0
0 0 0 0 1
0 0 1 0 0
0 0 0 1 0
0 1 0 0 0
>> E1==E1I
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
Matriisit ovat samat, kaikki vastinalkoiden samuusvertailut
(==) tuottavat ehdon 1 (tosi).
Jos I:n kaksi riviä vaihdetaan ja sitten taas nuo samat
rivit vaihdetaan, tullaan takaisin I:hin.
E2,E2I=inv(E2)
E2 =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 4 0
0 0 0 0 1
E2I =
1.0000 0 0 0 0
0 1.0000 0 0 0
0 0 1.0000 0 0
0 0 0 0.2500 0
0 0 0 0 1.0000
Diagonaalimatriisin käänteismatriisi: diagonaalialkioiden
käänteisluvut.
>> E3,E3I=inv(E3)
E3 =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
4 0 0 1 0
0 0 0 0 1
E3I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
-4 0 0 1 0
0 0 0 0 1
E3: 1. rivi kerrotaan 4:llä ja lisätään kolmanteen.
Kun tähän sovelletaan E3I:tä, niin 1. rivi kerotaan (-4):llä
ja lisätään kolmanteen. Saadaan ainoaan poikkeuskohtaan 4-4=0,
ja yksikkömatriisissa ollaan takaisin.
>> A=[1 3;4 2]/4
A =
0.2500 0.7500
1.0000 0.5000
Vihreä x-vektori ja sininen A x-vektori ovat samalla suoralla,
kun x=[1.5 2]. Tällöin venytys on jotain ehkä 1.3:n luokkaa.
Siten x = [3 4 ] ja lambda on noin 1.3.
Vektorit x ja Ax liikkuvat vastakkaisiin suuuntiin.
Toinen yhdensuuntaisuus näkyy olevan suunnassa [1 -1].
Tässä tapahtuu kutisus n. tekijällä 1/2.
>> [V,D]=eig(A)
V =
-0.7071 -0.6000 % Ominaisvektorit sarakkeina
0.7071 -0.8000 % normeerattu yksikkövektoreiksi
D =
-0.5000 0 % ominaisarvot diagonaalilla
0 1.2500
Varsin hyvin nähty.
Yksikköympyrän vihreä kehä kuvautuu siniseksi ellipsiksi.
C2 = R4
, johon rajalliset aistimme eivät yllä. Toki ajatus siitä, että
kompleksiluvulla kertomisessa on kierto mukana, auttaa mieltämistä.
>> B=[3 1;-2 4]/4
B =
0.7500 0.2500
-0.5000 1.0000
>> eig(B) % Katsotaan pelkät ominaisarvot.
ans =
0.8750 + 0.3307i
0.8750 - 0.3307i
>> [V,D]=eig(B) % Katsotaan nyt myös ominaisvektorit.
V =
0.2041 - 0.5401i 0.2041 + 0.5401i
0.8165 0.8165
D =
0.8750 + 0.3307i 0
0 0.8750 - 0.3307i
Ominasrvot ja -vektorit esiintyvät aina liittolukupareina, kun tarkasteltavana
on reaalinen matriisi.
Cx=0x , joten tämä x=[-2,1] on
ominaisarvoa lambda=0 vastaava ominaisvektori.
Ymmärräthän, että nollaominaisrvo on yksi monesta yhtäpitävästä ehdosta
matriisin singulaarisuudelle.
Lasketaan vielä:
>> [V,D]=eig(C)
V =
-0.8944 -0.7071
0.4472 -0.7071
D =
0 0 % Ominaisarvot 0 ja
0 1.5000 1.5
Matlab normeeraa ominaisvektorit yksikkövektoreiksi. Jos jaetaan jommalla
kummalla komponentilla, saadaan ainakin se ykköseksi. Hyvällä onnella
toinenkin on "helppo" luku. Katsotaan:
>> V(:,1)/V(1,1) % Jaetaan 1. sarake ekalla alkiolla
ans =
1.0000
-0.5000 % Hyvin kävi!
% Toiselle nyt nähdään muutenkin, mutta jaetaan nyt sekin:
>> V(:,2)/V(1,2)
ans =
1.0000
1.0000
% Tietysi yhtä hyvin toisella (tässä vain harjoitellaan rutiinia).
>> V(:,2)/V(2,2)
ans =
1.0000
1.0000
>> v=(1:6)'
v =
1
2
3
4
5
6
>> A=vander(v) % Yllä transponointi ei välttämätöntä, sillä vander
% omaa "vektoriälyä", toimii yhtä hyvin vaakavektorille.
A =
Columns 1 through 5
1 1 1 1 1
32 16 8 4 2
243 81 27 9 3
1024 256 64 16 4
3125 625 125 25 5
7776 1296 216 36 6
Column 6
1
1
1
1
1
1
Nähdään, että matriisin sarakkeet ovat viimeistä edellisen potensseja:
0,1,...,5 (lopusta alkuun). (Usein määritellään toisinpäin, siis alusta
loppuun, Matlabissa tehdään "polynomijohdonmukaisuuden" vuoksi näin.)
>> [V,D]=eig(A)
V =
0.0104 0.0122 -0.0168 -0.0137 -0.0068 0.0019
0.0240 0.0135 0.0453 0.0915 0.0779 -0.0313
0.0652 -0.0082 0.1576 -0.0139 -0.2425 0.1957
0.1727 -0.1021 0.2293 -0.3429 0.0105 -0.5627
0.4135 -0.3596 0.0129 -0.4553 0.7578 0.7299
0.8912 -0.9273 -0.9592 0.8163 -0.6006 -0.3336
D =
151.9882 0 0 0 0 0
0 -112.1761 0 0 0 0
0 0 31.6505 0 0 0
0 0 0 -6.0047 0 0
0 0 0 0 0.5611 0
0 0 0 0 0 -0.0190
>> d=diag(D) % diag toimii kahteen suuntaan: 1) Tekee vektorista
d = % diagonaalimatrisiin, 2) poimii matriisista diagonaalin.
151.9882 % Kokeile vaikka A=rand(4,4), diag(diag(A)).
-112.1761
31.6505
-6.0047
0.5611
-0.0190
>> A*V(:,1)
ans =
1.5770
3.6467
9.9116
26.2492
62.8480
135.4529
>> d(1)*V(:,1) % Tässä diag-komennon ainoa hyöty oli se, että voitiin
ans = % kirjoitaa d(1) sensijaan että D(1,1).
% Opetushyöty on sitten puolestaan mittaamaton!
1.5770
3.6467
9.9116
26.2492
62.8480
135.4529
>> A
Koska matriisilla on erisuuret ominaisarvot, se on diagonalisoituva.
Katsotaan kuitenkin vaikka rangi:
> rank(V)
ans =
6.00 % On täysi
>> V*D*inv(V)
>> A
Tässä ei näytetä tulostuksia, mutta ovat samat, kun katsot tarkkaan.
Kokeile myös format-komentoja. (Kunkin komennon jälkeen tulostus uudestaan
tietysti.)
>> format long
>> format bank
>> format short