>> 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.2500Varsin 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.3307iOminasrvot 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.5Matlab 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 1Nä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 >> AKoska 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