Matlab-tehtäviä

Ratkaisuja tehtäviin voit kurkistella täältä. Kannattaa toki miettiä ensin itse, toisaalta ei ole syytä jokaiseen tehtävään käyttää liikaa aikaa. Hae itsellesi sopiva etenemistyyli, kunhan otat opiksesi.

Vektoreita, matriiseja,lausekkeita, 2d-grafiikkaa

1.
Tee Matlabilla vektorit, jossa on alkiot:
  1. 2, 4, 6, 8, ..., 20
  2. 10, 8, 6, 4, 2, 0, -2, -4, ..., -10
  3. 1, 1/2, 1/3, 1/4, 1/5, ..., 1/10
  4. 0, 1/2, 2/3, 3/4, 4/5, ..., 9/10
Voit komentaa: format rational .
2.
Vektorien ja matriisien normit. Näitä tarvitaan mm. lineaarisen yhtälösysteemin häiriöalttiuden mittareina.
  1. Kirjoita Matlab-lauseke, jolla lasket matriisin A ns. ykkösnormin. Se saadaan matriisin alkioiden itseisarvojen muodostaman matriisin sarakesummien maksimina.
  2. Vastaavasti ääretön-normi saadaan rivisummien avulla. No Kirjoita.
Testaa sopivalla satunnaislukumatriisilla ja vertaa valmiin norm- funktion antamiin.

Huom! uusissa Matlab-versioissa summaukseen voidaan liittää indeksisuunta, vanhemmissa edetään aina sarakkeita pitkin, jolloin rivisuunta on tehtävä transponoimalla. (Tämä uudistus oli välttämätön, kun useampiulotteiset taulukot tulivat mukaan.)

2.
Piirrä seuraavien funktioiden kuvaajat. Päätä itse sopiva x-väli. Piirtämisen jälkeen voit asetella koordinaatiston halutuksi axis- komennolla. Pelkkää x-aluetta (vast. y-aluetta) voit muutella xlim ja ylim-komennoila. Kokeile!
Muista:
3.
Olkoon $$f(x)=\Bigl(\frac{1+\frac{x}{24}}{1-\frac{x}{12} + \frac{x^2}{384}}\Bigr)^8.$$ Tämä on exp-funktion rationaaliapproksimaatio, ns. Pade-approksimaatio. Piirrä kuvaaja välillä [0,4] ja samaan kuvaan
Aloita vaikka: x=linspace(0,4,200);

Neuvo: Selkeyden vuoksi kannattaa ottaa käyttöön apumuuttujia, kuten osoittaja, nimittaja . Piirrä samaan kuvaan exp-funktio eri värillä ja eri kuvaan erotus f-exp.

4. Monte Carlo-approksimaatio $\pi$:lle
Piirrä kuva
 t=linspace(0,2*pi);
 x=cos(t);y=sin(t);
 plot(x,y,[1 1 -1 -1 1],[-1 1 1 -1 -1]);
 axis([-1.5 1.5 -1.5 1.5])
 axis square
Heitetään tikkaa kuvan mukaiseen tauluun (tikat osuvat aina taulua ympäröivään neliöön, ehkä tähän oikeasti tarvitaan "satunnaisrobotti"). Jos tikkojen osumatarkuus on satunnaismuuttuja, joka on tasajakautunut neliöllä -1<x<1, -1<y<1, niin ympyrään ja neliöön osuneiden tikkojen lukumäärän suhde on $\pi/4$. (Miksi?) Generoi tasajakautuneita pistepareja ja laske ko. osuus.

Kirjassa C.vanL on hyvä tiivis selvitys aiheesta "Random processes" 1.3.2 ss. 34 - 37. Jos tämä kiinnostaa, voit lainata kirjaa (luokassa 3 kpl).
Esiintyviä Matlab-funktioita: hist, rand, randn.
Satunnaisprosesseihin ja tähän tehtävään (Monte Carlo simulaatio $\pi$:n laskemiseksi) on CV-sivulla selkeät skriptit: Dice ja Darts ala C. van Loan.
Opiskele, kokeile ja sisäistä!

3d-grafiikkaa

1.
Suorita joitain alla olevia (tai vastaavia) komentoja. Tutki tarpeen mukaan helpistä. (Tämä kehoitushan pätee aina.)
  Z=eye(30,30);
  mesh(Z)                     % Paina yläpalkin kiertonuolta ja kiertele kuvaa.
  surf(Z)
  mesh(ones(30,30))
  surfc(rand(20,20))
  mesh(hilb(30))              % hilb on pelkästään neliömatriisi
  contour(hilb(30),100)       % 100 korkeuskäyrää
  contour(hilb(30),0:0.01:.1) % Näitä korkeuksia vastaavat käyrät
  pcolor(rand(30,30))
  pcolor(eye(30,30))
  cs=contour(peaks);  % peaks on MATLAB:n mukana tuleva testausfunktio,
  clabel(cs)          % kts. help peaks, type peaks, doc peaks
  clabel(cs,'manual') % Vie hiiriosoitin grafiikkaruutuun ja valitse.
x. Pinta ja korkeuskäyrät (Hig-Hig s. 102-103)
Olkoon
f(x,y)=sin(3y - x2+1)+cos(2y2-2x). Piirrä pintakuva ja korkeuskäyräpiirros, jälkimmäinen sekä contour että ezcontour-funktioilla. Tässä on mahdollisuus kokeilla yllä esiteltyjä korkeuskäyrien valitsemistapoja, myös clabel.

  
x. Pintapiirto napakoordinaateissa
Piirrä funktion $$f(x,y)=\sin(\pi(x^2\,y^2))$$ pintakuva yksikkökiekon päällä. Pyörittele kuvaa.
Neuvo: Lue lyhyestä oppaasta tästä

Lineaarialgebraa

x.
Olkoon annettu vektorit:
  >> v1=[-1.996 2.884 -0.03]
  >> v2=[3.10 -2.70 -0.13]
  >> v3=[-1.170 0.70 1.13]
Esitä vektori v=[1 2 3] edellisten lineaarikombinaationa.
Vihje: Lineaarinen yhtälöryhmä syntyy latomalla vektorit sarakkeiksi matriisiin, sillä kerrotaan tuntemattomien kertoimien vektori. Siinä se yhtälöryhmä.

Ohjelmointia, approksimointia, Taylor

1. Exp-funktion Taylorin sarja
CV-viitteessä on seuraava koodi:
  function y = MyExpW(x)
% y = MyExpW(x)
% x is a scalar and y is a Taylor approximation to exp(x).
y = 0;
term = 1;
k=0;
while abs(term) > eps*abs(y)
   k = k + 1;
   y = y + term;
   term = x*term/k;
end
Talleta se tiedostoon MyExpW.m . Suorita MATLAB-komento help MyExpW

Muistathan: $$e^x = \displaystyle\sum_{k=0}^\infty \frac{x^k}{k!}.$$

Selvitä, mitä koodi tekee ja testaa kutsumalla sitä eri x:n arvoilla. (Mikä on eps ?)

2. Taylor exp, vektoriversio
Edellinen skalaariversio ei ole tyypillistä MATLAB-ajattelua, vaan valmistelua oikeaoppisemmalle vektoriversiolle.
Kirjoita m-tiedosto: omaexp.m täydentäen alla olevaa:
  function y=omaexp(x)
% y=omaexp(x)   % Funktion kutsu 
% x on vektori, y on samanpituinen vektori, y(i)=Texp(x(i)),
%   missä Texp tarkoittaa Taylor-approksimaatiota.
% Esim: 
%       x=linspace(-1,1); y=omaexp(x); plot(x,y)
y=zeros(size(x));  % Alustus, ei välttämätön, mutta tehostaa.
termi=ones(size(x)); % Sarja alkaa 1:stä, olipa x(i) mikä tahansa.
k=0;
while(any(abs(termi) > eps*abs(y))
  y=...
  k=...
  termi= ...
end
Selvitä itsellesi, täydennä, suorita, piirrä.
Vastaus: MyExp4
x. Newtonin menetelmä
Seuraava koodi toteuttaa Newtonin menetelmän epälineaariselle yhtälölle:
k=0;xedell=-Inf;
while abs(x-xedell) > eps*abs(x)
    xedell=x;
    x=x-f(x)/fder(x);
    k=k+1;
end   
Täydennä tämä funktioksi tiedostoon myNewton.m. Otsikkorivi:
function z=myNewton(f,fder,x)
Kirjoita helppiteksti. Muista, että funktion paluumuuttujalle z pitää sijoittaa lopullinen arvo.
Testaa aluksi vaikka tyyliin
myNewton(@sin,@cos,2)