%% Alkuunpääsy
% <./Tutoriaali.html [Koko oppaan alkusivulle]>
%
% Tämä luku johdattelee Matlab-ympäristöön.
% help, doc, manuaalit, Mathworksin teksti- ja videodokut ...
% 
%
% This section serves as an intro to the Matlab environment and
% programming language as well as to this tutorial. It describes how to 
% configure and start using Matlab, search for help, and how to perform 
% file input and output.
%
%% Mikä on Matlab?
% Matlab on kokonainen ohjelmointiympäristö, jonka ydinalue on numeerinen
% matriisilaskenta. Yksinkertaisimmillaan se toimii helppokäyttöisenä ja
% tehokkaana matriisilaskimena.
%
% Laskintyöskentelystä päästään joustavasti siirtymään korkean tason
% funktionaaliseen
% ohjelmointikieleen, jossa myös olipohjainen ohjelmointi on mahdollista
% (mutta ei pakollista).
%
% Matlabissa on helppokäyttöinen ja korkeatasoinen grafiikka matemaattisten
% funktioiden ja (suurtenkin) tietoainesten 2D- ja 3D-visualisointiin.
% Sen tehokas ohjelmointikieli yhdistettynä valtavaan kokoelmaan 
% valmiita funktioita ja "työkalupakkeja" ("toolboxeja") antaa käyttäjän
% käsiin erinomaisen protyyppien rakenteluvälineen.
%
% Matlab ei nykyisin ole suinkaan pelkkä protoiluväline, vaan se tukee 
% myös suurteholaskentaa niin oman kielensä kääntämis-, vektorinti-, 
% rinnakaislaskenta- ym. ominaisuuksien ansioista kuin kehittyneillä
% liitännöillä esim. Fortran- ja C-kielisiin ohjelmiin. 
% Kannattaa myös huomata, että Matlab-tulkki suorittaa vektori- ja
% matriisioperaatiot kutsumalla optimoituja, käännettyjä
% kirjastofunktioita. Matlab-kielelle luonteenomaisella vektoriajattelulla 
% saadaan 
% lyhyempää ja tehokkaampaa koodia kuin
% silmukkaratkaisuilla, joita oikealla Matlab-tyylillä voidaan useissa
% tapauksissa välttää.
%
% Matlab on ennen kaikkea numeerinen ohjelmisto, mutta sen 
% symbolilaskentaominaisuuksia on myös viime vuosina kehitetty 
% voimakkaasti "Symbolic toolbox":n puolella, jossa varsinaisina
% symbolilaskentakoneina toimii joko Maple tai Mupad.
%
% Esikuvana Matlab-kielelle toimii "kaikkien vektorikielien äiti": APL, ...
%%
% <html>
% <hr>  Kokeilua <hr>
% </html>
%%
% Kokeilua: Onko $\alpha$ muuttuja, vai mikä?
%% Matlab:n käynnistys
% Kaksoisklikkaa Matlab ikonia tai kirjoita *Matlab* 
% komentokehotteeseen (Unix). 
% Hetken odottelun jälkeen aukeaa Matlab-ikkuna, jonka oletusasu vaihtelee
% jonkinverran versiosta toiseen siirryttäessä.
%%
% <html>
% <img src="sessio1.PNG" height="600">
% </html>
%%
% Keskellä näkyy komentoikkuna, vasemmassa reunassa hakemisto- ja
% tiedostoluettelo, oikealla työtilan muuttujaikonit ja sen alla
% komentohistoria. Yllä näkyy (hiukan heikosti) joukko komentoja, joilla on
% aikaansaatu erillisessä kuvaikkunassa näkyvä grafiikka. Matlab
% "desktop":n oletusasu voi hiukan vaihdella version mukaan, lisäksi sitä
% voi oman mieltymyksen mukaan muutella ylänauhan "Desktop"-valinnalla.
%% 
% Komentoikkunassa voit ryhtyä laskemaan. Jos sinulla on Matlab käynnissä,
% ja käytät oppaan lukemiseen Matlabin selainta,
% järjestä komentoikkuna opasikkunan viereen. Kokeile maalata harmaassa
% laatikossa oleva koodi kokonaan tai osittain, ja paina F9 opasikkunan 
% puolella. (Muulla selaimella cut/paste.)
% 
format compact % Ei välttämätön, löysät pois laskujen tuloksista.
1 + 1 % Hyvä alku.
sqrt(2) % Esimerkki Matlab-funktiosta.
pi      % Erikoismuuttuja.
'Tekstiä' % Merkkijono.
or(true, false) % looginen arvo. Myös or(1,0) tai 1 | 0
randn(2,2) % Satunnaislukumatriisi
x = 1:10; plot(x, x .^ 2, 'o-'); title('Paraabelimurtoviivan piirto') 
%%
% UNIX-ympäristössä voidaan muistin säästämiseksi käynnistää komennolla
%
% *matlab* |-nojvm|      ( "No Java virtual machine". )
% 
% Tällöin saadaan ruudulle pelkkä komentoikkuna, mutta grafiikka toimii
% kyllä. Yleensä tähän ei ole tarpeen mennä, siinä menetetään aika 
% paljon käyttömukavuutta. X-etäkäytössä UNIX-työasemalla tämä saattaa
% joskus pelastaa päivän, jos työskentely muuten käy tukkoiseksi.
% 
%%
%% Muuttujat
% Arvoja voidaan sijoittaa nimetyille muuttujille. Muuttujan nimet ovat
% hyvin vapaasti valittavissa, kunhan eivät ala numerolla. Myös
% skandiääkköset ja muut erikoismerkkit ovat tuhoon tuomittuja.
% (Sensijaan merkkijonomuuttujan sisältämässä tekstissä niitä saa olla.)
% *Sijoitus muuttujaan* suoritetaan |=| - merkillä
%%
kuusi = 6
saa   = 'puolipilvinen'
kaksi   = log10(100)
2^10
log2(ans)  % Erikoismuuttuja ans, johon tallettuu edellisen, muuttujaan tallentamattoman laskun tulos
%%
% Matlab'n voima on matriisioperaatioissa. Sen nimikin on lyhennys termistä
% "matriisilaboratorio".
%%
a = [1 2 3 4]  %  vektori
1:4            %  Lyhyemmin: (1:stä yhden välein 4:ään)
b = [1 2; 3 4] %  matriisi
c = ones(2,3,2) % 3-u taulukko 
%%
% *Erikoismuuttujia, matemaattisia vakioita*
%
% |ans|  edellisen komennon tulos (ellei sjoitettu muuttujaan)
1+1
%%
pi,eps,i,0/0, 1/0, realmax,realmin  % Tutki help:llä
%% Tietotyypit ja -rakenteet
%
% <Matriisit.html  *Matriisioperaatioiden* tarkempi esittely täällä> .
% 
% Matlabin perustietotyyppi on  *real* - reaalinen liukuluku, jonka esitystarkkuus on n. 16
% kymmenjärjestelmän numeroa. Muita ovat  *logical*, *complex* ja erilaiset *integer* -
% tyypit. Kompleksilukujen reaali- ja
% imaginaariosat ovat tyyppia real. Yleensä tietotyypeistä ei tarvitse
% huolehtia, useimmin tarvittavat "huolet" lienevät konversiot tyyppien
% *logical* ja *real* välillä, joista tarkemmin tuonnempana. Erilaisten *integer*-
% tyyppisten muuttujien tarve ei ihan peruskäytössä heti tulle vastaan.
% Muuttujien tyyppejä ei tarvitse etukäteen määritellä, ja jotain tyyppiä
% olevan muuttujan voi sijoituslauseella korvata toisen tyyppisellä
% tietoalkiolla. (Hienosti sanottuna: dynaamisesti tyypitetty kieli.)
%
% Tietorakenteet ("pakkauslaatikot") ovat 
% 
% <matrixOperations.html taulukot (matriisit)>,
% <dataStructures.html#cellArrays solutaulukot ("cell arrays")>,
% <dataStructures.html#structs struktuurit "structures", "struct"'t>,
% ja 
% <objectOriented.html objektit>.
% 
%% Työtila (workspace)
% Työtila on alue muistia, jossa ovat erityisesti käyttöön otetut
% muuttujat.
% 
% Työtilan muuttujat kokoineen ja typpeineen saa näkyviin komennolla
whos     % Komento who antaa vain nimet.
%
% Työtilan havainnollinen graafinen esitys näkyy myös ikkunassa
% "Workspace", jonka kautta muuttujaa voi katsella ja editoida myös
% muuttujaeditorilla (kaksoisklikkaa ao. muuttujaikonia).
%%
% Muuttujan a voi poistaa komentamalla clear a ja kaikki työtilan muuttujat
% komennolla
clear all  % tai pelkästään clear
%% Komentoikkuna 
% Edellä jo kirjoiteltiin laskutoimituksia ja muita käskyjä
% komentoikkunaan.
% Suuria datoja käsiteltäessä on tärkeää osata lopettaa komento
% puolipisteeseen (;), jotta tulosta ei turhaan näytetä ruudulla.
% Katsotaan pienimuotoisesti:
%
Id4 = eye(4,4)
% 
Ykkoset5 = ones(5,5); % Tulosta ei näy. 
% Jos haluat nähdä, kirjoita muuttujan nimi (ilman puolipistettä)
Ykkoset5
%%
% Komentoikkunassa voidaan nuolinäppäimellä "nuoli ylös" ottaa esiin
% edellinen komento, jota voidaan tarpeen mukaan editoida komentorivillä.
% Taaksepäin kelausta voidaan jatkaa pitemmällekin. Tällä tekniikalla
% voidaan suorittaa pienimuotoisia iteraatioita ilman
% ohjelmointirakenteita. 
%
% <./nuolinappain1.html Esimerkki nuolinäppäiniteraatiosta.> Tässä esiintyy
% joitakin Matlab-operaatioita, jotka selitetään tarkemmin jatkossa.
%
% Uusissa versioissa on "command history"-ikkuna, josta voidaan
% kaksoisklikkauksella panna suoritukseen haluttu komento.
% ***Lisää helpistä, miten komento tuodaan editoitavaksi ennen
% suoritusta***
%
% Matlab-komentojen tunnistusta kannattaa myös hyödyntää, komennon alkuosa
% täydentyy mahdollisilla jatkoilla TAB-painikkeella.
%
%% M-tiedostot, skriptit ja funktiot
% * 1. *Skriptit*
% * 2. *Funktiotiedostot*
% * 3. *Funktio-osoittimet ("Function handles")*
%
% M-tiedosto on tekstitiedosto _nimi.m_. Niitä on kahta typpiä:
% _skriptitiedostot_ ja _funktiotiedostot_. 
%
% *1. Skriptit*
%
% Tekstitiedostoon _omaskripti.m_ voidaan kirjoittaa Matlab-komentoja,
% jotka suorittuvat, kun komentoikkunassa kirjoitetaan tiedoston nimi:
% |omaskripti| 
%
% Tiedoston on oltava Matlabpolun (matlabpath) varrella. Suoritus voidaan
% uusissa Matlab-versioissa käynnistää myös suoraan Matlab-editorista esim.
% työkalunauhan vihreää nuolta painamalla tai F5:llä.
%
% Tiedosto voidaan kirjoittaa millä tahansa tekstieditorilla, suositeltavaa
% on käyttää Matlabin omaa editoria, joka mahdollistaa yllä mainittujen
% käynnistystapojen lisäksi monia muita käyttömukavuuksia.
%
% *Esim:* Suuren matriisin luominen (tässä havainnollistetaan pienellä).
%
% Luodaan tiedosto |teematriisi.m| komentoikkunan file-valikosta -> new ->
% script. Kirjoitetaan sinne rivejä tähän tapaan ja annetaan komento 
% |teematriisi| .
A=  [1.1 2.2 -4.2 i;
    5.7 -2.9 8.567 pi]
%%
% M-tiedostoa käytetään yleisesti Matlab-komentojen tallettamiseen.
% Erityisesti käytettäesä ohjausrakenteita, kuten 
% |for, while,if-else-elseif-end| ym., komennot kirjoitetaan aina
% m-tiedostoon eikä suoraan Matlab-istuntoon. Skripti-m-tiedosto toimii
% näin Matlab-koodin talletuspaikkana. Varsinainen ohjelmointi tehdään
% kuitenkin funktio-m-tiedostossa, josta seuraavassa.
%
% Samoin puhutaan kohta enemmän dokumentin tuottamisesta m-tiedoston avulla.
%%
% *2. Funktiotiedostot*
%
% Funktiotiedosto antaa mahdollisuuden Matlab:n laajentamiseen itse
% määriteltävillä funktioilla. Jos avaat editorin File-valikosta
% new->function, syntyy tiedosto, jossa on seuraavat rivit (ilman 
% |function|-sanaa edeltävää %-merkkiä, *** editoi lopulliseen html:ään ***).
%
%function [ output_args ] = Untitled( input_args )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
%%
% * Otsikkorivi : |fuction| [y1,y2,...,ym] = funnimi(x1,x2,...,xn)
% * Talletetaan tiedostoon |funnimi.m| (Tiedoston nimi on määräävä.)
% * Syöteparametrit x1,...,xm ja tulosparametrit y1,...,yn voivat olla mitä
% tahansa Matlabin tietorakenteita, tyypillisimmin matriiseja.
% * Kaikki käytetyt muuttujat, niin parametrit kuin apumuuttujat ovat
% paikallisia (lokaaleja), ellei |global|-komennolla muuta vaadita.
% * Otsikkorivin jälkeiset, %-alkuiset kommenttirivit tulostuvat
% komentoikkunassa komennolla |help funnimi|.
% * Kaikki koodirivit on syytä lopettaa puolipisteellä, jotta vältytään
% häiritseviltä ylimääräisiltä tulostuksilta funktiota kutsuttaessa.
% * Funktio palauttaa kussakin tulosmuuttujassa sille viimeksi sijoitetun
% arvon.
%%
% *Huom!* Kaikki m-tiedostot ovat aivan tavallisia tekstitiedostoja. Jos
% jostain syystä haluat käyttää jotain muuta tekstieditoria, se käy aivan
% hyvin. Tällöin tietysti Matlabin editorin tarjoamat avut jäävät pois.
%%
% Parhaiten asia tulee tutuksi (myös yleisesti ohjelmontiin
% perehtymättömälle) esimerkkien avulla.
%
% *Esim:*
%{
Ajatellaanpa, että haluaisimme laskea annettujen lukujen keskiarvon. Luvut olisi 
sopivaa tallettaa vektoriin x. Keskiarvo saataisiin yksinkertaisesti lausekkeella 

sum(x)/length(x). % Vektorin x alkioiden summa jaettuna alkioiden lkm:llä.

Kokeillaan vaikka näin: 
%}
x=1:10
keskiarvo=sum(x)/length(x) 
%
%%
% Kun tämä ajatus muutetaan yleispäteväksi funktioksi, jolle voidaan antaa 
% syötteeksi mikä tahansa vektori |x|, avataan tiedosto |keskiarvo.m|, jonne 
% kirjoitetaan:
%{
function y = keskiarvo(x)
% Funktio palauttaa syötevektorin x alkioiden keskiarvon.
% 
y = sum(x)/length(x);
%}
% *** Editoi html:ää , pois {% ***
%%
% Kutsutaan vaikka:
%%
% k100=keskiarvo(1:100)   %***poista kommentti/editoi html:ää***
%%
% |Index exceeds matrix dimensions.|
%
% |Error in ==> Alkuunpaasy at 278|
% |k100=keskiarvo(1:100)|
%%
% *Mitä ihmettä!?*
% Täysin sekopäinen virheilmoitus. Syy selviää tarkistamalla:
%%
 which keskiarvo

%%
% Yllä käytimme epäonneksemme keskiarvo-nimistä muuttujaa, jonka Matlab
% priorisoi samannimiseen funktioon nähden. No, poistetaan tuo muuttuja,
% niin elämä taas hymyilee.
clear keskiarvo % clear poistaa muuttujan, sen valta ei ylety tiedostoon 
                % talletettuun funktioon
k100=keskiarvo(1:100)
%%
% *Käytä |which|-komentoa nimikonflikteihin*
%
% Edellä olevan kaltaiset käsittämättömät virhetilanteet ratkeavat
% |which|-komennolla. Muuttujan ja funktion nimikonfliktin lisäksi usein
% saattaa esiintyä funktioiden välisiä konflikteja. Jos kirjoitat moneen
% paikkaan Matlabpolun varrelle funktiotiedoston |f.m|, saat varmasti aikaan 
% sekaannusta.
%
% |which f| 
%
% paljastaa, mikä on Matlab:n valinta |f|-funktioksi.
%%
% *Matlab:n omat funktiot - verraton esimerkkikokoelma*
%
% Suuri osa Matlab-funktioista on m-tiedostoja, joiden koodi on avoin.
% Niistä on hyvä ottaa opiksi. Helppona esimerkkinä mainittakoon vaikka
% funktio |flipud|, joka kääntää matriisin rivit "ylhäältä alas". 
%
% *Tehtävä:* Suorita komento |type flipud|, huomaat, että varsinaista
% koodia on vain yksi rivi. Kaikki muu on help-dokumenttia tai virheellisen
% argumentin eliminoimista. 
%
% Suorita myös |help flipud|.
%
% *3. Funktio-osoitin, "Function handle"*
%
% Lyhyen, yhdellä rivillä määriteltävän funktion voi määritellä myös
% suoraan Matlab-istunnossa tyyliin:
f=@(x)x.*sin(x)

%%
% Lue: "At(x) arvo(x)", vastaten matemaattista merkintää: |x->f(x)|. 
% Tätä tapaa käytettiin jo edellä iteraatioesimerkissä. Tämä korvaa vanhan
% 'inline'-määrittelyn, jota ei suositella enää käytettäväksi (mutta vanhan
% koodin yhteensopivuuden takia toimii toki).
%
%% Työskentely ja dokumentin tuottaminen editorissa
% Uusi dokumentointivälineistö editoreineen tukee vahvasti sellaista työtapaa, että
% Matlab-työskentely suoritetaan enenevässä määrin editorissa. Sen lisäksi,
% että skripti-m-tiedostoon saadaan Matlab-komennot talteen, tiedoston
% avulla voidaan jäsentää työ kappaleiksi, joita rajoittavat kaksoisprosenttien 
% (%%) 
% väliset alueet. Näin voidaan helposti ajaa tiedoston komentoja osissa
% asettamalla osoitin jonkun kappaleen sisään ja painamalla |CTR-ENTER|.
%
% Tämän lisäksi syntaksiltaan kunnossa oleva m-tiedosto voidaan ajaa
% html-dokumentiksi alla olevan esimerkin mukaisesti. (Esimerkissä
% käsitellään matriiseja ja lineaarisia yhtälöryhmiä, Matlab:n ydinaluetta,
% josta lähemmin tuonnempana.)
%
% <./Tyotapa1.m Esimerkki työtavasta: komentotiedosto, eli "m-tiedosto">
%
% Kun m-tiedoston editorin FILE-valikosta valitaan _publish_, saadaan
% m-tiedoston komennot ja niiden 
% tuottamat tulosteet kuvineen html-muodossa. 
% <./Tyotapa1.html  Tässä tapauksessa näin.>
%
% Itse asiassa koko tämä Matlab-opas on joukko m-tiedostoja, jotka on
% publish-komennolla ajettu html-dokumentiksi.
%
% Erityisesti *oppilastöissä* tämä on korvaamattoman hyödyllinen
% toimintatapa ja siirtää vanhan |diary|-komennon "Matlab-museoon".
%%
% *Publish-komennon help-dokumentaatiota:*
%
% |doc publish -> Example: Sine Fourier| 
%
% |Help->Product help->User's Guide->Desktop Tools and Development Env. ->|
% |Publishing Matlab-code|
%% Help
% Matlabissa on laaja ja monipuolinen avustusjärjestelmä. 
% Matlab-ikkunan *help*-valikko -> *product help* 
% Tästä löytyy perusavustuslinkit, kuten
%
% * Getting started - sisältää myös hyviä videotutoriaaleja
% * User Guides - Laaja dokumenttikokoelma
% * Getting help
% * Examples
%
% |help fnimi| Matlab-komentoikkunassa tulostaa Matlab-funktion |fnimi| 
% ohjetekstin ko. ikkunaan.
%
% |doc fnimi| avaa Matlabiin nettiselaimen ja tulostaa avustustekstin
% kauniimmassa ja joskus laajemmassa muodossa.
%
% Jälkimmäinen on yleensä selkeämpi, mutta edellinen on taas nopeampi.
%%
% <html>
% <img src="helpEig.png" height="600">
% </html>
%% lookfor
% Komento etsii annettua merkkijonoa kaikkien Matlab-funktioiden
% ensimmäiseltä kommenttiriviltä. Siksi tulostusta tulee joissakin
% tapauksissa varsin runsaasti ja sen loppumista joutuu odottelemaan.
% Vastaavasti siitä voi olla paljon iloa, sen avulla voi tehdä hyviä
% löytöjä.
%
% You can look for functions which contain a specified string in the first
% line of their documentation (see <writingFunctions.html#comments here>
%
% Kokeile vaikka 
%% 
% * lookfor random
% * lookfor quadratic
% * lookfor 'curve fitting'
% * lookfor polynomial
%
%%
% <./Alkuunpaasy.html#1 [Sivun sisällysluetteloon]>
% <./Tutoriaali.html [Oppaan alkusivulle]>
%% Using this Guide
% This tutorial so broken into several small chapters, which are themselves
% composed of a number of subsections. For the most part, the chapters are
% self contained and can be read in isolation as needed. As the code for
% the examples is embedded right into the document, it may be advantageous
% to open the tutorial in the Matlab web browser so that you can try out
% the examples as you read. 
% Just type something like
% *web yagtom.googlecode.com*
% at the command prompt. You can then click on 'Desktop -> dock browser'
% so the browser will appear inside the matlab <writingFunctions.html#Editor editor> as illustrated below.
%%
% <html>
% <img src="matlabTutorialBrowser.png" height="500">
% </html>
%%
% You can execute code by highlighting it on the
% web page and pressing *F9*. The statements are processed as though they
% were typed one at a time in the command window. 
% Or you can cut and paste between different windows.
% Note that some of the examples use functions or data that
% are not built-in to matlab.
% These can be download here: <http://code.google.com/p/yagtom/downloads/list>.
% You should unzip these in some directory,
% and then add them to your matlab path by typing
% something like
addpath(genpath('C:\matlabTutorial\mfiles'))
%%
% Click <files.html#MatlabPath here> for more details on the matlab path.
%% Other Matlab resources
% There are many other resources related to Matlab.
% We list some of them below.
%%
% <html>
% <ul>
% <li> 
% <a
% href="http://www.mathworks.com/access/helpdesk/help/pdf_doc/matlab/getstart.pdf">
% Getting started in Matlab</a>, the official 260 page  guide.
% <li> 
% <a
% href="http://www.mathworks.com/academia/student_center/tutorials/launchpad.html">
% official links to other tutorials</a>
% <li> <a href="http://www.mathworks.com/matlabcentral">matlab central</a>, source of
% free software, of variable quality.
% <li> <a href="http://www.mathworks.com/matlabcentral/newsreader"> matlab
% newsgroup</a>, 
% a place where you can post questions and people may answer them for you.
% </ul>
% <hr>
% <center>
% <a href="./Alkuunpaasy.html"> [Tämän tiedoston alkuun]</a> | 
% <a href="./Tutoriaali.html"> [Koko oppaan alkusivulle]</a> |
% <a href="./Matriisit.html"> [Seuraava aihe: Matriisit]</a> 
% </center>
% </html>
%%
% 

