2.4 Exemple de probleme rezolvate cu calculatorul

 

 

       Problema P1.    În desfăşurarea unui proces chimic, pentru analiza şi controlul unui parametru y (temperatură, presiune, concentraţie, etc.), la timpii t1, t2, … ,tn  (n=800), se fac observaţiile y1, y2, …, yn, valori ce respectă legea data de curba numită absorbtţe –eliminare, şi care are  forma:

 

                            

 

unde   sunt coeficienţi nedeterminaţi, cu   iar t este variabila timp.  Să se determine:

 

a)     valoarea maximă observată  ymax =  ,  şi tmax

timpul la care este  observată valoarea maximă;

b)     coeficienţii astfel ca legea y(t) să aproximexe (modeleze)  optim evoluţia procesului chimic.

 

           Problema P2.  Se presupune că o suprafaţă agricolă trebuie să fie tratată impotriva   unor daunători cu o soluţie obţinută dintr-un amestec de apă + substanţă chimică.    Dacă amestecul obţinut trebuie utilizat într-o cantitate în funcţie de  aria suprafeţei agricole, să se determine în acest scop aria  unei suprafeţe ce este determinată de o linie poligonală oarecare şi închisă  P = P1P2Pn , unde punctele Pi (xi , yi ), i= 1…n sunt determinate de coordonatele carteziene  (xi , yi ), i= 1…n .

 

 

             Problema P3.  Un vas  conţine  2000 litri dintr-un lichid cu o concetraţie  de 80 % alcool. În  fiecare zi se scot din vas 15 litri şi se  înlocuiesc cu alţi 12 litri dintr-un lichid a cărui concentraţie  în alcool  este de numai 40 %.   După câte zile concentraţia  lichidului din vas ajunge la 50 % ?  (Marin VLADA,  O  problemă  a  lui  K.F  .Gauss rezolvata cu calculatorul”, Gazeta Matematică, nr.5/1995,  pag. 206-209) .

 

  

REZOLVĂRI

 

         Rezolvare P1.

 

Punctul a)

 

      Ţinând seama de faptul că se citeşte un volum mare de date (800 valori pentru timp şi 800 valori pentru parametrul y), este nevoie de utilizarea unui program care să fie utilizat pentru obţinerea valorilor maxime cerute. În acest caz, utilizatorul este confruntat cu o problemă simplă din punct de vedere a raţionamentului pentru rezolvarea problemei. Dificultatea poate interveni atunci când utilizatorul nu are cunoştinţe despre utilizarea calculatorului şi alegerea (dacă există) programului corespunzător. În cazul în care, după cautări, nu există program care să rezolve cerinţele problemei, utilizatorul este nevoit să elaboreze singur programul respectiv. Dacă vom presupune că nu există un astfel de program, atunci programul scris în mediul de programare Turbo/Borland/Windows Pascal (TP/BP/BPW) este următorul:

 

   program MAXIM ;                     secţiunea de declaraţii

 Var

     n,i : integer;

     Y, T : array [1..800] of real;

     Ymax, Tmax: real;                    introducerea datelor

 begin

     write (' Introduceti nr. de valori n= ');

     read ( n );

    

     write (' Introduceti valorile pentru timp T: ' );

     for   i:=1 to n do

           read ( T[i]);

     write (' Introduceti valorile observate Y: ' );

     for   i:=1 to n do

           read ( Y[i]);

   { se determina Ymax si Tmax}

   { procesul de calcul }                     procesul de calcul

    Ymax := Y[1]; Tmax := T[1];

    for i:=2  to n do

       if Ymax < Y[i] then

              begin

              Ymax:=Y[i]; Tmax := T[i]        scrierea rezultatelor

              end;

    writeln (' Valoarea maxima este Ymax = ',Ymax );

    writeln (' Timpul este Tmax = ',Tmax );

 end.

 

 

      Urmează ca utilizatorul să folosească mediul de programare TP (Turbo Pascal) sau BP (Borland Pascal), respectiv BPW, pentru a edita, compila, depana, executa şi  testa  programul cu ajutorul unui calculator.

 

q       Version 1.0.6 of the Free Pascal Compiler has been officially released. Hit the download link and select a mirror close to you to download your copy (Authors: Carl Eric Codčre, Daniël Mantione, Florian Klämpfl, Jonas Maebe, Michael Van Canneyt. Peter Vreman. Pierre Muller, Marco van de Voort).

Logohttp://www.freepascal.org/aboutus.html

 

 

Observaţie:  Utilizatorul trebuie să aibă cunoştinţe minime despre: utilizarea sistemelor de calcul,  utilizarea unui sistem de operare,  utilizarea diverselor programe, ce rezolvă probleme specifice unui anumit domeniu. În acelaşi timp utilizatorul este confruntat cu diverse probleme complexe care necesita scrierea uor programe, prin urmare utilizatorul trebuie să cunoască un mediu de programare pentru a scrie singur programele corespunzatoare, evident nu pentru probleme foarte complicate ce necesită experinţa unui profesionist(informatician). Pe de altă parte, la elaborarea mediilor de rezolvare pentru un anumit domeniu, informaticianul colaborează cu specialistul pentru implementarea metodelor/tehnicilor şi experienţei unui expert în domeniul respectiv.

 

 

 

 

 

 

Punctul b)

 

       Deja, suntem confruntaţi cu cerinţe ce nu sunt triviale, cu alte cuvinte se cere determinarea unei funcţii (legi) y(t) care să modeleze(aproximeze) optim procesul studiat.

 De fapt, avem de-a face cu o problemă de modelare matematică complexă şi dificilă pentru care s-au studiat şi elaborat diverse metode şi tehnici de rezolvare care au fost folosite la implementarea diverselor sisteme de programe ce sunt astăzi utilizate în astfel de situaţii, de exemplu MathCAD, STATISTICA, MATHEMATICA, etc., utilizatorul fiind cel care trebuie să decidă asupra cărui sistem de programe trebuie să se oprească.

 

       Este posibil ca în funcţie de cerinţele problemei, sistemul de programe ales să nu satisfacă exigenţele impuse de cerinţele problemei, şi astfel utilizatorul este nevoit să renunţe la sistemul de programe utilizat şi să aleagă utilizarea unui alt sistem de programe, dacă acesta există. De exemplu, sistemul STATISTICA oferă modele de regresie (fitting;  aproximare a dependenţei unui parametru faţă de alţi parametri pornind de la valorile măsurate în timpul desfaşurării unui proces) de tip:

 

·        linear    ( y = a+bx );

·        logaritmic  (y = a + b log10x );

·        exponential ( y = a ebx );

·        spline ( ajustare/rotunjire; aproximări cu curbe de gradul II sau III pe porţiuni);

·        polinomial (  ; polinom de gradul n );

·        Distance Weighted Least Squares ( MCMMP- metoda celor mai mici pătrate);

·        Negative Exponential Smoothing ( exponenţială negativă );

·        Custom Function ( funcţie introdusă de utilizator).

 

 

      Pentru cititorul interesat precizăm că cerinţele acestei probleme se încadrează în obiectul unui contract de cercetare pentru testarea şi omologarea medicamentelor, ce s-a materializat în sistemul de programe FARMACO ( autori : Denis ENACHESCU, Marin VLADA) şi care este prezentat în lucrarea : M. Vlada , A. Posea, Grafică automată în limbajul FORTRAN 77 şi Aplicaţii, ed. a II-a, Tipografia Universităţii Bucureşti, 1990(pag. 209-226). Prin urmare,  există situaţii când cerinţele unei probleme pot deveni temă de cercetare.

 

      Concluzie: Acest punct al problemei nu poate fi rezolvat cu cunoştinţele de la nivelul anului I, probabil (funcţie de programa analitică a cursurilor fundamentale şi opţionale) studentul de la Chimie/Fizică/Matematică poate să beneficieze de unele cunoştinţe de acest fel la unele cursuri aplicative din anii III, IV, sau prin programul de studii aprofundate (MASTER), eventual chiar prin programul de doctorat, care de fapt necesită elaborarea de cercetări originale.

 

 

 Rezolvare P2.

        

     Într-un sistem cartezian de axe XOY, considerăm un domeniu ce este determinat de o linie poligonală oarecare şi închisă  P = P1P2Pn , unde punctele Pi (xi , yi ), i= 1…n sunt determinate de coordonatele carteziene  (xi , yi ), i= 1…n . Evident, dacă forma domeniului este elementară, există formule de calcul pentru aria respectivă. În cazul prezentat, unde forma domeniului este oarecare, deci generală, rezolvarea depinde de cunoştinţele celui care este confruntat cu o astfel de problemă. Primul lucru ce trebuie realizat este acela de a “afla” daca există o formulă de calcul şi în cazul general, altfel utilizatorul trebuie să conceapă o metodă pentru calculul  ariei. Într-adevăr “există” o astfel de formulă, dar numai pentru cei care o cunosc (în general, cei care se confruntă cu astfel de cazuri generale: ingineri, informaticieni, matematicieni, etc.) :

 

                 

 

        Ca exemplu, prezentăm în figura de mai jos un domeniu oarecare determinat de 11 puncte date prin coordonate carteziene. Valoarea absolută din formula de mai sus este necesară, deoarece introducerea coordonatelor punctelor ce determină domeniu poate fi în sens trigonometric sau în sens invers celui trigonometric, aşa cum este în figura de mai jos.

 

        

 

 

           Programul scris pentru mediul de programare TP (sau BP/BPW) este urmatorul:

 

{---------------------------------------}

program Arie_Domeniu;

var

  n, i : integer;

  s ,  aria : real;

  x, y  : array[1..100] of real;

{-----------------------------------------}

begin

  writeln('Calculul ariei unui domeniu oarecare”);

  write('Dati nr. de virfuri ale poligonului n = ');

  readln(n);

  writeln('Dati coordonatele punctelor Xi Yi ');

  for i:=1 to n do

    readln(x[i], y[i]);

  {calculul ariei domeniului poligonal}

   x[n+1] := x[1];  y[n+1] :=  y[1];

   s := 0 ; { initializare ptr. aria poligonului}

   for i := 1 to n do

     s := s + x[i] * y[i+1] - y[i] * x[i+1] ;

   aria := abs(s / 2) ; {valoarea absoluta}

   writeln;

   writeln('Aria domeniului este = ', aria : 13:6);

end.

 

         Rezolvare  P3.

 

       Problema este prezentată în  [1], enunţul ei , aparent este al unei probleme simple, dar  interesantă din punctul de vedere a rezolvării ei, deoarece  problema a fost menţionată la vremea respectivă chiar de GAUSS. În [2] apare rezolvarea problemei cu calculatorul.

      Rezolvarea problemei nu este evidentă, după cum se va vedea în  cele ce urmează. Din punct de vedere matematic, rezolvarea necesită noţiuni şi concepte de matematică superioară din domeniul  ecuaţiilor funcţionale, şi anume a ecuaţiilor cu diferenţe  finite de ordinul I neomogene. În două articole ştiinţifice,  problema a fost rezolvată de către W. LOREY ( 1935 ) şi  A. WALTHER ( 1936 ). Din punct de vedere numeric, rezolvarea  problemei necesită cunoaşterea metodelor numerice specifice  rezolvării ecuaţiilor cu diferenţe finite. De altfel, W. LOREY  a şi utilizat o maşină de calcul pentru rezolvarea numerică  a unui ecuaţii cu diferenţe finite, aceasta deoarece a sesizat  faptul că soluţia se obţine după un număr considerabil de  iteraţii.

      Din punct de vedere informatic, rezolvarea va fi simplă  deoarece nu se va utiliza modelul matematic  (ecuaţia funcţională) obţinut din modelarea analitică a  problemei, ci un proces de calcul care simulează operaţiile  şi stările unor locaţii de memorie (acesta este de fapt  algoritmul care codifică rezolvarea problemei), şi care  implementat într-un limbaj de programare (de exemplu  Pascal) va rezolva problema în cazul general.

      Pentru a face comparaţia dintre soluţia algoritmică obţinută pentru calculator şi soluţia analitică, prezentăm succint rezolvarea dată de A. WALTHER. Vom considera problema în cazul general, de accea vom  face următoarele notaţii :

     a - cantitatea de lichid (în litri) conţinută iniţial în vas;

     b - cantitatea de lichid ce se scoate zilnic din vas;

     c - cantitatea de lichid ce se adaugă zilnic în vas;

     y0 - cantitatea de alcool pe litru (concentraţia de alcool)   a lichidului din vas la momentul iniţial;

     yp - cantitatea de alcool pe litru a lichidului ce se adaugă;

     yf  - cantitatea de alcool pe litru a lichidului din vas,  la momentul final;

     x - numărul de zile (operaţii de înlocuire a lichidului);

     y(x) - cantitatea de alcool pe litru a lichidului din vas după x operaţii de înlocuire a lichidului.

 

     Ecuaţia funcţională (ecuaţia cu diferenţe finite) pentru  determinarea funcţiei y(x), se obţine exprimând cantitatea  totală de alcool din vas după x zile, în două moduri :

 

      i) ( a - bx + cx ) y(x)

ii)     ( a - bx + c(x-1) ) y(x-1) + c yp  ,

 

unde  cazul ii) se obţine adunând cantitatea de alcool din lichidul  rămas în vas după

 (x-1) zile, din care s-au scot b litri, cu  cantitatea de alcool a celor c litri care se adaugă.

     Prin urmare, se obţine următoarea ecuaţie funcţională:

 

   (1)  ( a - bx + cx ) y(x) - ( a - bx + c(x-1) ) y(x-1) = c yp ,

 

   ecuaţie cu diferenţe finite de ordinul I neomogenă.

       Rezolvarea acestei ecuaţii este prezentă în [1], soluţia generală fiind

 

                              

 

 

    unde  este funcţia lui Euler dată de relaţia:

 

                                                  

       

        În cazul particular a=2000, b=15,  c=12,  y0=0.8,  yp=0.4,  y(x) este un polinom de gradul IV :

 

                         

 

   de unde, prin aproximare se deduce că y(194) = 0.50048, y(195) =  0.49963, prin urmare după x=195 zile se ajunge la concentraţia de 0.5 .

     În cazul rezolvării algoritmice, vom abandona metoda obţinerii ecuaţiei funcţionale şi rezolvarea ei analitică sau numerică, şi vom concepe algoritmul ce realizează procesul de calcul generat de cerinţele problemei. Pe lângă variabilele x, a, b, c, yp, yf cu semnificaţiile prezentate mai sus, vom utiliza şi următoarele variabile:

z  - cantitatea de alcool din vas la un moment dat ;

 t  - cantitatea de lichid din vas la un moment dat ;

 y0 - concentraţia de alcool din vas la un moment dat.

 

În cele ce urmează vom elabora algoritmul de rezolvare codificat într-un program Turbo/Borland Pascal/BPW :

{---------------------------------------}

program Problema_lui_GAUSS;

VAR

 x : integer;

 a, b, c, y0, yp, yf, z, t : real;

{---------------------------------------}

begin { M A I N }

  writeln('PROBLEMA LUI GAUSS - Concentratia de alcool ');

  writeln('         Autor :    M . Vlada ');

  write('Introduceti valori pentru parametri a, b, c : ');

  readln( a, b , c );  { cantitatile de lichid }

  write('Introduceti concentratiile de alcool y0,yp,yf :');

  readln( y0, yp, yf); { concentratiile de alcool }

  { initializari }

  x := 1 ;                     { numarul de zile curent }

  z := ( a - b) * y0 + c * yp ;{ cantitatea de alcool din vas}

  t := a - b + c ;             { cantitatea de lichid din vas}

  { y0 = concentratia de alcool din vas la un moment dat}

  while yf <   z  / t do  { proces iterativ }

     begin { determinarea valorilor pentru x, z, t, y0 }

       x := x + 1 ;

       y0 :=  z / t;    { concentratia de alcool din vas }

       z := ( t-b ) * y0 + c * yp ;

       t := t - b + c ;

     end;

  writeln('Starea finala dupa x= ', x:4,' zile :');

  writeln('      z, t, y0 = ', z:12:3, t:12:3, y0:12:7 );

  writeln('S-a obtinut concentratia ',yf:4:2,' dupa ',x:4,'

zile');

end.

{--------------------------------------------------------}

 

     Prin execuţia programului de mai sus, pentru valorile b=15, c=12,  y0 (iniţial) =0.8, yp=0.4,  yf=0.5 se obţin următoarele rezultate :

 

     -----------------------------------------------

            a             y0 (final)        x  (zile)

     -----------------------------------------------

         2000           0.5004515         195

         5000           0.5001438         488

       10000           0.5000983         976

     100000           0.5000064        9763

     ----------------------------------------------------------

 

      Bibliografie

 

 [1] GABRIEL SUDAN, Câteva probleme matematice interesante, Biblioteca SSM, Editura Tehnică, Bucureşti, 1969.

 [2] MARIN VLADA, O problemă a lui K.F. Gauss rezolvată cu calculatorul, Gazeta Matematică, nr. 5/1995.

 

© Universitatea din Bucureşti 2003
No part of this text may be reproduced in any form without written permission of the University of Bucharest,
except for short quotations with the indication of the website address and the web page.
Comments to:
MARIN  VLADA Text editor: MANUELA DUMITRU Last update: March, 2003