Title: Matlab VM

Työmuistissa on seuraavanlainen matriisi: \(Y = [value]\) Tutki kuinka monta johtavaa ykköstä sen rref-muodossa on.

Johtavien ykkösten lukumäärä:
Feedback: Kirjoittamalla komentoikkunaan help rref saat ohjeistuksen funktion rref käyttöön. Argumentiksi syötetään vain alkuperäinen matriisi. Matriisin \(Y\) rref-muodoksi saadaan \([value]\) Rref-matriisista nähdään, että johtavia ykkösiä on 2.

Kuinka monta lineaarisesti riippumatonta ortogonaalista kantavektoria on Gram-Schmidtin ortogonalisointiprosessilla muodostamassasi kannassa?

Mikä on muodostetun kannan kolmas kantavektori? Kun olet antanut vektorivastauksen, paina vastauksen lukitsemista kahdesti ennen kuin vaihdat vektoriin lukuja.

Anna matriisin \(B\) ominaisarvoa \(3.4269\) vastaava ominaisvektori.
Feedback: Komento \(\texttt{[vektorit arvot]=eig(B)}\) tuottaa matriisin \(\texttt{vektorit}=\)[value] ja matriisin \(\texttt{arvot}=\)[value]. Ominaisarvo \(3.4269\) on \(\texttt{arvot}\)-matriisin toisessa sarakkeessa, joten sitä vastaava ominaisvektori löytyy matriisin \(\texttt{vektorit}\) toisesta sarakkeesta.

Q: Kuinka monta ratkaisua tehtävän 2 matriisia \(Y\) vastaavalla yhtälöryhmällä on?
- yksi (Onkohan näin...)
- äärettömän monta (Hienoa, oikein!)
- ei yhtäkään (Mahtaisitkohan sittenkin löytää ratkaisun/ratkaisuja vastaavalle yhtälöryhmälle?)
A: äärettömän monta
If right: Vastauksesi on oikein.
If partly right: Vastauksesi on osittain oikein.
If wrong: Vastauksesi on väärin.
Feedback: Rref-matriisista nähdään, että johtavia ykkösiä on kaksi ja kolmas muuttuja on vapaa. Näin ollen yhtälöryhmällä on äärettömän monta ratkaisua.

Q: Anna komento, jolla saat määriteltyä 3x5 matriisin, jonka alkiot ovat satunnaisia kokonaislukuja väliltä -10..10. Täydennä alla olevan määrittelyn yhtäsuuruusmerkin oikea puoli siten, että siinä ei ole yhtään välilyöntiä ja kaikki argumentit ovat vektoreita. Vektorien alkiot on erotettu toisistaan pilkuin. Älä merkitse puolipistettä rivin perään. Kaikki tästä poikkeavat vastaukset merkitään virheellisiksi. Esimerkkinä syntaksista täysin fiktiivinen funktio \(\texttt{rajat([xmin,ymin],[xmax,ymax])}\)
A: randi([-10,10],[3,5])
Partly right: randi([-10,10],3,5) (50%); randi([-10,10],[3],[5]) (50%)
Feedback ("randi([-10,10],[3,5])"): Aivan oikein, mahtavaa!!
Feedback ("randi([-10,10],3,5)"): Vastauksesi määrittelee matriisin oikein, mutta on hieman eri muotoa, kuin mitä kysyttiin. Hyvä suoritus joka tapauksessa! Saat tästä vastauksesta puolet mahdollisista pisteistä, mutta jos löydät paremmin tehtävänantoa vastaavan syntaksin, voit saada täydet pisteet!
Feedback ("randi([-10,10],[3],[5])"): Vastauksesi määrittelee matriisin oikein, mutta on hieman eri muotoa, kuin mitä kysyttiin. Hyvä suoritus joka tapauksessa! Saat tästä vastauksesta puolet mahdollisista pisteistä, mutta jos löydät paremmin tehtävänantoa vastaavan syntaksin, voit saada täydet pisteet!
Feedback (any other answer): Väärin meni tällä kertaa. Jos uskot löytäneesi oikean funktion, ole tarkkana tehtävänannon kanssa. Matriisin voi määritellä useammalla kuin yhdellä tavalla, mutta tässä pyydetään yhtä tiettyä.
Feedback: Komento \(\texttt{randi}\) tuottaa satunnaisia kokonaislukuja. Oletusarvoisesti funktio tuottaa kokonaislukuja ykkösestä ylöspäin, mutta sille voidaan syöttää myös muut rajat. Lisäargumenteilla voidaan määritellä matriisin koko. Lisätietoa löydät dokumentaatiosta.

Q: Selvitä piirtämäsi kuvaajan "kahvan" avulla asetuksen FaceAlpha arvo. Anna vastauksesi MATLABin vastaustarkkuuden mukaisesti.
A: 0.5678
Feedback ("0.5678"): Hienoa, oikein meni!
Feedback ("1"): Olit kenties määritellyt handlen johonkin muuhun muuttujaan, kuin muuttujaan \(\texttt{h}\). Vastauksesi saattaa pitää paikkansa kyseiseen kuvaajaan, mutta nyt pyydettiin etsimään arvoa muuttujasta h. Olehan tarkkaavainen tehtävänantojen suhteen!
Feedback (any other answer): Nyt meni vikaan. Oikean vastauksen olisit saanut komennon \(\texttt{get}\) avulla.
Feedback: Kuvaajien kanssa voi kikkailla, kun vain hieman perehtyy asiaan. FaceAlpha on luku välillä [0,1] ja se kuvaa pinnan läpinäkyvyyttä. Asetuksen sait selville komennolla \(\texttt{get}\) ja sen saa muutettua komennolla \(\texttt{set}\).

Määritä vektorin \(T1\) 313. ja 345. alkion summa.

\(T1_{313}+T1_{345} = \)
Feedback: Saat poimittua oikeat alkiot vektorista viittaamalla alkioihin sulkeilla tähän tapaan: \(\texttt{T1(313)+T1(345)}\) Oikea vastaus on 15.

MATLABin oma funktio log ottaa logaritmin siihen syötetystä luvusta. Etsi helpin avulla tai MATLABin documentaatiosta, onko log-funktion logaritmin kantaluku 10 vai Neperin luku e.

MATLABin log-funktion kantaluku on .
Feedback: Jos haet tietoa komennolla help log, näyttöön tulee muun muassa seuraava teksti: \(\texttt{log Natural logarithm.}\) \(\texttt{ log(X) is the natural logarithm of the elements of X.}\) Luonnollisen logaritmin kantalukuhan on Neperin luku e.

Kirjoita editorilla oma funktio, joka laskee kahden funktiollesi syötetyn vektorin välisen kulman. Funktio voi olettaa, että syötetyissä vektoreissa on kolme reaalista alkiota. Nimeä funktiosi nimellä kulma. Syötä sitten komentoikkunaan seuraava rivi: rng(1); eka=randi([0,10],1,3);rng(2); toka=randi([11,20],1,3); kulma(eka,toka)

Vektorien välinen kulma on rad.
Feedback: Oman funktion määrittelemisestä löydät lisää tietoa helpistä tai täältä: https://se.mathworks.com/help/matlab/ref/function.html Tässä yksi esimerkki funktiosta, joka laskee sille syötettyjen vektorien kulman: function vast = kulma(eka,toka) pistet=dot(eka,toka); ekanormi=norm(eka); tokanormi=norm(toka); vast = acos(pistet/(ekanormi*tokanormi)); end Oikea vastaus on [value].

Työmuistiin on määritelty matriisi M. Muuta matriisi sellaiseksi, että siinä on 100 saraketta. Anna vastaukseksi uudelleen järjestämäsi matriisin alkio viimeiseltä riviltä sarakkeesta 50.

Kysytty alkio on:
Feedback: Dokumentaatiosta löydät neuvoja komentojen reshape ja size käyttöön. Näillä komennoilla saisit haluamasi vastauksen: Määritellään muuttuja uudelleen siten, että siinä on 100 saraketta \(\texttt{M=reshape(M,[],100);}\) Selvitetään uuden matriisin koko \(\texttt{size(M)}\) Saatiin vektori \(\texttt{[810 100]}\). Nyt viimeisen rivin 50. alkio \(\texttt{M(810,50)}\) Vastaus on [value].

Yhtälöryhmän ratkaisut on tallennettu struct-tyyppiseen muuttujaan "vastaus". Tutki dokumentaation avulla, miten saat muuttujasta "vastaus" yhtaloryhmassa esiintyneen muuttujan x arvon selville. Syota muuttujan x arvo 5 desimaalin tarkkuudella.

\(x\approx\)
Feedback: Komento \(\texttt{vastaus = solve([2*sin(x/2)-14*y==30,x*y/2==-pi],x,y)}\) tallentaa yhtälöryhmän \(\left\{ \begin{array} 2 \sin \frac{x}{2} -14y = 30 \\ x\frac{y}{2}=-\pi \end{array}\right. \) ratkaisun struct-tyyppiseen muuttujaan \(\texttt{vastaus}\). Muuttujan alkioon x viitataan kirjoittamalla \(\texttt{vastaus.x}\) ja vastaukseksi saadaan \(\texttt{3.1415926535897932384626433832795}\approx 3,14159\). Nokkela laskija huomaa, että vastaus on itse asiassa aika lähellä lukua \(\pi\). Vastaavasti yhtälöryhmän muuttujan y ratkaisuksi saadaan \(-2\).

Anna komento, jolla saat määriteltyä 3x5 matriisin M, jonka alkiot ovat satunnaisia kokonaislukuja väliltä -10..10. Täydennä alla olevan määrittelyn yhtäsuuruusmerkin oikea puoli siten, että siinä ei ole yhtään välilyöntiä ja kaikki argumentit ovat vektoreita. Vektorien alkiot on erotettu toisistaan pilkuin. Älä merkitse puolipistettä rivin perään. Kaikki tästä poikkeavat syntaksit merkitään virheellisiksi. Esimerkkinä syntaksista täysin fiktiivinen funktio \(\texttt{rajat([xmin,ymin],[xmax,ymax])}\)

\(\texttt{M = }\)

Täydennä seuraavan MATLAB-funktion puuttuvat kohdat siten, että funktio laskee matriisikertolaskun. function AB = matriisitulo(A,B) dim1 = size(A,1); dim2 = size(A,2); dim3 = size(B,2); for i=1:dim

for j=1:dim

summa=0;

for k=1:dim

summa=summa+A(i,k)*B(k,j);

end

AB(i,j)=summa;

end

end
Feedback: Matriisikertolaskussa tulomatriisin yhtä alkiota määrittäessä siirrytään ensimmäisessä matriisissa rivillä oikealle ja toisessa matriisissa sarakkeessa ylhäältä alas. Uloin for-silmukka käy läpi matriisin A rivejä. Tulomatriisissa AB on yhtä monta riviä kuin matriisissa A. Oikea vastaus ensimmäiseen kohtaan on siis dim1. Sisimmäinen silmukka laskee yhteen matriisin A i:nnen rivin ja matriisin B k:nnen sarakkeen alkioiden tuloja. Silmukka käy siis läpi niin monta laskutoimitusta kuin matriisissa A on sarakkeita ja matriisissa B rivejä. Komento \(\texttt{size(A,2)}\) määrittää matriisin A rivien lukumäärän, joten oikea vastaus dim2. Toinen for-silmukka tallettaa tulomatriisiin sisimmän silmukan laskemia lukuja. Keskimmäisessä silmukassa nähdään, että tulomatriisiin AB tule j saraketta. Matriisitulon laskusääntöjen mukaan tulomatriisissa on yhtä monta saraketta kuin matriisitulon oikeanpuoleisessa matriisissa, joten toisen kohdan vastaus on dim3. OIKEAT VASTAUKSET: dim1, dim3, dim2

Anna matriisiyhtalön \(A\mathbf{x}=\mathbf{b}\) ratkaisu.
Syötä vastauksesi kahden merkitsevän numeron tarkkuudella.

\(\mathbb{x}=\)
Feedback: Kenoviivalla ( \ ) saadaan ratkaistua matriisiyhtälö \(A\mathbf{x}=\mathbf{b}\). Syntaksi on seuraava: \(\texttt{x=A\b}\) Kenoviivaa vastaa funktio \(\texttt{mldivide(A,b)}\). Matriisiyhtälön \(\mathbf{x}A=\mathbf{b}\) ratkaisu saadaan vinoviivalla ( / ), jota vastaa funktio \(\texttt{mrdivide(A,b)}\). Yhtälöryhmän ratkaiseminen voidaan suorittaa toki käänteismatriisin avulla. MATLABissa tämä on kuitenkin hitaampaa kuin kenoviivan/vinoviivan (tai mldivide/mrdivide) käyttö. Tämän seikan merkitys kasvaa, kun käsitellään esimerkiksi mittausdatasta saatuja suuria matriiseja.

Mika on z-koordinaatti pisteessa, jonka x-koordinaatti on 2 ja y-koordinaatti on -1. Anna vastauksesi MATLABin tulostarkkuudella.
Feedback: Kunkin matriisin alkio tietyssä kohdassa vastaa aina yhden pisteen koordinaattia. Pienen kikkailun avulla voidaan piirtää esimerkiksi donitseja ja muita jänniä muotoja. Halutessasi leikkiä pintojen piirtämisellä, kannattaa tutustua hyvin komennon surf-dokumentaatioon ja etsiä vaikka Googlella valmiita koodeja aiheeseen tutustumisen tukemiseksi.

Minkä vastauksen MATLAB antoi, kun kerroit matriisin \(A\) vektorilla \(\mathbf{c}\), joka kuuluu matriisin \(A\) nolla-avaruuteen. Kun olet antanut vektorivastauksen, paina vastauksen lukitsemista kahdesti ennen kuin vaihdat vektoriin lukuja.

\(A*c=\)\(*10\hat{ }\)
Feedback: Vektori \(\mathbf{c}\) tosiaan on muodostettu MATLABin luoman nolla-avaruuden kantavektorien lineaarikombinaationa. Vaikka vastaukseksi ei tullutkaan aivan nollavektori, voidaan vastausta pitää tässä tapauksessa oikeana. Kun otetaan huomioon, että MATLAB muodostaa nolla-avaruuden kantavektorit numeerisesti, voidaan approksimoida nollavektoriksi vektori, jonka alkioit ovat hyvin hyvin pieniä.

Mikä on työmuistiin määritellyn matriisin \(X\) determinantti? Anna vastaus siinä muodossa, kuin MATLAB sen ilmoitti.

Onko matriisi \(X\) determinantin perusteella kääntyvä? (Vastaus yksittäinen merkki: k/e)
Feedback: Matriisi \(X\) on 6x6-matriisi, joten sen determinantin laskeminen käsin on jo melko työlästä. Komento \(\texttt{det(A)}\) laskee determinantin onneksi puolestasi. Tässä tapauksessa \(det(X))=[value]\). Koska determinantti on nollasta poikkeava, matriisi on kääntyvä.

Anna saamasi polynomisovitteen kertoimet. Sovitefunktion polynomi on muotoa

\(s(t)=\)\(*t^3+\)\(*t^2+\)\(*t+\).
Feedback: Ratkaisun saat opintomonisteen mukaisesti laskemalla \(rref(V^TV|V^T\mathbf{t})\), missä \(\mathbf{t}\) on pystyvektori. Saat kertoimet sisältävän vektorin myös kenoviivan avulla, sillä kenoviiva antaa yhtälön \(V\mathbf{x}=\mathbf{t}\) pienimmän neliösumman ratkaisun. MATLABin alkeissa opeteltiin käyttämään polyfit-funktiota. Polyfitista MATLABin helppi kertoo seuraavaa: \(\texttt{ P = polyfit(X,Y,N) finds the coefficients of a polynomial P(X) of}\) \(\texttt{ degree N that fits the data Y best in a least-squares sense. P is a}\) \(\texttt{ row vector of length N+1 containing the polynomial coefficients in}\) \(\texttt{ descending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1).}\) Siis komennon \(\texttt{polyfit(t,s,3)}\) tulosteen ensimmäinen alkio on kolmannen asteen termin kerroin, toinen on toisen asteen termin kerroin, kolmas alkio on ensimmäisen asteen kerroin ja neljäs alkio on vakiotermi.