sin, cos, asin, acos, ...
Kutsumme tällaista funktiota skalaarifunktioksi.
Siis jos f
on skalaarifunktio, niin
f(skalaari) == skaalaarija matriisille
A=(ai,j)pätee:
_ _ | | | f(a1,1) ... f(a1,n) | f(a2,1) ... f(a2,n) f(A) == | ... | | ... | | f(am,1) ... f(am,n) |_ _|Otetaanpa hieman aiempaa laajempi luettelo Matlabin skaalaarifunktioita:
sin asin exp abs round cos acos log sqrt floor tan atan rem sign ceilOmia funktioita kirjoitettaessa kannattaa kysyä itseltään, "miksi en kirjoittaisi funktiotani toimimaan skalaarifunktion tavoin?". Vasta, jos on hyvä syy tehdä jotain muuta, niin sitten tehdään.
Kaikki nämä funktiot sovellettuna matriisiin operoivat sarakevektoreihin palauttaen kutakin sarakevektoria vastaavan luvun. Siten tuloksena on matriisin sarakkeiden lukumäärän kokoinen vektori.
Vektorifunktioksi sanomme yleisesti sellaista funktiota>> A=reshape(1:12,4,3) A = 1 5 9 2 6 10 3 7 11 4 8 12 >> sum(A) ans = 10 26 42 >> max(A) ans = 4 8 12
f
,
joka toimii tähän tapaan. Toisin sanoen f
on vektorifunktio, jos
f(vektori) == skalaari
f(A)
operoi matriisin A
sarakevektoreihin palauttaen
sarakkeiden lukumäärän pituisen rivivektorin.
A
:n rivivektoreihin saadaan luonnollisesti aikaan
transponoimalla:
f(A')
.
Yllä lueteltujen lisäksi vektorifunktioita ovat mm.
floor, ceil,prod,sort,mean,
max(max(A))
. A
jonouttaa pitkäksi vektoriksi
A(:)
. Suurin alkio saadaan siten myös soveltamalla
max-funktiota
tähän pitkään vektoriin: max(A(:))
.
>> A=hilb(3) A = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 >> sarakemaksimit=max(A) sarakemaksimit = 1.0000 0.5000 0.3333 >> maks=max(sarakemaksimit) maks = 1 >> A(:) ans = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 >> max(A(:)) ans = 1
Tehtävä: (a) Kirjoita lauseke, joka laskee matriisin A alkioiden
itseisarvojen sarakesummien maksimin.
(b) Sama rivisummille.
Edellinen
on matriisin ns. 1-normi, jälkimmäinen taas "ääretön-normi", näistä enemmän
tuonnempana.
>> cumsum(1:10) ans = 1 3 6 10 15 21 28 36 45 55 >> A=[1 2 3;4 5 6]' A = 1 4 2 5 3 6 >> cumsum(A) ans = 1 4 3 9 6 15 >> cumprod(A) ans = 1 4 2 20 6 120Nämä hyödylliset funktiot toimivat muuten vektorifunktion tavoin, mutta palauttavat vektoriargumentilla samanpituisen vektorin.
Voimme kutsua matriisifunktioksi sellaista, joka
_ _ | | f(A) == | f(a.1) ... f(a.n) |_ _|
Sekafunktion (kuten kaikkien funktioiden) argumenttina on matriisi (joissakin tapauksessa kelpaa vain neliömatriisi). Tuloksena saattaa olla oikeastaan mitä vain, kuten
Kootaan vielä yhteen ja täydennetään yllä olevaa muutamalla funktiolla.
eig inv svd lu rref expm det size norm cond rank |
Esimerkkinä usean arvon palauttavan funktion käytöstä mainittakoon tässä erinomaisen hyödyllinen funktio eig .
lam=eig(A)antaa neliömatriisin ominaisarvot. Kutsulla
[V,D]=eig(A)saadaan diagonaalimatriisi D, jonka diagonaalilla ovat ominaisarvot, ja vastaavista ominaisvektorisarakkeista koostuva matriisi V.
Tehtävä: Muodosta symmetrinen 10 x 10 satunnaismariisi (käyttäen rand -funktiota), nimeltään A. Huomaa, että symmetrisen matriisin saat esim. kertomalla mielivaltaisen matriisin ja sen transpoosin keskenään. Muodosta matriisit V ja D, missä V:n sarakkeet ovat A:n ominaisvektorit ja D:n diagonaalialkiot ovat A:n ominaisarvot. Laske A*V ja V*D ja totea ne samoiksi. Muistele ominaisarvojen ja - vektoreiden määritelmää ja perustele, miksi näin on.