Tällä koodilla voi luoda kaksiulotteiset (n = 2) kantavektorit:
a = 2*pi*rand(2,1);
f1 = [ cos(a(1)) , sin(a(1)) ];
f2 = [ cos(a(2)) , sin(a(2)) ];
F = [ f1 ; f2 ];
Tämä funktio luo parametrin mukaan n-ulotteiset kantavektorit:
function F = luokantav( n )
% a = 2*pi*rand(2,1);
F = zeros(n,n);
f = zeros(1,n);
for i = 1:n,
for k = 1:n,
f(1,k) = rand();
end
F(i,:) = f;
end
end
Tämä tekee saman yhdellä rivillä (Matlab, doh...):
rand(n,n);
Katso netistä EJML -java-kirjasto matriisien kanssa leikkimiseksi.
maanantai 28. tammikuuta 2013
keskiviikko 23. tammikuuta 2013
Hello World!
Pitkästä aikaa koodasin rivin javaa, kun väänsin Hello World tutoriaalin (LOL). :) Unohtunu aika pahasti ihan perusjutut, mutta toisaalta myös kaikki mitä tuli vastaan tuntui jollain tavalla tutulta. En vaan muistanut enää ulkoa.
Pitää seuraavaksi tutkia ainakin:
Pitää seuraavaksi tutkia ainakin:
- main -funktio ja sen erityispiirteet
- abstraktit -funktiot, mitä tarkottaa
- miten funktioiden syntaksi meni
- mitä perus tietotyyppejä (vai mikskä niitä kutsuttiin?)
- mitä tietorakenteita oli käytössä
- miten luokkia tehtiin ja
- miten niistä luotiin olioita
Kyl se tästä :P
maanantai 21. tammikuuta 2013
Matriiseja ja vektoreita 1 (Harj. 10)
s = s./sqrt(s'*s);
./ suorittaa jakolaskun kaikille s-vektorin alkioille, kuten
normalisoinnissa kuuluu
s' tarkoittaa, että vektorille tehdään transpoosi (katso Blog (Harj9)
Transpoosin ansiosta vektoreille voidaan tehdä matriisikertolasku,
jolloin ei tarvitse tietää moniko ulotteinen vektori on kyseessä
(vrt. s./sqrt(s(1)^2+s(2)^2) , jossa vektorin s tiedetään olevan 2D.
Normalisoinnin idea on siis tehdä vektorista yksikkövektori
(pituus = 1). Vektorin pistetulon neliöjuuri on vektorin pituus.
Pistetulo voidaan laskea: s(1)^2 + s(2)^2 tai nopeammin ja
ulottuvuuksista välittämättä: s' * s
eye(a,b) luo identiteettimatriisin, eli, jossa on a x b nollia (0) ja ristiin vasemmalta ylhäältä ykkösiä (1).
Vektoreita voi luoda vaaka tai pysty koordinaatein. Itse pyrin luomaan ne mallilla:
[x1, x2, ... xn]
[x1, x2, ... xn]
[y1, y2, ... yn]
[z1, z2, ... zn]
Eli akselit/ulottuvuudet tulevat allekkain ja pisteet (vektorit) vierekkäin.
Tämä tekee kyllä viittaamisesta hieman hitaampaa, kun joutuu ensin antamaan rivikoordinaatin ja sit myös sarakekoordinaatin. Kokeillaanpa mitä tapahtuu, jos antaa vain yhden koordinaatin. :o Ja sama, jos tekee poikittaisvektorin.
Hmph... vähän "randomia", mut on tossa näköjään logiikka. Eli, jos annat vain yhden koordinaatin esim. x(3), niin matlab käy läpi ensin koko ykkös sarakkeen rivi-riviltä. Jos rivejä on vain 2, niin se aloittaa uudestaan ylhäältä sarakkeesta 2. Eli matriisissa(vektorissa) on tällä tavalla "järjestys". Jos käsittelet yksiulotteista joukkoa, niin järjestys kuvaa, monettako alkiota haetaan. Jos kyseessä on yksi moniulotteinen alkio, niin järjestys kuvaa, monettako ulottuvuutta haetaan.
Mikä se muuten on, jos sijoittaa esim. 3x3 matriiseja yksiulotteiseen jonoon? Silloin kolmiulotteinen data on tallenettu yksiulotteiseen järjestykseen. Siitä tulee vähän niinkuin... ömm. Emt. Tässä on kai ero, että onko numeraalinen data kuinka moniulotteista ja onko data tallennettu kuinka moni ulotteisesti...?
Enivei, matriiseista ja vektoreista on vielä paljon opittavaa. :/ Mihinkähän mä näitä voisin käyttää?
maanantai 14. tammikuuta 2013
Mathlab perusteita (Harj. 9)
Ensinnäkin kannattaa katsoa apua ekaksi tästä ohje-monisteesta
linspace() on vähän sama, kuin :-operaattori, mutta eri lähestymistavalla. Linspacen argumentit ovat:
linspace(aloitusluku, lopetusluku, määrä)
Eli se luo numeroita aloitus- ja lopetusluvun välille määrän verran.
Q&A:
rand(x,y) luo myös vektorin x * y alkioita random-arvoilla, jossa oletuksena arvot ovat väliltä [0,1] (tää oli matemaattinen esitys).
linspace() on vähän sama, kuin :-operaattori, mutta eri lähestymistavalla. Linspacen argumentit ovat:
linspace(aloitusluku, lopetusluku, määrä)
Eli se luo numeroita aloitus- ja lopetusluvun välille määrän verran.
Q&A:
- Transpoosi on matriisin "peilikuva" läpileikkauksen suhteen. Eli vaihtaa sarakkeet ja rivit keskenään. En tiiä mitä tekee 3- tai useampi-ulotteiselle matriisille.
- "." -juttua käytetään kertolaskuisse kertomaan, että vektoreille tai joukoille tehdään alkioittainen kertolasku, eikä matriisien kertolaskua (mistä tulee ihan jotain muuta).
- figure(1) määrittää, että piirretään "kuvaan" 1
- clf pyyhkii aktiivisen kuvan.
[ x ; y ] = Hakasulkujen sisällä ;-merkki luo uuden rivin, joten syntyy vektori, jossa ensimmäisellä rivillä on x ja toisella rivillä y. X ja Y voivat itsekin olla vektoreita. Homma menee oudoksi, jos x ja y ovat useampi ulotteisia vektoreita...
- [ ; ] rivejä
- [ , ] alkioita
- [ : ] "luo vektoriväli, esim.
- 1:4 tulostaa 1 2 3 4
- 1:2:5 tulostaa 1 3 5 eli joka toisen aloittaen ensimmäisestä alkiosta
- 6:-1:2 tulostaa 6 5 4 3 2
Eli x:i:y aloittaa x:stä, liikkuu i verran ja lopettaa y:hyn. Mieti for loop:
for 1:amount,
rand(x,y) luo myös vektorin x * y alkioita random-arvoilla, jossa oletuksena arvot ovat väliltä [0,1] (tää oli matemaattinen esitys).
Tilaa:
Kommentit (Atom)