Matlab
Crearea fisierelor MATLAB (.m files)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:
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 Exemplu de fisier script: % 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 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 Se poate vizualiza fisierul cu comanda: » type rankfunction 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
Liniile urmatoare (care incep cu caracterul %) sunt linii de comentariu, care de fapt sunt si liniile afisate atunci cand se apeleaza la comanda » help rankRestul liniilor sunt executabile. Variabila Functia » 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 Exemplu: fisierul 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
Expresia eval(s)foloseste interpreter-ul MATLAB pentru evaluarea
expresiei sau executia declaratiei din sirul de caractere 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 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); 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 » p = fmins('humps',.5) p = 0.6370 Se poate acum evalua valoarea functiei in punctul de minim local: » humps(p) ans = 11.2528
|