
mlBas000

\textbf{Matlab-pikaohje}

% Edell\"a olevien ohjeiden lis\"aksi t\"ass\"a viel\"a muutama pikainen:

\begin{enumerate}[(a)]
\item
Matlab-työ aloitetaan pienimuotoisilla kokeiluilla antamalla \textbf{komentoikkunassa} komentoja tyyliin \\
\verb_ >> v=1:10; _
\item 
\textbf{Skripti}: Vakavampi Matlab-työ tehdään kirjoittamalla editorilla 
tiedostoon, esim. \texttt{ajo.m}. Tiedosto kannattaa rakentaa muotoon:
%\begin{lstlisting}
\begin{verbatim}
  %% Otsikko
  %
  %% Kappale 1
  % Selitystä
  % ...         
  komento       % Kappaleen 1 SUORITUS: CTR-ENTER
  komento
   ...
  %% Kappale 2
  %
  komento       % Kappaleen 2 SUORITUS: CTR-ENTER
  komento
   ...
  %%
\end{verbatim}
Julkaisu: \emph{publish}

\item
Komennon suorittama tulos tulee ruudulle ENTER-painalluksen j\"alkeen (kuvat 
erilliseen ikkunaan). Jos haluat est\"a\"a tulostuksen, p\"a\"at\"a komento 
puolipisteeseen. Jos my\"ohemmin haluat katsoa muuttujan sis\"all\"on, kirjoita
sen nimi (ilman puolipistett\"a). Jos muuttuja on suuri matriisi, kannattaa
ensin katsoa sen koko \texttt{size(A)} tai sen jotain osaa, esim.
\texttt{A(1:10,1:10)}. Tai klikkaa ``workspace''-ikkunan muuttujaikonia.

\item
Edellisen komennon tulos on muuttujassa \texttt{ans}. Yleens\"a on suositeltavaa
antaa tulokselle oma nimi tyyliin \texttt{nimi= ...}

\item
Nuoliyl\"os-n\"app\"aimell\"a ($\uparrow$) voi 
selata aikaisempia komentoja. Huomaa myös \textbf{Command history}. \\ 
K\"ayt\"a ahkerasti komentoja {\tt help, doc}.
\item
\texttt{format long} :  Tulostetaan enemm\"an numeroita (n. 16). 
Laskutarkkuuteen t\"am\"a ei vaikuta.\\
\texttt{format rational} laskee rationaaliluvuilla. \\
\texttt{format short}: Paluu oletustulostukseen.

\item
Matriisi saadaan aikaan tyyliin: {\tt A=[2 4 3;0 1 -1;3 5 7]}.
Vektori saadaan n\"ain: \\ 
{\tt v=[1 2 3]}. Pystyvektorissa k\"aytet\"a\"an
erottimena puolipistett\"a (tietysti, vrt. matriisi A yll\"a).
Matriisikertolaskun merkki on \verb_ * _ 
%(Edellist\"a virkett\"a ei voi p\"a\"att\"a\"a pisteeseen!)

\item 
Matriisin \texttt{A} transpoosi: \texttt{A'} (reaalisessa tapauksessa).

\item
Kokonaislukuvektori: Esim \texttt{1:10} tai \texttt{1:2:20}.
My\"os \texttt{linspace}. Pystyvektoriksi transponoimalla.


\item
\verb_A(i,j)_  A:n alkio (i,j). \\
\verb_A(2,:)_  A:n 2. rivi \\
\verb_A(:,3)_  A:n 3. sarake \\
\verb_A(1:4,1:4)_ osamatriisi \\
Matriisin osaa voi p\"aivitt\"a\"a, vaikkapa: \\ 
\texttt{A(1:4,1:4)=ones(4,4)}
tai \\
\texttt{A(2,:)=A(2,:)-2*A(:,1)} (Gaussin rivioperaatio).

\item
Matriisien liitt\"aminen: Jos $A$:lla ja $B$:ll\"a on yht\"a monta rivi\"a,
ne voidaan liitt\"a\"a per\"akk\"ain: \texttt{[A b]}\\
(tai \texttt{[A, b]}).
Jos yht\"a monta saraketta, niin allekkain: \texttt{[A;B]}

\item
Laskutoimitukset tarkoittavat matriisilaskua. Siis esim. \\
\verb_ A*B, A^p_ (j\"alkimm\"ainen mahdollinen vain neli\"omatriisille)

\item
Vektorien ja matriisien (samankokoisten) pisteitt\"ainen eli alkioittainen 
laskenta tapahtuu lis\"a\"am\"all\"a eteen piste. Esim: 
\texttt{u=[1 2 3], v=[-2 -2 -2], u.*v}. \\ Toinen operandi voi olla skalaari.
Siten esim. vektorin $u$ kaikki komponentit voidaan korottaa toiseen komennolla 
\verb_ u.^2 _ \\
(Ei siis tarvitse tehd\"a: \verb_u.^(2*ones(size(u)))_, joka tietysti toimii.)


\item
 Piirt\"amist\"a varten muodostetaan $x$-vektori, joka edustaa diskretoitua
$x$-akselia ja lasketaan a.o. funktion arvo vektoriin $y$. \\ 
\textbf{Piirtoesim:}\\ 
\verb_ x=linspace(-pi,pi); y=sin(x); plot(x,y)_\\
%\qquad\qquad\qquad Piirto: \verb_plot(x,y);_ \\

\textbf{Huom!}
Matlab-funktioita voi yleens\"a soveltaa vektoriin ja tulokseksi saadaan
funktion arvojen muodostama vektori. Laskutoimitukset $+,-$ operoivat
vastinalkioittain ("pisteitt\"ain"). Koska kerto- ja jakolasku sek\"a potenssiin
korotus  \verb_ ^_
%$(*,/,\hat$ \qquad)
 on varattu matriisilaskutoimituksille, 
on "pisteitt\"ain"
operoitaessa lis\"att\"av\"a piste (.) ao. laskutoimitusmerkin eteen.
($+,-$) merkkien eteen ei saa lis\"at\"a, ne ovat jo valmiiksi 
pisteitt\"aisi\"a.)\\
Jos haluamme muodostaa vaikkapa funktion $x^2$ arvot annetun $x$-vektorin
pisteiss\"a ja $x$-vektorina olkoon v\"alin [-1,1] diskretointi $60$:een
osaan, voimme laskea ja piirt\"a\"a n\"ain:\\
\verb_ x=linspace(-1,1,60); y=x.^2; plot(x,y)_ .
Toinen tapa diskretoida on  (:), esim: x=a:h:b;\\
jossa siis annetaan
askeleen pituus \verb_h_ (askelten lukum\"a\"ar\"an sijasta).

Kts. {\tt help plot, help :, help colon} %ja yll\"a mainittu Unix-komento:

\item
\textbf{Yhden rivin funktion määritys, funktiokahva}\\
\begin{verbatim}
 >> f=@(x) x.*exp(x) % Määrittely
 >> f(-1:.1:1)       % Käyttö
 >> g=@(x,y) x.^2 + y.^2   % Määrittely
 >> x=[.1 .2 .3]; y=1:3; g(x,y)  % Käyttö
\end{verbatim}

\item
\textbf{Lineaarisen yhtälösysteemin ratkaisu}\\
Yhtälösysteemi: $A\, x = b$
\begin{verbatim}
 >> A=rand(3,3);
 >> b=ones(3,1);
 >> x=A\b
 >> [A*x b]       % Tarkistus
\end{verbatim}

\item
3d-piirto: Pintojen ja korkeusk\"ayrien piirt\"amiseksi tarvitaan korkeusarvojen matriisi xy-tason pistehilan
p\"a\"all\"a. Se aikaansaadaan helpoimmin (ja rutiininomaisesti) \texttt{meshgrid}-komennolla.
Jos haluaisimme piirt\"a\"a vaikkapa funktiopinnan $f(x,y)=\sin\,x \cos\,y$ neli\"oss\"a
$\left[-\pi,\pi\right]\times\left[-2\pi,2\pi\right]$, ja hilapisteit\"a olisi x-suunnassa
$25$ ja y-suunnassa $50$ kpl., teht\"aisiin n\"ain:
\begin{verbatim}
 >> x=linspace(-pi,pi,25);
 >> y=linspace(-2*pi,2*pi,50);
 >> [X,Y]=meshgrid(x,y);
 >> Z=sin(X).*cos(Y);
 >> mesh(x,y,Z)    % Rautalankakuva 
 >> surf(x,y,Z)    % Kaunis pintakuva (myos surfl, surfc, colorbar,...)
 >> contour(x,y,Z) % Korkeusk. piirros 
\end{verbatim}

Lue myös Lyhyen Matlab-oppaan kohdasta: \\

\href{http://math.aalto.fi/~apiola/matlab/opas/lyhyt/grafiikka.html#surf}{http://math.aalto.fi/~apiola/matlab/opas/lyhyt/grafiikka.html\#surf}


\end{enumerate}





\textbf{Tiedoston Latex-koodi:}\\
\href{../mlteht/mlBasic/mlBas000.tex}{../mlteht/mlBasic/mlBas000.tex}\\

\textbf{Avainsanat:} Matlab perusteet, harjoitus-pikaohje, harjoitusohje\\\\

\hrule

