$$\pi$$
Vuoden 2010 kurssimatskua:
Kurssiesite
Aikatauluhahmotelma
>> help funnimi % Kaikki m-tiedostoissa olevat funktiot, % myös omat, jos olet vaivautunut kirjoittamaan.Tässä yleishyödyllisiä help-sanoja koottuna. Siis >> help hakusana (nopea ja "ruma") tai >> doc hakusana (hidas, mutta kaunis), saman saat alla olevan luettelon hakusanaa klikkaamalla.
>> help general >> help ops % Operaattorit ja erikoismerkit >> help lang % Language constructs >> help elmat % Elementary matrices >> help specmat % specialized matrices >> help elfun % Elementary functions >> help specfun % Special functions >> help matfun % Matrix functions - Numerical linear algebra >> help datafun % Data analysis and Fourier Transforms >> help polyfun % Polynomial and interpolation functions >> help graphics, help plot >> help ode45
>> a=[1 2 3 4 5] % Vaakavektori >> c=[6;7;8;9;10] % Pystyvektori >> a*c % Matriisitulo, tässä tapauksessa vektorien sisätulo >> sisa=dot(a,c) % Funktio dot tekee saman vektoreille >> ulko=c*a % pysty*vaaka antaa "ulkotulon"Edellä olevat voidaan tehdä kätevästi ja yleispätevästi näin:
>> a=1:5; % Puolipiste estää tulostuksen. >> c=(6:10)' % A' on A:n transpoosi.Ulkotulokokeilu:
>> help ones >> ykkossarake=ones(5,1) >> rivi=[1 2 3] >> ykkossarake*riviMitä siis saat, kun kerrot rivivektorin ykkössarakkeella? Miksi?
>> a=1:5 >> A=[a;a] >> A=A(:,1:3) >> A' >> A*A' >> A'*A
>> a*a % Virhe, vain neliömatriisi voidaan kertoa itsellään.Entä, jos haluttaisiin kertoa
a:
n vastinkoordinaatit keskenään?
Tällöin laitetaan kertomerkin eteen piste (.) kuvastamaan "pisteittäistä"
laskutoimitusta:
>> b=a.*a >> a.^2 % Antaa saman (Skalaari 2 osaa laajentua a:n pituiseksi vektoriksi) >> a.*b >> a.*c % Toimii samankokoisille matriiseille,
>> exp(a) >> log(ans) >> sqrt(a) >> a.^(1/12) >> exp(i*pi)
>> v=pi/10*(1:10) >> format long >> v % Katsotaan muuttujan v sisältö. >> format % Takaisin oletusnäyttöasuun >> 2^54 % e-notaatio (e:n jälkeen on 10:n potenssi) >> format bank % 'Pankkimuoto' >> ans % Edellisen laskun tulos. >> format compact % Tiivistää tyhjiä rivejä pois. (Tässä käytämme sitä.)
Matriisin koko- ja muodostamisfunktioita |
---|
size Matriisin koko, näinkin: [m,n]=size(A) reshape Matriisin uudellenmuotoilu ones Ykkösistä koostuva matriisi zeros Nollamatriisi eye Yksikkömatriisi rand Satunnaislukumatriisi diag Vektorista diagonaalimatriisi, matriisin diagonaalivektori spdiags Harvan matriisin muodostaminen diagonaaleista. blkdiag Lohkodiagonaalimatriisi repmat Matriisin rakentaminen toistamalla lohkoa. vander Vandermonden matriisi magic Taikaneliö ('Magic square') |
Datankäsittelyyn |
---|
sum, diff,sort,mean, max, min, prod, cumsum, cumprod |
>> A=[1 2 3;4 5 6] >> size(A) >> [m,n]=size(A); [m n] >> zeros(1,5), ones(5,1) >> ones(size(A)) >> sum(A), mean(A), prod(A), ... >> mesh(eye(30,30)) % Klikkaa kiertokuvaketta ja kiertele. >> A(1,:) >> A(:,3) >> A(:) % tai mutkikkaammin: reshape(A,m*n,1) >> reshape(ans,2,3) >> % Huom! Matlab on sarakeorientoitunut.Mieti:(a) Miten saisit matriisin kaikkien alkioden summan, keskiarvon,tulon.
>> pi,i,j % Matlabin tuntemia vakioita. >> i=1 % Tämä on kuitenkin luvallinen sijoitus. >> clear i % Poistetaan edellinen arvo, jolloin palataan i:n oletusarvoon. >> i=sqrt(-1) % Vaihtoehtoisesti näinkin.Kts. tarkemmin tästä lyhyestä
>> 2+3 ans = 5 >> 7-5 ans = 2Voit leikata/liimata ("copy/paste") punaisia soluja tai niiden osia Matlab- tai Octave-komentoikkunaan ja tarkkailla tuloksia ja tehdä omia muunnelmia.
Syöte | Tulos | Kommentit |
---|---|---|
2 + 3 7-5 34*212 1234/5786 2^5 |
ans = 5 ans = 2 ans = 7208 ans = 0.2173 ans = 32 |
Lukujen aritmetiikka toimii odotetulla tavalla. Huomaa muuttuja ans, kun tulosta ei käyttäjän toimesta mihinkään sijoiteta. |
a = sqrt(2) | a = 1.4142 | Sijoitus muuttujaan a. |
b = a, pi, 2 + 3i | b = 1.4142 ans = 3.1416 ans = 2.0000 + 3.0000i |
Samalle riville voidaan kirjoittaa useita komentoja pilkulla tai puolipisteellä eroteltuina. pi, i ja j ovat vakioita. Kompleksiluku voidaan kirjoittaa muodossa 2+3i ilman kertomerkkiä, muttei 2+i3, eikä tietenkään x+yi, vaan x+y*i (i3 ja yi tulkitaan muuttujan nimiksi).
Suositus: Käytä aina kertomerkkiä. |
c = sin(pi) eps 5*10^9 |
c = 1.2246e-016 ans = 2.2204e-016 ans = 5.0000e+009 |
"eps" on liukuluklaskennan suhteellinen tarkkuusraja. Sitä pienempi lisäys lukuun 1 antaa tuloksen 1. Huomaa, että Matlab käyttää tieteellisen laskennan e-notaatiota, jossa e ei tarkoita Neperin lukua, vaan erottaa mantissan ja eksponentin. |
d = [1 2 3 4 5 6 7 8 9] e = [1:9] f = 1:9 |
d = 1 2 3 4 5 6 7 8 9 e = 1 2 3 4 5 6 7 8 9 f = 1 2 3 4 5 6 7 8 9 |
"d", "e", ja "f" ovat vektoreita, kaikki samoja. Kaksoispiste- operaattori ":" muodostaa lukuvektorin 1:n askelin. Huomaa, että sisäkkäiset hakasulut eivät muuta tietorakennetta (toisin kuin vaikkapa Maplessa). | .
g = 0:2:10 0:-0.2:-0.4 f(3) f(2:7) f(:) |
g = 0 2 4 6 8 10 ans = 0 -0.20 -0.40 ans = 3 ans = 2 3 4 5 6 7 1 2 3 4 5 6 7 8 9 |
Kaksoispisteen yhteyteen voidaan lisätä myös askel, joka voi olla mikä tahansa reaaliluku, myös negatiivinen.
Huomaa, että indeksivektorien avulla voidaan poimia annetun vektorin (tai matriisin) osia.
Huomaa myös, että esim. f(3) ei tarkoita funktion f arvoa pisteessä 3, vaan vektorin f kolmatta alkiota. (Emmehän ole edes määritelleet mitään f-funktiota.) |
h = [1 2 3]; h' |
(tyhjää) ans = 1 2 3 |
Puolipiste ";" estää tulostuksen. Yksinkertainen hipsukka " ' " transponoi matriisin. (Kompleksitapauksessa myös konjugoi.) |
h * h' h .* h h + h |
ans = 14 ans = 1 4 9 ans = 2 6 8 |
Kertolaskut: Tähti " * " on matriisikertolasku, operandien oltava "kertomiskelpoiset" " .* " on vastinalkioiden välinen kertolasku, matriisien oltava samankokoiset. (Skalaari kelpaa aina toiseksi operandiksi ("skalaarin laajennussääntö")) |
g = [ 1 2 3; 4 5 6; 7 8 9] | g = 1 2 3 4 5 6 7 8 9 |
Matriisien muodostaminen. |
g(2,3) g(3,:) g(2,3) = 4 sarakejono=g(:); |
ans = 6 ans = 7 8 9 g = 1 2 3 4 5 4 7 8 9 |
Matriisin alkiot ja osat. Huomaa: pelkkä kaksoispiste ":" tyliin g(3,:) juoksuttaa koko rivin tai sarakkeen, jos tyyli on g(:,2). g(:) jonouttaa pikäksi vektoriksi sarakkeittain. |
g^2 g .^ 2 |
ans = 30 36 42 66 81 96 102 126 150 ans = 1 4 9 16 25 36 49 64 81 |
Ensimmäinen kertoo matriisin itsellään (oltava neliömatriisi). Toinen korottaa jokaisen alkion toiseen potenssiin (minkäkokoinen tahansa). |
Avataan Matlab-editori (New m-file) ja kirjoitetaan seuraavat komennot:
%% Tenttipisteiden jakauma pisteet=[10 11 15 3 29 7 0 9 30 2 1 8 20 22 5 9 23 24]; jarjestyksessa=sort(pisteet) keskiarvo=sum(pisteet)/length(pisteet) % tai mean(pisteet) hajonta=std(pisteet) plot(sort(pisteet)) figure hist(pisteet,6)Talletetaan tiedostoon tentti.m Matlab/Octave-istunnossa suoritetaan komento tentti.
Työstä saa html-dokumentin kuvineen ja sisällysluetteloineen klikkaamalla
Matlab-editorin FILE-valikon valintaa publish. (Tapahtuu sitten,
kun Matlab-tulkin havaitsemat virheet on korjattu.)
Huom! Julkaisuominaisuus publish, kuten myöskään opastava editori ei ole
käytettävissä Octavessa.
Selitykset m-tiedostoissa sijoitetaan %-merkin taakse. Kappalejako saadaan
aikaan %%-alulla, samalla syntyy sisällysluettelo. KÄTEVÄÄ, käytä ihmeessä
hyväksi harjoitustöissä ym.
Kokeile: Kirjoita ja aja yllä oleva tai jokin muu. Tulos on alihakemistossa html (Vau!)
>> clf % Mahd. vanhojen grafiikkaröpellysten putsaus. >> x=linspace(0,20,25); % Väli [0,20] jaetaan 24 osaväliin (25 jakopisteellä). >> y=sin(x)+exp(-x/10); >> plot(x,y,'ro',x,y,'g'); % 'r' - "red", 'o' - rinkula, ei yhdysjanoja, >> % 'g' - "green" >> title('Annetun funktion kuvaajan pisteet ja yhdistysjanat'); >> shg % Näytä grafiikka.Saadaan funktion sin x + e-x/10 kuvaaja välillä [0, 20].
plot(x,y,'g')
ja hold on .
Sileämpi kuva saadaan aloittamalla esim: >> fplot('sin(x)+exp(-x/10)',[0,20])Tämä on "vanhanaikainen" ja väistyvä tapa, jossa funktio annetaan merkkijonona. Nykyisin (ja tällä kurssilla [maaliskuu 2012] yksinomaan) käytetään modernia "funktiokahvaa, function handle" näin:
>> fplot(@(x) sin(x)+exp(-x/10) , [0,20])Anna vielä komento grid on, niin näet selvästi, että funktiolla on 0-kohta lähellä arvoa x=10. Voit vielä piirtää x-akselin:
>> hold on; %Seuravat piirtokomennot eivät pyyhi edellisiä. >> plot(x,zeros(size(x)),'b'); >> zoom on; % zoomausnappula löytyy myös suoraan kuvaikkunan kuvakkeista.Hiiriosoittimella voit nyt kuvaikkunassa zoomailla ja tarkentaa 0-kohdan approksimaatiota.
Matlab:ssa on nollakohdan hakemiseen funktio "fzero".-
>> x0=fzero(@(x) sin(x)+exp(-x/10) , [9 10]) x0 = 9.8091 >> format long % Tuloksen näyttö täydellä tarkkuudella. >> x0 x0 = 9.809140437417911 >> format % Palautetaan oletusnäyttötarkkuus.
> f:=x->sin(x)+exp(-x/10)
x=-3:.5:3; y=-2:.5:2; [X,Y] = meshgrid(x,y); Z = X.^2 - Y.^2; % Huomaa pisteittäiset potenssit (.^). clf % Clear figure, putsaa vanhat. mesh(x,y,Z); shg % show graphics, näytä heti!Erilaisia samaan dataan liittyviä, kuvaa muodostavia ja sääteleviä komentoja on runsas valikoima. Tässä eräitä:
surf(x,y,Z) colorbar axis([min(x) max(x) min(y) max(y) min(min(Z))-1 max(max(Z))+1]) xlabel('x-akseli'); ylabel('y-akseli'); zlabel('z-akseli');Jos klikkaat keskellä työkaluikoneja olevaa ympyriäistä nuolta, pääset pyörittelemään hiirellä kuvaa.
function [xx,yy,zz] = torus(r,n,a) %TORUS Generate a torus % torus(r,n,a) generates a plot of a torus with central % radius a and lateral radius r. n controls the number % of facets on the surface. These input variables are optional % with defaults r = 0.5, n = 20, a = 1. % % [x,y,z] = torus(r,n,a) generates three (n+1)-by-(2n+1) % matrices so that surf(x,y,z) will produce the torus. % % See also SPHERE, CYLINDER %%% Kermit Sigmon, 11-22-93 if nargin < 3, a = 1; end if nargin < 2, n = 20; end if nargin < 1, r = 0.5; end theta = pi*(0:2*n)/n; phi = 2*pi*(0:n)'/n; x = (a + r*cos(phi))*cos(theta); y = (a + r*cos(phi))*sin(theta); z = r*sin(phi)*ones(size(theta)); if nargout == 0 surf(x,y,z) ar = (a + r)/sqrt(2); axis([-ar,ar,-ar,ar,-ar,ar]) else xx = x; yy = y; zz = z; endTämä esimerkki kuvaa samalla, miten funktion argumenttilista voidaan rakentaa vaihtuvanpituiseksi. Kaikki alla olevat kutsutavat ovat mahdollisia:
>> [x,y,z]=torus; % Muodosta torusdata, ei piirtoa. >> [x,y]=torus; % Vain x- ja y-koordinaatit. >> torus; % Piirrä torus oletusarvoilla. >> torus(0.6); % Piirrä arvolla r=0.6, sekä n:n ja a:n oletusarvoilla. >> x=torus(0.7, 25); %
>> shading interp >> colormap(copper) >> axis offLuentotehtävä: Maalaa yllä oleva torus-koodi ja kopioi omaan Matlab-työhakemistoosi tiedostoon torus.m. (Saat sen myös suoraan tästä. )