Matlab - programi

Matlab - programi

Avtor: Matija Lokar

M datoteke

  • Programe pišemo v obliki tekstovnih datotek s končnico m
  • Ni sprotnega izvajanja kot v ukaznem oknu. Programe lahko izvedemo večkrat.
  • Dve vrsti m datotek:

    • Opisne m datoteke (t.i. skriptne datoteke)
    • Funkcijske datoteke – definicija funkcij
  • Načeloma lahko datoteke napišemo kjerkoli

    • Beležnica
    • TextPad
    • Urejevalnik v IDLE
    • Word (in shranimo v formatu Plain text)

Urejevalnik

  • MATLAB vsebuje tudi urejevalnik
  • File / New Prikaz

    • Blank M-File

    • Function M-File

      • Že vpisano "okostje" Prikaz

        (slika_matlab27.png)
(slika_matlab25.png)
(slika_matlab26.png)

Opisne datoteke

  • Nimajo vhodnih in izhodnih parametrov
  • Vanje združimo več ukazov in prirejanj
  • Po klicu se vrstice izvedejo po vrsti

    • Kot bi zaporedoma tipkali te ukaze v ukaznem oknu

Zgled

% narišimo grafa padavin za januar in februar % padavineGraf.m

(slika_matlab28.png) (slika_matlab29.png)

Kako

  • Odpremo urejevalnik
  • Napišemo …
  • File/Save
  • Klik na Zelen trikotnik Prikaz
  • Imenik se mora ujemati s tekočim imenikom Prikaz

    (slika_matlab30.png)
(slika_matlab31.png)

Kasnejša uporaba

  • Le navedemo ime m – datoteke
  • padavineGraf
  • Seveda mora biti v tekočem imeniku datoteka padavineGraf.m
  • Vse spremenljivke, uporabljene v opisnih datotekah, so "globalne", torej na voljo

    • meseci

Prikaz

(slika_matlab32.png)

padavineGraf.m

padavine=[5, 98, 124, 152, 169, 213, 202, 228, 197, 187, 199, 12;
90, 105, 130, 140, 190, 198, 220, 210, 230, 170, 150, 100;
120, 90, 140, 160, 150, 215, 220, 240, 200, 170, 180, 100;
110, 95, 120, 140, 150, 216, 205, 220, 200, 189, 205, 125;
105, 85, 129, 160, 170, 225, 201, 230, 198, 184, 198, 122;
110, 100, 120, 140, 165, 210, 196, 244, 193, 183, 203, 130;
115, 97, 127, 156, 176, 207, 194, 227, 202, 176, 194, 119;
98, 95, 135, 158, 160, 215, 203, 222, 199, 162, 196, 125;
102, 105, 131, 145, 158, 212, 199, 232, 203, 167, 206, 115;
12, 103, 115, 159, 175, 208, 205, 226, 201, 197, 211, 105;];

leta = [1990:1999];
% vse oznake mesecev morajo biti enako dolgi nizi
meseci = ['jan';'feb';'mar';'apr';'maj';'jun';'jul';'avg';'sep';'okt';'nov';'dec'];

plot(leta, padavine(:,1:2)) % Grafa padavin za januar in februar
title('Grafa padavin za januar in februar')
legend(meseci(1:2,:)) % v legendi so vsi znakui

Funkcijske datoteke

  • Sprejmejo vhodne parametre
  • Vračajo rezultat (ali pa ne)

    • Če jih je več, jih vrnemo kot vektor
    • Te nove funkcije so potem povsem enakovredne v MATLAB vgrajenim
    • Če jih napišemo "lepo", je na voljo tudi pomoč

      • help mojaFunkcija
  • Vse spremenljivke, uporabljene v funkciji, so "lokalne", torej jih po uporabi funkcije "ni"
  • Praviloma vse ukaze zaključujemo s ;

    • Ne želimo, da bi funkcija med izračunavanjem "pacala" po zaslonu

Zgled

  • Sestavimo funkcijo, ki vrne vsoto elementov i-te vrstice dane matrike M
  • M = …
  • Kako dobiti i-to vrstico

    • M(i,:)
  • Kako sešteti elemente vektorja

    • sum
  • sum(M(i,:))

Definicija funkcije

function vsota = vsotaVrstice(i, M)
   vsota = sum(M(i,:));
end

oziroma

function [vsota] = vsotaVrstice(i, M)
   vsota = sum(M(i,:));
end

Prikaz

(slika_matlab33.png)

Preizkus

  • Shranimo na datoteko z istim imenom, kot jo ima funkcija
  • Preizkusimo s klikom na zeleni trikotnik Prikaz

    • Težave
    • Kako podati "vhodne" podatke

      • Črna puščica ob zelenem trikotniku Prikaz
(slika_matlab34.png)
(slika_matlab35.png)

Prikaz

(slika_matlab36.png)

vsotaVrstice.m

function [ vsota ] = vsotaVrstice( i, M )
%vsotaVrstice vrne vsoto i-te vrstice matrike M
    vsota = sum(M(i,:));
end

Pomoč

  • >> help vsotaVrstice
  • vsotaVrstice vrne vsoto i-te vrstice matrike M
  • Kar napišemo kot komentar takoj pod glavo funkcije
  • Funkcija vrne tisto, kar je ob zaključku funkcije v spremenljivkah, ki smo jih definirali kot rezultat

Funkcija s tremi rezultati

Sestavimo funkcijo, ki vrne sinus, cosinus in tangens danega kota.

Prikaz

(slika_matlab37.png)

trigFun.m

function [ sin, cos, tan ] = trigFun( x )
%trigFun(x) Vrne vrednosti vseh treh trikonometričnih fukcij
%   kot x je podan v stopinjah
%   Zgled:
%       [o1, o2, o3] = trigFun(30)
%       o1 =
%           0.5000
%       o2 =
%           0.8660
%       o3 =
%           0.5774
    if nargin() == 0
        x = 30;  % privzeta vrednost je 30
    end
    disp('računam: ')
    sin = sind(x);
    cos = cosd(x);
    tan = tand(x);
end

Uporaba

  • Klic

    • trigFun(90)
  • vrne le prvi rezultat !

Prikaz

(slika_matlab38.png)

Zgled – polinom in njegove ničle

(slika_matlab39.png)

Predpostavke

  • Ničle so vse realne
  • So na intervalu a, b
  • Polinom

    • pol = [1, 1, -4, -4] % koeficienti polinoma
    • roots(pol) % ničle polinoma
    • polyval(pol, x) % vrednost polinoma v x
  • Funkcija

    • function narisiPolinom(pol, a, b)
    • Ne vrača vrednosti – ima le učinek

Polinom

function Polinom( pol, a, b )
%Polinom(pol, a, b) nariše polinom in označi ničle polinoma na [a, b]
%   vse ničle morajo biti realne in ležati na intervalu [a, b]
%   pol: vektor koeficientov polinoma

    nicle = roots(pol);
    yNicel = zeros(size(nicle)); % y pri ničlah je seveda 0
    x = linspace(a, b, 100);
    y = polyval(pol, x);  % vrednost polinoma v x-ih
    % risanje
    figure(); % na novo sliko
    plot(x,y) % graf polinoma
    hold on % ničle morajo biti na istih točkah
    plot(nicle,yNicel,'o') % označimo ničle
    plot([a,b],[0,0],'r') % še premica y = 0

end

Polinom.m

function Polinom( pol, a, b )
%Polnimo(pol, a, b) nariše polinom in označi ničle polinoma na [a, b]
%   vse ničle morajo biti realne in ležati na intervalu [a, b]
%   pol: vektor koeficientov polinoma

    nicle = roots(pol);
    yNicel = zeros(size(nicle)); % y pri ničlah je seveda 0
    x = linspace(a, b, 100);
    y = polyval(pol, x);  % vrednost polinoma v x-ih
    % risanje
    figure(); % na novo sliko
    plot(x,y) % graf polinoma
    hold on % ničle morajo biti na istih točkah
    plot(nicle,yNicel,'o') % označimo ničle
    plot([a,b],[0,0],'r') % še premica y = 0
end

Koristni ukazi

  • nargin

    • Preverimo število argumentov
  •  if nargin() == 0
      x = 30;  % privzeta vrednost je 30
     end
  • Pozor na ;

    • Drugače bo funkcija "puščala sled"
  • disp

    • Izpis na zaslon

Zvezdno nebo

(slika_matlab40.png)

Koda

function zvezde(t)
%zvezde(t) nariše t krat 50 zvezdic
    if (nargin < 1) % če pokličemo brez argumentov
        t = 1;
    end
    n = t * 50;

    colordef black; % črno ozadje
    plot(rand(1,n), rand(1,n),'*'); %n naključnih točk
    axis off % brez osi
    title('Zvezdno nebo');
end

zvezde.m

function zvezde(t)
%zvezde(t) nariše t krat 50 zvezdic
  if (nargin < 1) % če pokličemo brez argumentov
    t = 1;
  end
  n = t * 50;

  colordef black; % črno ozadje
  plot(rand(1,n), rand(1,n),'*'); %n naključnih točk
  axis off % brez osi
  title('Zvezdno nebo');
end
0%
0%