CATEGORII DOCUMENTE |
Crearea fisierelor MATLAB (.m files)
Deoarece este mult mai comod si util decat introducerea comenzilor linie dupa linie la prompterul MATLAB, se lucreaza cu fisiere text care contin aceste linii program cu comenzile necesare.
Aceste fisiere contin cod in limbajul MATLAB si sunt denumite .m files (sau M-files). Fisierele se creeaza utilizand un editor de text si apoi se utilizeaza ca o comanda MATLAB obisnuita.
Sunt doua tipuri de fisiere .m:
Fisiere Script, care nu accepta argumente de intrare si nu returneaza argumente de iesire. Aceste fisiere opereaza cu datele din spatiul de lucru.
Rutine (functii), care accepta argumente de intrare si returneaza argumente de iesire. Variabilele utilizate sunt variabile locale (interne) ale functiei.
Pentru a vedea continutul unui fisier MATLAB, de exemplu evolutie_studii.m, se foloseste comanda:
type evolutie_studii
Fisiere Script
Atunci cand se apeleaza la un fisier script, MATLAB-ul executa comenzile gasite in fisierul respectiv. Fisierele script pot lucra cu date din spatiul de lucru (workspace) sau pot crea date noi cu care opereaza. Script-urile nu furnizeaza argumente de iesire, iar variabilele create raman in workspace, pentru a fi eventual folosite in calculele ulterioare.
Fisierele script pot
furniza iesiri grafice folosind functii cum ar fi plot,bar
.
Exemplu de fisier
script: magicrank.m,
cu
urmatoarele comenzi
MATLAB:
% Investigate the rank of magic squares
r = zeros(1,32);
for n = 3:32
r(n) = rank(magic(n));
end
r
bar(r)
La tastarea numelui fisierului script (fara extensia .m):
magicrank
MATLAB-ul executa comenzile, calculeaza
rangul unor matrici (matricile magice), si traseaza graficul cu
rezultatele calculului. Dupa ce se termina executia
fisierului, variabilele n
si r
raman in spatiul de lucru.
Graficul rezultat este prezentat in continuare:
Functii (rutine)
Aceste fisiere accepta argumente de intrare si furnizeaza argumente de iesire. Numele fisierului MATLAB (M-file) si cel al functiei (subrutinei) respective trebuie sa fie identice. Functiile (subrutinele) lucreaza cu variabile proprii separate de spatiul de lucru uzual al MATLAB-ului.
Exemplu: functia rank
. Fisierul M-file rank.m
este disponibil in
directorul
toolbox/matlab/matfun
Se poate vizualiza fisierul cu comanda:
type rank
function r = rank(A,tol)
% RANK Matrix rank.
% RANK(A) provides an estimate of the number of
% linearly independent rows or columns of a matrix A
% RANK(A,tol) is the number of singular values of A
% that are larger than tol.
% RANK(A) uses the default
% tol = max(size(A)) * norm(A) * eps.
s = svd(A);
if nargin==1
tol = max(size(A)) * max(s) * eps;
end
r = sum(s > tol);
Prima linie a unei
functii M-file incepe cu cuvantul cheie
function
. Aceasta linie da
numele functiei, ordinea si numarul argumentelor.
Liniile urmatoare (care incep cu caracterul %) sunt linii de comentariu, care de fapt sunt si liniile afisate atunci cand se apeleaza la comanda
help rank
Restul liniilor sunt
executabile. Variabila s, ca si
r
, A,
tol sunt variabile locale ale functiei si
sunt separate de variabilele din
workspace.
Functia rank
poate fi utilizata in
diferite moduri:
rank(A)
r = rank(A)
r = rank(A,1.e-6)
Variabile globale
Daca se doreste ca
mai multe astfel de subrutine sa utilizeze o anume variabila
comuna, se declara variabila respectiva ca globala
utilizand comanda global
in toate functiile respective.
Exemplu: fisierul falling.m
:
function h = falling(t)
global GRAVITY
h = 1/2*GRAVITY*t.^2;
Se introduc apoi in mod interactiv liniile:
global GRAVITY
GRAVITY = 32;
y = falling((0:.1:5)');
Functia eval
Functia eval
lucreaza cu
variabila text pentru implementarea unei facilitati puternice de
tip macro text.
Expresia
eval(s)
foloseste interpreter-ul MATLAB pentru
evaluarea expresiei sau executia declaratiei din sirul de
caractere s
.
Vectorizarea
Pentru a obtine o
viteza de calcul mare, este foarte importanta asa-numita vectorizare
a algoritmilor in fisierele MATLAB. Acolo unde alte limbaje folosesc bucle
de tip for
sau DO
, MATLAB-ul poate utiliza
operatii matriceale sau vectoriale.
Un exemplu simplu este urmatorul:
x = 0;
for k = 1:1001
y(k) = log10(x);
x = x + .01;
end
Versiunea vectorizata a aceluiasi program este
x = 0:.01:10;
y = log10(x);
Programatorii MATLAB spun uneori:
'Viata este prea scurta pentru a ti-o petrece scriind bucle!'
Atunci cand nu se poate elimina complet folosirea unei bucle se utilizeaza procedura de prealocare.
Functii de functii
In MATLAB exista o clasa de functii care lucreaza cu functii neliniare ca argument. Functiile de functii includ:
Gasirea zerourilor
Optimizare
Integrare numerica
Ecuatii diferentiale ordinare
MATLAB-ul reprezinta functia neliniara ca o functie M-file care poate fi ulterior utilizata ca argument de alte functii MATLAB.
Exemplu:
Urmatorul fisier creeaza o functie neliniara:
function y = humps(x)
y = 1./((x-.3).^2 + .01) + 1./((x-.9).^2 + .04) - 6;
Aceasta functie poate fi evaluata pentru un set de puncte in intervalul 0 x 1 cu programul:
x = 0:.002:1;
y = humps(x);
si apoi se poate reprezenta grafic functia cu comanda
plot(x,y)
Graficul arata ca
functia are un minim local la aproximativ x = 0.6. Daca de
exemplu utilizam functia fmins
putem gasi imediat valoarea exacta a
lui x . Primul argument al
functiei fmins
este chiar numele functiei pentru care
calculam minimul (al doilea parametru este o aproximare grosiera a
localizarii minimului).
p = fmins('humps',.5)
p =
0.6370
Se poate acum evalua valoarea functiei in punctul de minim local:
humps(p)
ans =
11.2528
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2974
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved