Download - CURS_4.pdf

Transcript
  • CURS 4

    1

    CURS 4

    Structura programelor MATLAB

    MATLAB-ul lucreaz fie n modul linie de comand, situaie n care fiecare linie este prelucrat imediat i rezultatele sunt afiate, fie cu programe coninute n fiiere. Aceste dou moduri formeaz mpreun un mediu" de programare.

    Fiierele ce conin instruciuni MATLAB se numesc fisiere-M (deoarece au extensia ,,.m) i sunt programe MATLAB. Un fiier-M const dintr-o succesiune de instruciuni MATLAB, cu posibilitatea apelrii altor fisiere-M precum i a apelrii recursive.

    Un program MATLAB poate fi scris sub forma fiierelor script sau a fiierelor function. Ambele tipuri de fiiere sunt scrise n format ASCII, iar algoritmul care a fost implementat poate fi urmrit cu foarte mult uurin, dac se cunosc conveniile i sintaxa MATLAB. Aceste tipuri de fiiere, obligatoriu cu extensia *.m, permit crearea unor funcii noi care le pot completa pe cele deja existente. Prin aceast facilitate, MATLAB-ul poate fi extins la aplicaii specifice utilizatorului, care are posibilitatea s scrie noi proceduri.

    Fiierele script

    Un fiier script este un fiier extern care conine o secven de comenzi MATLAB. Prin apelarea numelui fiierului, se execut secvena MATLAB coninut n acesta. Dup execuia complet a unui fiier script, variabilele cu care acesta a operat rmn n zona de memorie a aplicaiei (workspace). Aceste fiiere nu permit integrarea n programe mari, realizate pe principiul modularizrii. Fiierele script sunt folosite pentru rezolvarea unor probleme care cer comenzi succesive att de lungi, nct ar putea deveni greoaie pentru lucrul n mod interactiv, adic n modul linie de comand.

    Fiierele funcie

    Dac prima linie a fisierului-M conine cuvntul function, fiierul respectiv este declarat ca fiier funcie. O funcie difer de un ,script prin faptul c poate lucra cu argumente. Variabilele definite i manipulate n interiorul fiierului funcie sunt localizate la nivelul acesteia. Prin urmare, la terminarea execuiei unei funcii, n memoria calculatorului nu rmn dect variabilele de ieire ale acesteia.

    Fiierele funcie sunt utilizate pentru extinderea MATLAB-ului, adic pentru crearea unor noi funcii MATLAB. Forma general a primei linii a unui fiier funcie este:

    function [param_ieire]= nume_funcie(param_intrare)

    unde:

    function - este cuvnt cheie care declar fiierul ca fiier funcie (obligatoriu); nume_funcie - numele funciei, adic numele sub care se salveaz fiierul, fr extensie. Nu poate fi identic cu cel al unui fisier-M preexistent.

    param_ieire - parametri de ieire trebuie separai cu virgul i cuprini ntre paranteze drepte. Dac funcia nu are parametri de ieire, parantezele drepte i semnul egal nu mai au sens.

  • CURS 4

    2

    param_intrare - parametri de intrare trebuie separai cu virgul i cuprini ntre paranteze rotunde. Dac funcia nu are parametri de intrare, parantezele rotunde nu mai au sens.

    Aceste fiiere pot fi adugate ca funcii noi n structura MATLAB. Comenzile i funciile care sunt utilizate de noua funcie sunt nregistrate ntr-un fiier cu extensia .m. Prima linie a fiierului trebuie s conin definiia sintactic a noii funcii. De exemplu, un fiier funcie numit medie.m", care calculeaz media aritmetic, poate avea urmtoarea form:

    Exemple de implementat la laborator (utilizarea funciilor n MATLAB)

    1. calculul mediei aritmetice a n numere introduse ca un vector coloan

    function m=medie(x) n=length(x); s=0;

    for i=1:n

    s=s+x(i); end

    m=s/n;

    Apelai funcia n linia de comand dup ce ai introdus un vector coloan:

    a=[1 2 3 4 5]

    med=medie(a)

    Integrarea sistemelor de ecuaii difereniale

    Pentru o ecuaie diferenial de ordin n>1, dat sub forma:

    (1) ( ) ( ) ( )0 0 0

    . .. ( 1)0

    . ( 1)0 1 0 2 0

    d, , , ,... , ; ,

    d

    , ,...,

    nn fn

    nn

    y f t y y y y t t tt

    y t y y t y y t y

    =

    = = =

    ,

    se poate opta pentru alegerea noilor variabile astfel:

    (2) ( 1) ( ) ( ), 1,i iy t z t i n = = , obinndu-se un sistem de ecuaii difereniale n variabila z:

  • CURS 4

    3

    (3)

    ( )

    .

    1 2.

    2 3

    .

    1 2

    ...

    , , ,...,n n

    z z

    z z

    z f t z z z

    =

    =

    =

    ,

    cu condiia iniial ( ) 0 0 0 00 1 1 ...T

    n nz t z y z y = = = .

    Elemente necesare pentru integrarea numeric a EDO: Aceste elemente trebuie vzute drept date de intrare care sunt furnizate unei metode numerice de

    integrare. Ele sunt listate mai jos: 1) Ecuaia diferenial de rezolvat trebuie mai nti adus la forma (3) printr-o schimbare de

    variabil adecvat; rezult astfel un sistem de ecuaii difereniale de dimensiune egal cu ordinul

    ecuaiei, n, care descrie legtura dintre derivatele celor n noi variabile, .

    iz , i valorile lor nederivate, iz ; 2) intervalul de integrare dat prin capetele acestuia, 0t i ft ;

    3) condiiile iniiale, sub forma unui vector de dimensiune n, 0 00 1 ...

    Tny y y = ;

    4) pasul de integrare, notat cu h n toate metodele de integrare se consider o diviziune de ordinul m a intervalului 0; ft t (o mprire a acestui interval n intervale de aceeai lungime, h), n ale crei puncte, { }0 , 0,...,kt t k h k n= + , se calculeaz valorile soluiei numerice a ecuaiei, notate cu

    ky , care sunt aproximri ale valorilor exacte, ( )ky t ; este intuitiv evident c soluia numeric se apropie cu att mai mult de soluia exact cu ct diviziunea este mai fin (pasul de integrare, h, este mai mic);

    5) un subprogram (funcie) care calculeaz valoarea funciei zf pentru orice moment de timp, t, i care va fi apelat la fiecare pas de integrare, kt , de programul unde este implementat metoda de integrare numeric;

    6) alte date care se constituie ca parametri constani n funcia zf .

    Metoda Taylor de ordinul 1, cunoscut i ca metoda Euler sau metoda Runge-Kutta de ordinul 1:

    (4) ( )1 ,k k k ky y h f t y+ = + ,

    Exemplu: Sa se scrie un program Matlab care sa realizeze integrarea numerica a sistemului de ecuatii diferentiale:

    ( )1 2

    2 2 11 25 5 252

    x x

    x x x

    =

    =

    Cerinte: - Se va utiliza metoda de integrare numerica Runge-Kutta de ordinal 1. - Se vor afisa grafic, in aceeasi figura, rezultatele obtinute prin integrare

  • CURS 4

    4

    Rezolvare: % program principal pentru integrare numerica clear all;close all; x=[7 10]; h=0.1; t0=0; tf=10; t(1)=0; i=1; for m=0.1:h:tf, x(i+1,:)=x(i,:)+h* func(t,x(i,:)); t(i+1)=m; i=i+1; end subplot(211); hold on; plot(t,x(:,1),'k'); subplot(212); hold on; plot(t,x(:,2),'k');

    % implementare sistem de ecuatii diferentiale function xd=func(t,x) xd(1)=x(2);

    xd(2)=1/2*(25-5*x(2)-25*x(1));

    n Matlab exist metode de integrare implementate (metode ODE). Una din metodele Matlab cele mai utilizate este ode45. Rezolvare:

    % program principal pentru integrare numerica clear all;close all; x0=[7 10]; t0=0; tf=10; [t,x]=ode45('func',[t0 tf],x0); subplot(211); hold on; plot(t,x(:,1),'k'); subplot(212); hold on; plot(t,x(:,2),'k');

    % implementare sistem de ecuatii diferentiale function xd=func(t,x) xd(1)=x(2); xd(2)=1/2*(25-5*x(2)-25*x(1)); xd=xd';

  • CURS 4

    5

    Teme: 1) Se vor rula toate instruciunile i exemplele din cadrul cursului. 2. S se calculeze funcia:

    ( ) 22 3, [ 10, 2]2 1, (2,20]x daca xf x

    x daca x+

    =

    pentru toate valorile ntregi pentru care este definit.

    3. S se integreze sistemul de ecuaii (folosind ambele metode prezentate n cadrul cursului): 1 1 2 3

    2 1 2

    3 1 2

    2 3 42

    2 2

    x x x x

    x x x

    x x x

    = +

    = +

    = + +