ia2_l3

Upload: cristian-mihai

Post on 05-Jul-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/15/2019 IA2_L3

    1/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  45

    L3. Elemente de programare MATLAB. Functii de interpolare numerica adatelor

    1. Scopul lucrarii

    Scopul acestei lucrari de laborator consta în însusirea principalelor elemente de programare MATLAB, respectiv în fixarea comenzilor si facilitatilor de interpolarenumerica a datelor.

    2. Chestiuni de studiat

    2.1. Fisiere de tip M2.2. Tipuri de variabile si de operatori2.3. Instructiuni de control logic2.4. Interactiunea program-utilizator 2.5. Operatii cu siruri de caractere2.6. Functii MATLAB de interpolare si aproximare a datelor 2.7. Aplicatii numerice

    3. Elemente teoretice si exemple de calcul

    3.1. Fisiere de tip M

    MATLAB lucreaza fie în mod linie de comanda, caz în care fiecare linie de instructiunieste prelucrata si rezultatele sunt imediat afisate, fie  utilizând programe scrise în fisiere.Fisierele ce contin instructiuni MATLAB se numesc fisiere M, întrucât au extensia .m. Un

    fisier M poate fi de doua tipuri, script sau function. Ambele tipuri de fisiere sunt scrise înformat  ASCII , iar algoritmul implementat poate fi urmarit si modificat cu usurinta daca secunosc conventiile si sintaxa limbajului de programare MATLAB. Aceste tipuri de fisiereM permit crearea unor noi functii care pot completa setul functiilor  MATLAB existente.Astfel MATLAB poate fi extins, permitând abordarea anumitor aplicatii specifice din stiinta

    si inginerie.

    3.1.1. Fisiere de tip script . Fisierele script   sunt fisiere externe de tip text care continsecvente de comenzi MATLAB. Prin apelarea numelui fisierului, se executa secventele decomenzi MATLAB continute în fisier. Dupa executia completa a unui fisier  script variabilele cu care acesta a operat ramân în Workspace. Aceste fisiere nu permit integrarea

    în programe mari, realizate pe principiul modularizarii. Fisierele   script  pot fi folosite larezolvarea unor probleme care necesita un numar relativ mare de instructiuni a caror lansarela linia de comanda ar deveni greoaie.

    3.1.2. Fisiere de tip function. În cazul în care prima linie a unui fisier M contine cuvântulcheie function fisierul respectiv intra în categoria fisierelor de tip function. Un fisier de tip

     function difera de un fisier de tip script  prin faptul ca accepta argumente de intrare. În plus,la terminarea executiei unei functii, în memoria calculatorului nu ramân decât variabilele deiesire ale functiei respective. Forma generala a primei linii a unui fisier functie este:

  • 8/15/2019 IA2_L3

    2/18

    46 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

     function [par_iesire1, par_iesire2...] = nume_functie(par_intrare1, par_intrare2...)  (1)

    unde : function reprezinta un cuvânt cheie obligatoriu prin care se declara ca fisierul este de tip

     functionnume_functie reprezinta numele functiei, adica numele sub care este salvat fisierul, însafara extensie. Numele functiei nu poate fi identic cu cel al unui fisier M deja existent.

     par_iesire1, par_iesire2 reprezinta parametri de iesire ce trebuiesc separati prin virgulasi cuprinsi între paranteze drepte. Daca functia nu are parametri de iesire, parantezeledrepte si semnul egal nu mai au sens.

     par_intrare1, par_intrare2  reprezinta parametri de intrare ce trebuiesc separati prinvirgula si cuprinsi între paranteze rotunde. Daca functia nu are parametri de intrare,

     parantezele rotunde nu mai au sens.

    Puteti construi propriile dvs. f isierele de tip functie ce pot fi adaugate ca functii noi în

    structura MATLAB. Instructiunile si comenzile utilizate o noua functie trebuiesc slavateîntr -un fisier de tip text cu extensia .m. De pilda creati si salvati în directorul curent fisierulde tip functie cu numele  medie.m,  care contine instructiunile de mai jos si care permitecalculul mediei aritmetice a elementelor unui vector:

     function m = medie(x) (2)n = length(x);

    m = sum(x)/n;

     y = ['Media aritmetica a numerelor este: ', num2str(m)];

    disp(y);

    Pentru a calcula media aritmetica a elementelor vectorului V = [1:100] , utilizând functia noucreata medie, se foloseste urmatoarea secventa de instructiuni MATLAB:

    » V = [1:100]  (3)» medie(V)

    Raspunsul MATLAB va fi urmatorul:

     Media aritmetica a numerelor este: 50.5 (4)ans =

      50.5000

    MATLAB transmite prin valoare doar argumentele functiilor pe care acestea le modifica.Daca o functie nu altereaza un argument ci doar îl utilizeaza în calcule, MATLAB transmiteargumentul prin referinta pentru a optimiza folosirea memoriei.

    Fiecar e functie MATLAB are alocata o anumita cantitate de memorie diferita deWorkspace-ul de baza MATLAB. Aceasta memorie reprezinta Workspace-ul functieirespective. În cursul rularii MATLAB-ului, singurele variabile pe care le puteti accesa suntcele din Work  space-ul curent, fie ca acesta este Workspace-ul de baza sau Workspace-ulunei functii. Variabilele pe care le transmiteti unei functii trebuie sa apartina

  • 8/15/2019 IA2_L3

    3/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  47

    Workspace-ului curent si functia întoarce argumente de iesire spre Workspace-ul curent.Puteti totusi sa definiti variabile ca variabile globale, acestea putând fi accesate din maimulte Workspace-uri.

    3.1.3. Includerea de comentarii si informatii de tip help   într-un fisier M. Introducereaunui comentariu într-un program se realizeaza prin adaugarea caracterului procent (%)

     plasat la începutul liniei. Daca semnul procent (%) apare pe prima pozitie într-o linie,aceasta va fi omisa de compilator, iar daca apare în oricare alta pozitie într-o linie de

     program, partea de program care urmeaza dupa acest caracter va fi omisa.Un comentariu poate aparea în oricare pozitie într-un program însa este recomandata

     pozitionarea comentariilor la începutul fisierului  script  sau dupa prima linie care declara ofunctie în cazul fisierelor de tip  function. În acest caz, comentariul respectiv care apare laînceputul unui fisier  script   sau imediat dupa linia de declarare a unei functii, constituiehelp-ul fisierului respectiv. Daca se apeleaza: help nume_script  sau help nume_functie seafiseaza liniile care încep cu semnul procent si sunt situate între prima linie de comentariu si

     prima linie libera în cazul fisierelor  script , respectiv între prima linie de comentariu dupadeclararea functiei si prima linie libera sau prima instructiune ce urmeaza acestui grupcompact de linii.

    Prin urmare pen tru a atasa un help unui program MATLAB se scriu liniile de programîncepând cu semnul procent (%) si se plaseaza între prima linie dupa declararea functiei si

     prima linie libera sau prima instructiune ce urmeaza acestui grup compact de linii.Dupa ultima linie a help-ului se lasa o linie libera sau se trece direct la o instructiune

    MATLAB, ca în exemplul de mai jos, care permite adaugare de informatii de tip helpfunctiei medie definite anterior :

     function m = medie(x) (5)

    % Functia calculeaza media aritmetica% a elementelor unui vector 

    % n reprezinta lungimea vectorului 

    n = length(x);

    m = sum(x)/n;

     y = ['Media aritmetica a numerelor este: ', num2str(m)];

    disp(y);

    Pentru a obtine informatii de tip help asociate functiei MATLAB medie.m definita ca maisus se foloseste sintaxa:

    » help medie   (6)

    MATLAB va afisa informatiile de tip help asociate functiei medie:

    Functia calculeaza media aritmetica   (7)a elementelor unui vector 

  • 8/15/2019 IA2_L3

    4/18

    48 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

    3.1.4. Crearea si editarea fisierelor M. Puteti crea si edita fisiere de tip  M folosind oricareeditor de text, cum ar fi Notepad, WordPad , etc. dar salvând fisierul sub format text. Pentrua fi considerate de catre MATLAB drept fisiere M, fisierele create cu aceste editoaretrebuiesc salvate cu extensia .m.

    3.2. Tipuri de variabile si de operatori

    3.2.1. Tipuri de variabile. MATLAB contine doua  tipuri de variabile:  locale si  globale.Regulile si recomandarile privind folosirea variabilelor în programarea MATLAB de tiplinie de comanda ramân valabile si în cazul programarii  utilizând fisiere de tip M . Astfeltrebuiesc avute în vedere urmatoarele aspecte:

     Nu este necesara declararea variabilelor folosite în fisiere M, în afara de cazul cândacestea trebuiesc declarate ca variabile de tip global ;Înainte de a asigna o variabila alteia, trebuie sa va asigurati ca variabila din dreaptaasignarii exista si are o anumita valoare;Orice operatie de alocare a unei valori unei variabile conduce la crearea variabilei dacaaceasta nu exista, sau în cazul în care aceasta deja exista, alocarea conduce la rescriereaunei noi valori în respectiva variabila;Verificarea numelui unei variabile poate fi efectuata folosind functia   exist   pentruasigurare ca numele este valid înainte de a fi folosit;La definirea unei variabile asigurati-va ca numele respectivei variabile nu este dejaafectat unei functii.

    3.2.1.1. Variabile locale. Functiile MATLAB au propriile lor variabile locale. Acestea suntseparate de variabilele altor functii si de acelea ale Workspace-ului de baza al MATLAB-ului. Variabilele definite într -o functie nu ramân în memorie de la un apel la altul al functiei,decât daca sunt definite ca variabile globale .

    Fisierele script   nu au Workspace   separat. Acestea stocheaza variabilele într-unWorkspace   care este partajat cu apelatorul scriptului. Când sunt apelate de la linia decomanda, acestea partajeaza Workspace-ul de baza. Când sunt apelate dintr-o functie,acestea partajeaza Workspace-ul acelei functii.

    3.2.1.2. Variabile globale. Daca o variabila de tip  global  este declarata în acelasi timp înmai multe functii si chiar în Workspace-ul de baza al MATLAB-ului, atunci toate acestea

     partajeaza o singura copie a acelei variabile. Orice alocare a acelei variabile în oricare dintrefunctii este vizibila pentru celelalte functii care au declarat acea variabila drept  globala.Fiecare functie MATLAB care foloseste variabile globale poate avea propriile sale variabilelocale. Înainte ca o functie sa poata folosi o variabila globala trebuie mai întâi sa declare

    aceasta variabila  globala. Declaratiile de variabile globale trebuiesc plasate la începutulfunctiei. De pilda pentru a declara variabila VAL   ca variabila  globala   se folosesteinstructiunea:

    » global VAL   (8)

    Daca fisierul M contine deasemenea subfunctii, atunci fiecare subfunctie care necesitaacces la variabila globala trebuie sa declare mai întâi variabila drept globala. Pentru a puteaaccesa o variabila globala de la linia de comanda, variabila respectiva trebuie mai întâideclarata ca fiind globala la linia de comanda.

  • 8/15/2019 IA2_L3

    5/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  49

    Se recomanda ca numele de variabile globale MATLAB sa fie în general mai lungi si mai

    sugestive decât numele variabilelor locale si sa contina litere mari. Aceste remarci nu suntobligatorii, ci sunt recomandari pentru a creste claritatea codului MATLAB si pentru areduce sansa de redefinire accidentala a unei variabile globale.

    Pentru a vizualiza doar variabilele declarate  globale, folositi functiile who sau whos cuspecificatia, global . Pentru exemplificare tastati  comenzile de mai jos:

    » global MAXLUNG MAXLAT    (9)» MAXLUNG = 36; MAXLAT= 78;

    » lung = 5; lat = 21;

    » whos global  (10) Name Size Bytes Class

      MAXLUNG 1x1 8 double array (global)

      MAXLAT 1x1 8 double array (global)

    Grand total is 2 elements usin g 16 bytes

    Exista câteva sugestii în ceea ce priveste folosirea variabilelor  globale. În primul rândtrebuie stiut faptul ca exista un anumit risc asociat folosirii nejustificate a variabilelor globale si din aceasta cauza se recomanda sa le utilizati fara abuz.

    Ati putea de exemplu, fara sa stiti, sa dati în interiorul unei functii, un nume uneivariabile globale care este deja folosit pentru o variabila globala din alta functie. Cândlansati aplicatia, o functie poate suprascrie neintentionat variabila folosita de cealaltafunctie. Acest tip de eroare este uneori dificil de depistat.

    O alta problema apare când doriti sa schimbati numele variabilei. Pentru a face oschimbare fara a introduce o eroare în aplicatie, trebuie sa gasiti fiecare aparitie a aceluinume în codul dvs.

    3.2.2. Tipuri de operatori. Exista trei tipuri de operatori MATLAB: operatori aritmetici(prezentati în lucrarile de laborator anterioare), operatori relationali si operatori logici.Operatorii relationali permit compararea cantitativa a doua marimi, Tabel 2.

    Tabel 2Operator Descriere

    < Mai mic decât Mai mare decât>= Mai mare sau egal cu= = Egal cu~ = Diferit de

    Operatorii logici sunt folositi la diverse operatii logice MATLAB, dupa cum este prezentat în Tabelul 3. Pentru exemplificare se considera A = [0 1 1 0 1], B = [1 1 0 0 1].

    Tabel 3Operator Descriere Exemplu

    & Întoarce 1 pentru fiecare locatie de element care esteadevarata în ambii vectori

    A & B = [0 1 0 0 1]

    | Întoarce 1 pentru fiecare locatie de element care esteadevarata în unul sau în celalalt vector

    A | B = [1 1 1 0 1]

  • 8/15/2019 IA2_L3

    6/18

    50 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

    ~ Întoarce 0 pentru fiecare locatie de element care esteadevarata si 1 pentru fiecare locatie de element care estefalsa

    ~A = [1 0 0 1 0]

    xor    Întoarce 1 pentru fiecare locatie de element care esteadevarata doar într-un vector si 0 pentru toate celelalte

    elemente

    xor(A, B) = [1 0 1 0 0]

    3.3. Instructiuni de control logic

    Exista mai multe instructiuni de control logic care se folosesc în mod curent în a plicatiileMATLAB.

    3.3.1. Instructiunea   if.   Instructiunea   if   împreuna cu   else si elseif , executa un grup deinstructiuni în cazul în care este îndeplinita o anumita conditie logica, conform sintaxeigenerice de mai jos:

    if expresie_logica   (11)  instructiuniend 

    Daca expresie_logica este adevarata (valoarea 1), MATLAB executa toate instructiunilecuprinse între if si end . Ulterior programul continua executia cu instructiunea situata pe liniaimediat urmatoare dupa instructiunea end . Daca expresia logica este falsa (valoarea 0),MATLAB sare peste toate instructiunile cuprinse între   if  si end   si continua executiaîncepând cu linia situata imediat dupa instructiunea end . De exemplu   tastati  urmatoareasecventa de instructiuni:

    » a=3; (12)» b=2;

    » if a>b

    disp('a este mai mare decât b')

    elseif b>=a

      disp('b este mai mare sau egal cu a')

    end 

    3.3.2. Instructiunea while. Instructiunea while executa un grup de instructiuni de un numar de ori determinat de îndeplinirea unei conditii logice. Sintaxa generica a instructiunii whileeste:

    » while expresie_logica

      instructiuni (13)end 

    Daca expresie_logica este adevarata sunt executate instructiunile cuprinse între  while siend . Tastati  spre exemplificare comenzile de mai jos:

    » n = 1; (14)» while prod(1:n) < 1e100

      n = n + 1

    end 

  • 8/15/2019 IA2_L3

    7/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  51

    3.3.3. Instructiunea  for. Instructiunea   for  executa un grup de instructiuni de un numar impus de ori. Sintaxa generica a instructiunii este:

    » for index = n1:increment:n2 (15)  instructiuniend 

    Incrementul implicit este 1. Puteti specifica orice increment, inclusiv unul negativ. Pentru

    indici pozitivi, executia se termina când valoarea indexului depaseste valoarea n2; pentruincrement negativ, bucla se încheie atunci când indexul devine mai mic decât valoarea n2.Tastati  secventa de instructiuni de mai jos:

    » m=3; (16)» n=5;

    » for i = 1:m

      for j = 1:n

      A(i, j) = 1/(i + j - 1)

      end end 

    3.3.4. Instructiunea break. Instructiunea break  termina executia unei bucle for sau whileca în exemplul de mai jos.

    » clc; (17)» clear all;

    » m=30;

    » for i = 1:m

      A(i) =floor(10*rand(1))

      if (A(i) ==0) break 

      end 

    end 

    În ultimele versiuni de MATLAB exista si   alte instructiuni de control logic cum ar ficontinue, switch, case, otherwise etc.

    3.4. Interactiunea program-utilizator

    Exista trei modalitati de interactiune a unui program cu utilizatorul pe durata executieiunui program MATLAB:

    Obtinerea unui raspuns de la tastatura;Definirea unei pauze pâna când utilizatorul apasa o tasta;Constructia unei interfete grafice cu utilizatorul,   (posibila în versiunile recente deMATLAB), chestiune care nu va fi tratata în acest material.

    3.4.1. Obtinerea unui raspuns de la tastatura. Functia input   afiseaza un prompt siasteapta un raspuns al utilizatorului. Sintaxa functiei este

    » n = input('prompt_string') (18)

  • 8/15/2019 IA2_L3

    8/18

    52 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

    Functia afiseaza sirul de caractere  prompt_string , asteapta raspunsul de la tastatura siapoi afecteaza valoarea introdusa variabilei n. Daca utilizatorul introduce o expresie, functiao evalueaza si întoarce valoarea acesteia. Aceasta functie este folositoare pentruimplementarea aplicatiilor cu meniu. Functia input  poate întoarce deasemenea un raspuns alutilizatorului de tip   string . Pentru un raspuns de tip   string , adaugati   's'  ca argument alfunctiei:

    » adresa = input('Introduceti adresa: ','s'); (19)

    3.4.2. Definirea unei pauze.   Anumite fisiere M necesita definirea unor pauze întreexecutiile anumitor pasi. Comanda pause, fara nici un argument, opreste executia pâna cândutilizatorul apasa o tasta. Pentru a face o pauza de n  secunde, folositi functia sub forma pause(n).

    3.5. Operatii cu siruri de caractere

    MATLAB pune la dispozitia utilizatorului o biblioteca de functii cu siruri de caractere,câteva dintre acestea fiind prezentate în Tabelul 4.

    Tabel 4Categorie Functie Descriere

    blanks   Creaza siruri de blancuriGeneraladeblank  Sterge blancurile de la sfârsitul sirurilor de caractere

     findstr  Cauta un sir de caractere în altullower  Converteste un sir de caractere în litere micistrcmp Compara siruri de caracterestrrep Înlocuieste un sir de caractere cu altul

    Operatii cu siruri 

    de caractere

    (stringuri)

    upper  Converteste siruri de caractere în litere mariisletter  Întoarce adevarat în cazul literelor alfabetuluiTeste pe siruri de

    caractere   isspace Întoarce adevarat în cazul blancurilor int2str  Converteste întregi în siruri de caracteremat2str  Converteste matrice în siruri de caracterenum2str  Converteste numere în siruri de caracteresprintf  Scrie date formatate în siruri de caractere

    Conversie între

    siruri de

    caractere si  

    numere

    str2num Converteste sirurile de caractere în numere

    De pilda pentru a solicita utilizatorului introducerea interactiva a numelui de familie se poate folosi urmatoarea secventa de comenzi MATLAB:

    » nume = input('Introduceti numele dvs. de familie : ','s');   (20)

    MATLAB va afisa mesaj de mai jos. Presupunem ca numele introdus este Ionescu:

    » Introduceti numele dvs. de familie: Ionescu   (21)

    Daca se face apel la functia MATLAB:

  • 8/15/2019 IA2_L3

    9/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  53

    » isletter(nume), (22)

    raspunsul MATLAB va fi urmatorul:

    ans = (23)

      1 1 1 1 1 1   1

    Acest sir de valori binare (0 si 1) are lungimea egala cu lungimea sirului nume. Valoarea1 asociata unui caracter indica faptul ca acel caracter este de tip litera, iar valoarea  0 indicafaptul ca acel caracter nu este de tip liter a.

    Pentru a testa daca sirul de caractere introdus de la tastatura si atribuit variabilei numecontine doar litere se poate face apel la functia MATLAB de mai jos, care furnizeazavaloarea 0 daca sirul initial contine doar litere, respectiv diferit de zero daca sirul cont ine sicaractere diferite de literele alfabetului:

    » length(nume)-sum(isletter(nume)) (24)

    Raspunsul MATLAB este cel de mai jos, ceea ce înseamna ca sirul introdus contine doar litere:

    ans = (25)  0

    3.6. Functii MATLAB de interpolare si aproximare a datelor

    Interpolarea unui set discret de date [xi, yi] presupune determinarea unei functii f(x) astfelîncât f(xi) = yi, în vederea completarii setului de date în orice alt punct x0   xi. Spreexemplu, fie date punctele de coordonate (x1, y1) si (x2, y2), se cere estimarea valorii y(x), în

    cazul în care x1

  • 8/15/2019 IA2_L3

    10/18

  • 8/15/2019 IA2_L3

    11/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  55

    temperaturii   Teta   din 10 în 10 secunde, folosind interpolarea liniara, cubica   si  splinecubica si se vor reprezenta pe acelasi grafic rezultatele obtinute.

    Tabel 5Teta [°C] 20 60 120 200 300 430Timp [sec.]   0 30 60 90 120 150

    În acest sens se foloseste secventa de comenzi MATLAB de mai jos.

    » Timp = [0 30 60 90 120 150]; (28)» Timpn = 0:10:150;

    » Teta = [20 60 120 200 300 430];

    » Tetal = interp1(Timp, Teta, Timpn, 'linear');

    » Tetas = interp1(Timp, Teta, Timpn, 'spline');

    » Tetac = interp1(Timp, Teta, Timpn, 'cubic');» plot(Timp, Teta,'ro', Timpn, Tetal, 'g', Timpn, Tetas, 'b', Timpn,Tetac, 'm');

    » xlabel( 'Timp [s]'  );

    » ylabel( 'Temperatura [grC]'  );

    Rezultatele grafice sunt prezentate în Fig. 2, în care se remarca o similitudine întreseturile de valori obtinute prin interpolare liniara, cubica si spline cubica.

    0 50 100 1500

    50

    100

    150

    200

    250

    300

    350

    400

    450

       T  e  m  p  e  r  a   t  u  r  a   [  g  r   C   ]

    Fig. 2. Rezultatele interpolarii multiple.

    3.6.2. Interpolarea functiilor de doua variabile.   Interpolarea functiilor de doua variabile presupune utilizarea unor functii MATLAB special destinate unor astfel de calcule, cum ar fi interp2 si griddata.

    3.6.2.1. Interpolarea multipla a functiilor de doua variabile. Functia interp2  permiteinterpolarea functiior de doua variabile dupa diferite legi si se apeleaza cu sintaxa:

  • 8/15/2019 IA2_L3

    12/18

    56 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

     zi = interp2(x, y, z, xi, yi,’metoda’) (29)

    unde ’metoda’  poate fi unul din cuvintele cheie:’linear’  sau ’bilinear’  –  pentru interpolare biliniara;

    ’cubic’  sau ’bicubic’   –  pentru interpolare bicubica;’spline’  –  pentru interpolare spline cubica;’nearest’  –  pentru interpolare de tipul cel mai apropiat vecin;

    ’Metoda’ implicita de interpolare este cea liniara.De pilda pentru o interpolare spline   a functiilor de doua variabile, functia interp2   seapeleaza cu sintaxa:

     zi = interp2(x, y, z, xi, yi,’spline’)   (30)

    Functia returneaza în matricea zi  valorile interpolate corespunzatoare lui xi si yi . Matricele x si y specifica punctele în care sunt date valorile lui  z . Daca  x  si  y  sunt vectori, valorile

    acestora trebuie sa fie monotone si egal distantate ca cele obtinute cu functia meshgrid .În cazul valorilor în afara intervalelor de definitie ale lui  x   si   y   se returneaza  NaN   înmatricea zi . In ultimele versiuni de MATLAB exista si alte sintaxe ale functiei interp2.

    3.6.2.2. Comparatie între metodele de interpolare. Pentru a compara rezultatele o btinutecu diverse metode de interpolare bidimensionala sa consideram o matrice de date dedimensiune 7 x 7 . Vom genera functia peaks cu o rezolutie slaba:

    » [x, y] = meshgrid( -3: 1: 3); (31)» z = peaks(x, y);

    » figure(1);

    » surf(x, y, z);

    » grid on;

    -4

    -2

    0

    2

    4

    -4

    -2

    0

    2

    4

    -6

    -4

    -2

    0

    2

    4

    6

    Fig. 3. Reprezentarea grafica a functiei peaks cu rezolutie slaba.

  • 8/15/2019 IA2_L3

    13/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  57

    Vom genera un mesh mai fin pentru interpolare.

    » [xi  yi] = meshgrid( -3: 0.25: 3); (32)

    Vom interpola datele folosind metodele ’nearest’, ’bilinear’, ’bicubic’ :

    » zi1 = interp2(x, y, z, xi, yi, 'nearest'); (33)» zi2 = interp2(x, y, z, xi, yi, 'bilinear');

    » zi3 = interp2(x, y, z, xi, yi, 'bicubic');

    Pentru comparatie vom trasa graficele obtinute cu functiile surf si contour , Fig. 4.

    » figure(2); (34)» surf(xi, yi, zi1); grid on;

    » figure(3);

    » surf(xi, yi, zi2); grid on;

    » figure(4);

    » surf(xi, yi, zi3); grid on;

    -4

    -2

    0

    2

    4

    -4

    -2

    0

    2

    4

    -6

    -4

    -2

    0

    2

    4

    6

    -4

    -2

    0

    2

    4

    -4

    -2

    0

    2

    4

    -6

    -4

    -2

    0

    2

    4

    6

    -4-2

    0

    2

    4

    -4

    -2

    0

    2

    4

    -6

    -4

    -2

    0

    2

    4

    6

    Fig. 4. Rezultatele interpolarii bidimensionale multiple ale functiei peaks.

    3.6.2.3. Interpolarea datelor pe un grid 2D. Aceasta facilitate a MATLAB-ului presupuneinterpolarea unui set de date functie de doua variabile în nodurile unui grid uniform 2D.Interpolarea datelor se efectueaza cu ajutorul functiei griddata care se apeleaza cu sintaxa:

     ZI = griddata(x, y, z, XI, YI) (35)

  • 8/15/2019 IA2_L3

    14/18

    58 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

    Datele initiale, stocate în trei vectori x , y, respectiv z = f(x, y), sunt interpolate pe un griduniform, stocat in matricele XI si YI  obtinute cu functia meshgrid . Valorile interpolate suntstocate in matricea ZI = f(XI, YI).

    Apelata cu sintaxa:

     [XI, YI, ZI] = griddata(x, y, z, XI, YI),   (36)

    functia  griddata întoarce matricea interpolata  ZI , ca mai sus, însa întoarce si matricele  XI ,YI .

    Sa consideram functia  22  y x xe z    calculata în 100 de puncte aleatoare în intervalul

    [-2; 2].

    » x = rand(100, 1)*4-2; y = rand(100, 1)*4-2;   (37)» z = x.*exp( - x.^2- y.^2);

    Vectorii  x , y, si  z  contin date neuniform distribuite. Vom defini un grid uniform si vom

    interpola datele pe acest grid:

    » gr = -2:.25:2; (38)» [XI,YI] = meshgrid(gr, gr);

    » ZI = griddata(x, y, z, XI, YI);

    Vom plota datele interpolate împreuna cu datele initiale folosite la interpolare:

    » mesh(XI, YI, ZI); hold on;   (39)» plot3(x, y, z, 'o'); grid on; hold off 

    -2-1

    0

    1

    2

    -2

    0

    2

    -0.5

    0

    0.5

    Fig. 5. Interpolarea datelor pe un grid, folosind functia griddata.

    3.6.3. Aproximarea polinomiala prin metoda celor mai mici patrate.   Pentru ca oaproximare a unui set de date de tip perechi   (xi, yi), i = 1...n, printr-o curba de tip

     polinomial, sa fie considerata cea mai buna, trebuie ca suma patratelor distantelor de lafiecare punct la curba aproximata sa fie minima. Luând în cosiderare aceasta conditie este

  • 8/15/2019 IA2_L3

    15/18

    MEDII DE CALCUL INGINERESC –  Îndrumar de laborator  59

     posibil ca nici un punct al setului de date sa nu se afle pe curba aproximata. Acest aspectsepara în mod evident notiunea de aproximare de cea de interpolare, în ultimul caz toate

     punctele fiind obligatoriu situate pe curba respectiva.În acest context, aproximarea setului de date presupune identificarea coeficientilor  ai  ai

    unui polinom de tipul:

     p(x) = a0 x n

    + a1 x n-1

     + a2 x n-2

     + ... + an-1 x 1 + an   (40)

    Daca setul de date are n elemente, toate datele se afla pe curba de aproximare. Pentru ungrad al polinomului mai mic decât lungimea setului de date, aproximarea este cu atât mai

     buna cu cât gradul polinomului este mai apropiat de lungimea setului de date. Utilizareaunui polinom cu grad mai mare decât lungimea setului de date poate conduce la erori deaproximare importante.

    Determinarea celei mai bune aproximari a unui set de date (x, y), cu un polinom de ordinn, presupune folosirea functiei MATLAB polyfit care se apeleaza cu sintaxa:

     p = polyfit(x, y, n) (41)Functia polyfit  gaseste coeficientii polinomului  p care aproximeaza cel mai bine setul de

    date, în sensul celor mai mici patrate.În apelul functiei, x  si y sunt vectori continând datele ce trebuiesc aproximate, iar n este

    ordinul polinomului rezultant.Sa consideram de pilda setul de date (x, y):

    » x = [1 2 3 4 5]; (42)» y = [5.5 43.1 128 290.7 498.4];

    Un polinom de ordinul 3 care aproximeaza setul anterior de date este:

    » p = polyfit(x, y, 3) (43)

    Rezultatul MATLAB este:

     p =   -0.1917 31.5821   -60.3262 35.3400 (44)

      Pentru a calcula valorile polinomului rezultant obtinut cu polyfit  pe un set de date mai finsi pentru a plota comparativ rezultatele urmati secventa MATLAB de mai jos. Functia

     polyval  permite calculul valorile polinomului într -un punct sau într -o succesiune de punctesub forma unui vector.

    » x2 = 1:.1:5; (45)» y2 = polyval(p, x2);

    » plot(x, y, ' r o', x2, y2 , 'b'  )

    » grid on

  • 8/15/2019 IA2_L3

    16/18

    60 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

    1 1.5 2 2.5 3 3.5 4 4.5 50

    50

    100

    150

    200

    250

    300

    350

    400

    450

    500

    Fig. 6. Aproximarea polinomiala a setului de date folosindfunctia pol  yval .

    4. Aplicatii numerice propuse spre rezolvare

     APLICATIA 1

    Scrieti instructiunile de mai jos (fara comentarii) în fisierul script  sistem.m.   Salvati fisierul în directorul curent si lansati în executie programul tastând la linia de comanda

    sistem.% Program de rezolvare a unui sistem de ecuatii de tipul A*x=b => x=A

    -1*b

    clear % Sterge toate variabilele din workspace

    clc % Sterge ecranul Command Window

    n=100; % Defineste numarul de necunoscute

    A = rand(n, n); % Creaza o matrice A de numere aleatoare

    b = rand(n, 1); % Creaza un vector coloana b de numere aleatoare

    tic, % Porneste cronometrul

    x1 = inv(A)*b; % Rezolva sistemul

    toc % Opreste cronometrul

    tic, x2 = A\b; toc % Rezolva sistemul si cronometreaza timpul de calcul Evaluati diferentele între solutiile x1 si  x2 calculate pe cele doua cai, folosind comandasum(abs(x1-x2)). Sunt diferente între cele doua solutii ? Care solutie este calculata mairapid ?

     Pentru a obtine informatii de tip help despre programul  sistem.m   tastati la linia decomanda help sistem.

  • 8/15/2019 IA2_L3

    17/18

  • 8/15/2019 IA2_L3

    18/18

    62 MEDII DE CALCUL INGINERESC –  Îndrumar de laborator 

     APLICATIA 7 

     Aproximati cu polinoame de gradele {0, 2, 4, 6} setul de date din tabelul de mai jos. Sa setraseze pe acelasi grafic, cu pas de dx=0.1 rezultatele obtinute, evidentiind setul de date

    initiale. X Y 1 5.52 43.13 128

    4 290.7 

    5 200

     APLICATIA 8

    Se da o bobina cu miez feromagnetic având caracteristicile prezentate în figura de mai jos. Curba de magnetizare a miezului feromagnetic se da în tabelul de mai jos si va t rebui

    introdusa într -un fisier text care sa fie citit de programul MATLAB. H [A/m] B [T]

    0 0500 0.21400 0.495000 1.088200 1.3411500 1.5315000 1.67 20000 1.8426800 1.96 36700 2.03

    57200   2.1

     Aplicând legea circuitului magnetic  NI dl  H    pe conturul închis sa se determine

    valorile inductiei magnetice Bo si a fluxului fascicular o în miezul magnetic (aceste valori se considera constante pe toata regiunea miez magnetic). Pentru rezolvarea problemei va trebui creat un fisier M care sa ceara interactivutilizatorului valorile celor trei parametri NI, L, si S. Pe baza acestora programul 

     MATLAB trebuie sa apeleze functia interp1 care sa faca interpolarea liniara a valorilor  B- H.

     În final se va trasa grafic curba de magnetizare B- H cu evidentierea punctului H o-Bo.

     APLICATIA 9

    Sa se interpoleze liniar  , cubic si spline cubic , cu pas de 500 A/m, curba de magnetizare B- H din aplicatia anterioara, folosind functia interp1. Sa se traseze pe acelasi grafic curbainitiala si curbele obtinute prin interpolare.

     NI=10000 AL=100 mm

    S = 900 mm2