Sunteți pe pagina 1din 25

METODE NUMERICE DE CALCUL

Tema 1. Erori de calcul numeric

(2 ore)

Tema 2. Calcularea numerică a şirurilor şi seriilor

(2 ore)

Tema 3. Rezolvarea numerică a ecuaţiilor neliniare şi transcendente

(4 ore)

Tema 4. Aproximarea funcţiilor de o variabilă

(4 ore)

Tema 5. Derivarea numerică a funcţiilor

(2 ore)

Tema 6. Integrarea numerică a funcţiilor

(4 ore)

Tema 7. Calcularea numerică a determinanţilor

(2 ore)

Tema 8. Rezolvarea sistemelor de ecuaţii liniare

(6 ore)

Tema 9. Rezolvarea numerică a ecuaţiilor diferenţiale

(6 ore)

Tema 10. Rezolvarea numerică a ecuaţiilor diferenţiale în derivate parţiale

(4

ore)

Tema 11. Metode de optimizare

(4

ore)

Tema 12. Exemple de modelare matematică şi rezolvare numerică a problemelor

(4

ore)

TOTAL ORE:

44 ore

Tema 1. Erori de calcul numeric. (2 ore)

a) Surse de erori: erori inerente, erori de trunchiere, erori de rotunjire. Erori absolute şi relative.

b) Propagarea erorilor la adunare, scădere, înmulţire şi împărţire.

c) Evaluarea erorii în calcularea expresiilor matematice.

a) Surse de erori. Erorile inerente sunt erorile legate de cunoaşterea aproximativă a unor valori provenite din măsurători sau din faptul că avem de-a face cu numere iraţionale (algebrice sau transcendente: numerele

ş.a. ). Evident, rezultatul oricăror calcule depinde şi de precizia datelor introduse iniţial. Ca erori

inerente pot fi considerate şi erorile de conversie făcute la trecerea în baza 2 a unor numere care se introduc în memoria calculatoarelor numerice actuale. Spre exemplu, numărul 0.1 reprezentat printr-un număr finit în baza 10, devine o fracţie zecimală periodică în baza 2 ( ). Erorile de metodă sau erorile de trunchiere sunt provenite din aproximaţiile făcute la deducerea formulelor de calcul. Spre deosebire de erorile inerente, erorile de metodă pot fi reduse, în principiu, oricât de mult. Erorile de rotunjire sunt legate de posibilităţile limitate de reprezentare a numerelor în calculatoarele numerice. În general, orice calculator poate reprezenta numerele cu un număr redus de cifre semnificative, depinzînd de lungimea cuvîntului (numărul de biţi) utilizat la stocarea unui număr. În mod curent se lucrează cu un echivalent de circa 7 cifre semnificative în simplă precizie şi de circa 15 cifre semnificative în dublă precizie. După cum se ştie, în memoria internă a calculatoarelor actuale se foloseşte reprezentarea în virgulă mobilă, în forma normalizată. Astfel, orice număr real x se scrie:

| unde m este un număr real denumit mantisă, b > 0 (b 1) este baza sistemului de numeraţie utilizat, iar n (număr întreg) este exponentul. În forma normalizată, mantisa este cuprinsă în intervalul [b -1 , 1), unde b -1 ≤ |m|< 1. Singura excepţie de la această regulă de reprezentare este numărul zero. În consecinţă, un număr real cu mai multe cifre semnificative este “retunjit” la un număr de cifre maxim. Acest lucru se realizează prin rotunjirea mantisei. Alte rotunjiri se efectuează în decursul operaţiilor. În general, notînd cu valoarea exactă a numărului şi cu ̅valoarea calculată (aproximativă), eroarea

̅

absolută se defineşte ca diferenţa dintre valoarea exactă şi cea aproximativă: ̅. Raportu

se numeşte eroare relativă, notată deseori cu ε x :

Fie t numărul de cifre semnificative. Dacă lucrăm în baza 10 (b = 10), atunci un număr x a cărui valoare

o presupunem inţial cunoscută cu exactitate, se va scrie:

|

⁄ ̅

.

|

|

|

|

[

unde g conţine cifrele care nu pot fi incluse în mantisa m. Rotunjirea se face de obicei simetric, adică se

înlocueşte |

|

dacă |

|

|

|

dacă |

|

.

În acest fel, marginea erorii relative este:

| Erorile cu marginea dată de formula de mai sus se fac la introducerea numerelor reale în memoria calculatorului numeric. Ele afectează rezultatele în funcţie de operaţiile la care sunt supuse valorile introduse.

|

.

|

|

|

|

b) Propagarea erorilor în calcule.

Propagarea erorilor la înmulţire. Vom considera două numere x şi y, introduse cu erorile e x şi e y :

̅

şi

̅

Presupunem că se efectuează produsul numerelor:

̅

(̅

)

̅̅

̅

̅

,

unde s-a neglijat produsul

considerat ca având un ordin de mărime suficient de mic. Rezultă eroarea la

.

înmulţire

̅̅

̅

̅

.

Rezultă că la înmulţire erorile relative introduse iniţial se adună. În afară de aceste erori, pot apărea

poate avea, la rîndul său, un număr de cifre semnificative mai mare

decât cel admis (notat cu t), necesitând o nouă rotunjire (simetrică). Notând cu

obţine eroarea relativă totală la înmulţirea a două numere: , iar ca margine a erorii:

| | | | | | | | . Desigur această evaluare este acoperitoare deoarece erorile nu se adună, ci se compun după legi mai complicate (probabilistice).

această nouă eroare, vom

însă noi erori, deoarece produsul

Propagarea erorilor la împărţire. ̅

Dacă considerăm

şi

̅

, atunci la împărţire vom scrie:

 

̅

̅

̅ (

 

̅ )

)

̅

unde am neglijat termenii de grad superior lui 2 în

şi

̅

̅ (

)

. S-a folosit dezvoltarea în serie Tylor pentru

. rezultă că eroarea relativă la împărţire, datorită erorilor de reprezentare în calculator

(

şi

), este :

̅

̅

(

)

adică este egală cu diferenţa erorilor relative introduse iniţial în valorile numărătorului şi numitorului. La ̅

, astfel

acestea se adaugă eroarea de rotunjire la prezentarea raportului încât eroarea relativă totală la împărţirea a două numere x şi y este:

̅, pe care o vom nota cu .

Propagarea erorilor la adunare.

În acest caz, suma a două numere este

 

̅

̅

, astfel încât eroarea relativă la

sumare este :

 

̅

̅

 

̅

̅

̅

̅

̅

̅

̅

̅

adică o sumă ponderată a erorilor introduse la reprezentarea în calculator a cantităţii sumate. Şi în acest caz ̅

.

se introduce o eroare suplimentară la reprezentarea sumei

̅, a cărei valoare relativă o vom nota cu

Ca urmare, eroarea relativă la sumare,

, va fi :

̅

̅

 

̅

̅

̅

̅

Exemplu: Scrieţi eroarea totală la calculul expresiei

 

̅

̅

̅. Rezultă :

̅

̅

̅

̅

̅

̅

cu marginea :

[ | ̅|

| ̅

| ̅ | ̅ |

]

c) Evaluarea erorii în calcularea expresiilor matematice. Ca rcomandare generală, în calculul numeric trebuie studiată şi propagarea erorilor. În anumite cazuri, acumularea erorilor poate conduce la rezultate complet eronate. Pentru a ilustra această posibilitate, să considerăm calculul integralei :

O modalitate de calcul o reprezintă utilizarea unei relaţii de recurenţă (recursie):

plecând de la valoarea

. Funcţia recursivă ce implementează această metodă în Delphi 7 este:

Function Metoda1(n : integer) : single; begin if (n = 0) then Metoda1 := 1 - 1 / exp(1) else Metoda1 := 1 - n * (Metoda1(n - 1)); end;

Se observă că, pentru n = 14, se obţine o valoare negativă a integralei, ceea ce nu este posibil, funcţia integrată fiind pozitivă din intervalul [0, 1]. Rezultă că valorile obţinute sunt eronate, începând cu o anumită valoare a lui n. Explicaţia o constituie faptul că valoarea integralei se calculează cu o eroare care este amplificată prin aplicarea formulei de recurenţă astfel că, la calculul eroarea este :

Pentru a obţine o valoare corectă în cazul indicilor n mari se aplică formula sub forma :

în care erorile sunt reduse la fiecare etapă. Prin urmare, plecînd de la un N suficient de mare eroarea introdusă din necunoaşterea valorii va fi redusă, astfel încât să obţinem rezultate corecte. Observând că valoarea integralei scade cu n, vom alege N=50 şi vom aproxima , calculînd integralele de indice mai mic din ce în ce mai precis. Funcţia recursivă este :

Function Metoda2(n : integer) : single; begin if (n = 50) then Metoda2 := 0 else Metoda2 := 1/n * (1 - Metoda2(n + 1)); end;

Tabelul cu rezultatele calculelor pentru n = 14 sunt:

Compilatorul

Tipul de date

metoda 1

metoda 2

 

Single:

-797,597290039063

0,0669476985931396

Borland Delphi 7

Double:

0,0627310804238732

0,0669477025756157

Extended:

0,0627321673911394

0,0669477025756157

 

Single:

   

Turbo Pascal 7.1

Double:

   

Extended:

   

Visual Studio C#

Float:

   

Double:

   

Visual Studio C++

Float:

Double:

Turbo C++

Float:

Double:

 

Float:

C++ Bulder

Double:

Extended:

Tema 2. Calcularea numerică a şirurilor şi seriilor (2 ore)

a) Calcularea numerică a sumelor şi produselor. Calcularea numerică a expresiilor matematice cu sume şi produse imbricate.

b) Calcularea numerică a seriilor Taylor.

c) Exemple de calculare a unor funcţii speciale.

d) Exemple de calculare a funcţiilor trigonometrice, exponenţiale, logaritmice.

a) Calcularea numerică a sumelor şi produselor. Calcularea numerică a expresiilor matematice cu sume şi produse imbricate.

Fie şirul de numere reale:

. Cu ajutorul lor putem să formăm şirurile:

Dacă şirul este convergent şi are limita s, atunci putem scrie :

obişnuieşte a scrie această egalitate astfel:

respective se numeşte serie şi operaţia de adunare reprezentată de o infinitate de ori capătă astfel un sens. Rezultatul acestei operaţii care este numărul s se numeşte suma seriei. O serie se notează astfel:

. Se . Partea dreaptă a egalităţii

Numerele parţiale ale seriei Spunem că seria

parţiale este convergent (are o limită), divergent (are o limită infinită) sau oscilant (nu are limită sau

se numesc şirul sumelor

se numesc termenii seriei iar

este converjentă, divergentă sau oscilantă, după cum şirul sumelor

are mai multe puncte limită). Teoremă: O condiţie necesară ca seria să fie convergentă este ca şirul format cu termenii seriei să fie convergent către 0.

Exemplu: Numărul e este definit ca sumă a seriei:

 

(

)

. Fie că limita şirului este (

) . Să considerăm mai întâi de toate numărul e ca

suma seriei

care este convergentă deoarece, după criteriul raportului,

(

)

(

)

Dacă notăm

şi

rezultă că

. Dacă găsim

o limită superioară a erorii pe care o facem asupra lui e oprindu-ne la primii

]

[

[

]. Deci,

termeni, observăm că :

sau

,

cu

. Pentru

avem

, deci rezultă că

zecimale exacte, trebuie să calculăm suma a cel puţin 17 termeni: :

funcţiile sunt:

. Pentru a calcula valoarea lui e cu 15

. În Delphi 7

function factorial(n: integer): integer; begin if (n = 1) then factorial := 1 else factorial := n * factorial(n - 1); end;

function fe(n: integer): extended; begin if (n = 0) then fe := 1 else begin fe := 1/factorial(n) + fe(n - 1); end; end;

În final trebuie să obţinem

.

b) Calcularea numerică a seriilor Taylor. În matematică, o serie Taylor este o reprezentare a unei funcții ca o sumă infinită de termeni calculați

din valorile derivatelor acelei funcții într-un punct şi poate fi privită ca limită a polinoamelor Taylor. În matematică se demonstrează că orice funcţie continuă poate fi reprezentată astfel:

unde:

,

reprezintă polinomul lui Taylor de gradul n; reprezintă restul.

este aproximativ egal cu

dar există totuşi o diferenţă mică. Aceasta este restul

Polinomul lui Taylor de grad

pentru un punct

este:

adică:

unde este factorialul lui şi este derivata de ori a funcţiei în punctul . Primul termen al

şi 0! Sunt amândouă

seriei rezultă din derivata zero a funcţiei

, care este prin definiţie

însăşi, şi

prin definiţie 1. Cu cât este mai aproape de cu atât este mai aproape de
prin definiţie 1.
Cu cât
este mai aproape de
cu atât
este mai aproape de
, adică
Restul în formula lui Lagrange are forma:
=
, unde
este cuprins între
şi
;
Şi restul în formula lui Cauchy are forma:
=
, unde
este cuprins între
şi
;
Pentru cazul particular când
se obţine formula lui MacLaurin:
adică:
c) Exemple de calculare a unor funcţii speciale.
Problema 1: Să se dezvolte în serie Taylor funcţia , pentru şi
. Creaţi
subprogramul respectiv în Delphi 7.
Rezolvare:
Conform formulei lui MacLaurin
efectuăm
calculele următoare :
1)
,
2)
(
)
,
3)
,
4)
,
5)
,
Deci
.

Reprezentarea funcţiei ca sumă este: , unde

Deoarece în această problemă se cere de calculat o sumă cu un număr infinit de termeni, se introduce

noţiunea de eroare (sau precizie), în baza căreia avem posibilitatea de a limita numărul de termeni care se calculează în sumă. De regulă în problemele de acest tip termenii se sumează pînă când valoarea curentă (de obicei notată cu vc) sau diferenţa absolută dintre valoarea curentă şi cea precedentă (notat în Delphi

| |) devine mai mică decât precizia ε.

Subprogramul creat în Delphi 7 este:

Procedure Polinom1(x, eps: extended; var rez: extended); var vc, vp, p: extended; i, k: integer;

begin vc:=1; k:=1; repeat p:=x; vp:=vc; for i:=1 to k do p:=p*x; vc:=vc+p;

k:=k+1;

until abs(vc-vp) < eps; rez:=vc; end;

Problema 2: Să se dezvolte în serie Taylor subprogramul respectiv în Delphi 7.

funcţia

pentru

şi

. Creaţi

Rezolvare:

Conform formulei lui MacLaurin

efectuăm

calculele următoare :

1)

,

2)

,

n)

,

Şi

deci

.

Fromula

de

dezvoltare

în

serie

Maclaurin

este:

.

Subprogramul creat în Delphi 7 este:

function ExpLaPutereX(x, eps: extended): extended; var s, p: extended; i, j, f: integer; begin s:=1; i:=1; repeat p:=1; f:=1; for j:=1 to i do begin p:=p*x; f:=f*j; end; s:=s+p/f;

i:=i+1;

until abs(p/f)<= eps; ExpLaPutereX:=s; end;

Problema 3: să se dezvolte în serie Taylor funcţia subprogramul respectiv în Delphi 7.

 

pentru

şi

. Creaţi

 

Rezolvare:

 

Conform formulei lui MacLaurin

 

efectuăm

calculele următoare :

 

1)

,

2)

,

3)

,

4)

,

5)

,

Din

calculele

de

mai

sus , iar pentru

observăm

derivatele

funcţiei

sunt

şi . Deci, seria

 

obţinem

şi

Tayor asociată este

Subprogramul în Delphi 7 este:

. Sub formă de sumă putem scrie:

.

Function SinMetoda1(x,eps:extended):extended; var s, p, f, TC: extended; j, i, k: integer; begin s:=x;

i:=1;

repeat

P:=1;

for j:=1 to (2*i+1) do P:=P*x;

f:=1;

for k:=1 to(2*i+1) do f:=f*k; if odd(i) then TC:=-P/f else TC:=P/f;

s:=s+TC;

i:=i+1;

until (abs(TC)<=eps);

SinMetoda1:=s;

end;

Dacă vom reprezenta grafic funcţia

şi şirul sumelor parţiale ale seriei

, atunci vom observa că seriile taylor se apropie din ce în ce mai mult de funcţia

corectă, cu cât creşte gradul. Imaginea de mai jos demonstrează graficul funcţiei şi aproximările Taylor, cu polinomul de grad 1, 3, 5, 7, 9, 11 şi 13:

Această metodă de calculare a funcţiei este foarte nesigură. Din ecuaţia sumei: ∑ se observă

Această metodă de calculare a funcţiei

este foarte nesigură. Din ecuaţia sumei:

se observă că pentru

şi dacă se calculează

atunci pentru ultima

valoare a lui se obţine raportul , ceea ce reprezintă împărţirea a două numere foarte

mari, iar calculele de asemenea gen efectuate în calculatorul numeric sunt însoţite de erori de calcul de asemenea foarte mari.

. formula sumei se observă că termenul curent (notat TC) se poate deduce din termenul precedent (notat

Din

Pentru a simplifica calculele se poate de folosit o altă metodă de calculare a funcţiei

TP). Dacă efectuăm raportul , atunci obţinem:

Deci, putem scrie:

(

)

Subprogramul în Delphi 7 este:

function SinMetoda2(x:extended;eps:extended):extended; var TC, TP, s:extended; n:integer;

begin TP:=x; s:=x;

n:=1;

repeat

TC:=-TP*sqr(x)/2/n/(2*n+1);

s:=s+TC; TP:=TC;

n:=n+1;

until abs(TC)<=eps;

SinMetoda2:=s;

end;

Problema 4: să se dezvolte în serie Taylor funcţia subprogramul respectiv în Delphi 7. pentru
Problema 4: să se dezvolte în serie Taylor funcţia
subprogramul respectiv în Delphi 7.
pentru
şi
. Creaţi
Rezolvare:
Conform formulei lui MacLaurin
efectuăm
calculele următoare :
1)
,
2)
,
3)
,
4)
,
5)
,
Deci, seria Tayor asociată este
. Reprezentarea funcţiei ca sumă
este:
.

Subprogramul în Delphi 7 este:

Function SinMetoda1(x,eps:extended):extended; var s, p, f, TC: extended; j, i, k: integer; begin s:=x; i:=1; repeat

P:=1;

for j:=1 to (2*i+1) do P:=P*x;

f:=1;

for k:=1 to(2*i+1) do f:=f*k; if odd(i) then TC:=-P/f else TC:=P/f; s:=s+TC;

i:=i+1;

until (abs(TC)<=eps);

SinMetoda1:=s;

end;

Problema 5: să se dezvolte în serie MacLaurin funcţia subprogramul respectiv în Delphi 7.

 

Rezolvare:

1)

,

2)

,

3)

,

4)

,

5)

,

Deci

. Fromula de dezvoltare în serie Maclaurin este:

Subprogramul creat în Delphi 7 este:

, unde

, unde

Creaţi

function LogNatural(x, eps: extended): extended; var s, sf, v, p: extended; i, j: integer; begin s:=0; i:=1; repeat p:=1; sf:=s; for j:=1 to i do p:=p*x; if odd(i) then v := p/i else v := -p/i; s:=s+v;

i:=i+1;

until abs(s-sf)<= eps; LogNatural:=s; end;

d) Exemple de calculare a funcţiilor trigonometrice, exponenţiale, logaritmice. Dezvoltaţi în serie Taylor următoarele funcţii reieşind din exemplele de mai sus şi scrieţi subprogramale pentru fiecare exemplu în Delphi:

a) ; b) ; c) ; d) ; e) ; Rezolvare: a) Reieşind din exemplul
a)
;
b)
;
c)
;
d)
;
e)
;
Rezolvare:
a)
Reieşind din exemplul
, înlocuim pe
cu
în polinomul de dezvoltare în serie Taylor
şi obţinem:
.
Reprezentarea funcţiei ca sumă este:
, unde |
|
.
b)
Reieşind din exemplul
, înlocuim pe
cu
în polinomul de dezvoltare în serie Taylor
şi obţinem:
.
Reprezentarea funcţiei ca sumă este: ∑
, unde |
|
.
c) Reieşind din exemplul
Taylor şi obţinem:
,
înlocuim pe
cu
în polinomul de dezvoltare în serie
.
d) Reieşind din exemplul
, şi înmulţind fiecare termen din această sumă
cu
, obţinem:

e) Pentru

a

dezvolta

în

serie

Taylor

funcţia

putem

, . Reieşind dina această formulă deducem că:

utiliza

formula

 

.

Respectiv, dacă înlocuim pe

cu

în polinomul de dezvoltare în serie Taylor:

 
 

,

atunci obţinem:

 
 

 

 

Tema 3. Rezolvarea numerică a ecuaţiilor neliniare şi transcendente (4 ore)

a) Metode analitice, grafice şi numerice de localizare a soluţiilor ecuaţiilor neliniare.

b) Metoda înjumătăţirii intervalului. Descrierea algoritmului şi implementarea lui într-un subprogram.

c) Metoda coardelor. Descrierea algoritmului şi implementarea lui într-un subprogram.

d) Metoda Newton. Descrierea algoritmului şi implementarea lui într-un subprogram.

e) Metoda iterativă. Descrierea algoritmului şi implementarea lui într-un subprogram.

f) Exemple de programe complexe pentru determinarea soluţiilor ecuaţiilor neliniare.

g) Determinarea rădăcinilor polinoamelor.

Sub noţiunea de ecuaţii algebrice neliniare se înţelege acele ecuaţii care conţin necunoscută la puterea diferită de unu, de exemplu:

Sub noţiunea de ecuaţii algebrice transcendente se înţeleg acele ecuaţii din care nu poate fi obţinută soluţie analitică în mod evident, se exemplu:

Ecuaţii iraţionale de tipul:

Ecuaţii exponenţiale:

Ecuaţiile logaritmice :

;

Ecuaţiile trigonometrice:

;

;

Pentru rezolvarea acestor ecuaţii este necesar mai întâi să se identifice printr-o anumită metodă intervalele pe care se află exact o rădăcină a ecuaţiei. Pentru ca ecuaţia să aibă o soluţie pe un interval [ ] este necesar ca funcţia să fie continuă, strict monotonă, adică să aibă acelaşi semn pe intervalul [ ] şi funcţia să prezinte schimbarea de semn: . Aceste condiţii pentru determinarea soluţiilor sunt echivalente cu următoarele

ipoteze:

[

]

este o funcţie continuă şi derivabilă;

{

;

are numai o singură soluţie pe [

]

. Metodele cele mai utilizate în calculul numeric aproximativ al soluţiilor unei ecuaţii care satisface ipotezele de mai sus sunt:

Metoda înjumătăţirii intervalului;

Metoda coardei;

Metoda tangentei (sau metoda Newton);

Metoda iteraţiilor;

a) Metode analitice, grafice şi numerice de localizare a soluţiilor ecuaţiilor neliniare. Izolarea soluţiilor prezintă o importanţă practică deosebită, deoarece nu ne interesează

găsirea

tuturor soluţiilor, ci numai a acelor soluţii care prezintă interes pentru problema tehnică respectivă.

Fie ecuaţia

, unde

[

]

izola cele rădăcini ale ecuaţiei

,

unde

este o funcţie continuă pe intervalul [ înseamnă a pune în evidenţă

] al axei reale. A puncte consecutive

astfel încât în fiecare interval

să existe cel mult o rădăcină a ecuaţiei. Metodele utilizate pentru izolarea soluţiilor sunt metoda tabelării, metaoda grafică analitică de localizare a soluţiilor.

şi metoda

Metoda tabelării. Cu ajutorul acestei metode sunt separate numai rădăcinile reale ale funcţiei din interiorul domeniului delimitat de marginile rădăcinilor. Intervalul [ ], unde a şi b reprezintă

, după

marginile rădăcinilor, se divide într-un număr n de subintervale egale, de lungime h, unde

care sunt calculate valorile funcţiei în punctele

.

Dacă există un număr

, pentru care

,

atunci în intervalul

acest interval este suficient de mic, atunci pe acest interval există obligatoriu o soluţie a funcţiei

există un număr impar de rădăcini ale funcţiei

, adică dacă .

Dacă însă

,

atunci în intervalul

interval este suficient de mic, atunci pe acest interval funcţia

există cel mult un număr par de rădăcini, adică dacă acest

are zero soluţii.

Exemplu: Să se izoleze rădăcinile funcţiei

în intervalul [

].

Rezolvare. Se tabelează funcţai

poate ajuta la tabelarea funcţiei este:

în 20 de puncte, cu pasul

. Programul Delphi ce ne

function f(x: extended): extended; begin f:=-0.02268*power(x, 3)+0.3108724*sqr(x)-0.6668459*x+0.209308; end; procedure TForm1.Button1Click(Sender: TObject); var a, b, k: integer; x, h: extended; begin a:=-5; b:=15; h:=(b-a)/20; for k:=0 to 20 do begin x:=a+k*h;

Memo1.Lines.Add(FloatToStr(x));

Memo2.Lines.Add(FloatToStr(f(x)));

end;

end;

Rezultatele sunt prezentate în tabelul de mai jos:

x

f(x)

x

f(x)

-5

14,1503475

 

6 2,500759

-4

9,30217

 

7 2,9948943

-3

5,6200573

 

8 3,1582144

-2

2,9679294

 

9 2,8546393

-1

1,2097063

 

10 1,948089

0

0,209308

 

11 0,3024835

1

-0,1693455

 

12 -2,2182572

2

-0,0623342

 

13 -5,7502131

3

0,3942619

 

14 -10,4294642

4

1,0643628

 

15 -16,3920905

5

1,8118885

   

Se observă că funcţia

.

are toate cele trei rădăcini reale situate în intervalele:

Metoda grafică. Această metodă presupune construirea graficului funcţiei ce reprezintă partea stângă a ecuaţiei neliniare. Punctele de intersecţie a acestui grafic cu axa de coordonate reprezintă soluţiile ecuaţiei neliniare, pe care din grafic le putem determina foarte aproximativ, însă putem determina foarte exact care sunt intervalele concrete pe care este situată o soluţie şi numai una singură.

Exemplu: Să se izoleze rădăcinile funcţiei Rezolvare. Dacă desenăm graficul fucţiei

. , atunci obţinem parabola:

desenăm graficul fucţiei . , atunci obţinem parabola: Se observă că funcţia are o singură rădăcină

Se observă că funcţia

are o singură rădăcină reală situată în intervalul:

.

Metoda analitică. Metoda analitică de determinare (localizare) a soluţiilor unei funcţii

presupune transformarea acestie funcţii astfel:

.

,

Aceste transformări se realizează în aşa mod încât să fie simplu de construit calitativ graficul funcţiilor . Punctele de intersecţie ale acestor două grafice reprezintă soluţiile ecuaţiei neliniare. Prin

această metodă putem să localizăm exact intervalele pe care se găsesc cel mult o soluţie a funcţiei

 

.

Exemplu: Aflaţi soluţiile ecuaţiei

|

|.

Rezolvare.

Dacă egalăm această ecuaţie neliniară cu zero, atunci obţinem

|

|

şi

se

observă foarte uşor că transformarea se poate de realizat doar prin trecerea unui termen din dreapta

egalităţii în stînga: | |. Conform acestor transformări am obţinut că Reprezentarea grafică a funcţiilor şi este simplă:

|.

şi

|

grafică a funcţiilor şi este simplă: | . ş i | După analiza graficelor funcţiilor şi

După analiza graficelor funcţiilor

şi

se vede că ele se intersecteză numai odată şi soluţia

funcţiei

este valoarea

a punctului de intersecţie a celor două funcţii, unde

.

b) Metoda înjumătăţirii intervalului. Descrierea algoritmului şi implementarea lui într-un

subprogram. Metoda înjumătăţirii intervalului (metoda biscţiei sau dihotomiei) este cea mai simplă metodă de determinare a rădăcinii unei ecuaţii care se află în intervalul [ ]. Pentru aplicarea acestei metode se verifică dacă:

[

]

este o funcţie continuă şi derivabilă;

. Această metodă se bazează pe următorul algoritm:

1) se calculează valoarea funcţiei la capetele intervalului [ ] şi într-un punct situat la

mijlocul intervalului:

;

2) se verifică semnele funcţiei în cele trei puncte ale intervalului şi subintervalul în care funcţia prezintă schimbarea de semn; acest subinterval este noul interval în care se află rădăcina. Sunt posibile următoarele variante prezentate în tabelul următor:

f(a)

f(c)

f(b)

Rădăcina ξ (xi)

-

+

+

- + +

-

-

+

- - +

+

+

-

+ + -

+

-

-

+ - -

3) pentru noul interval se procedează analog calculând valorile funcţiei la capetele lui şi la mijloc, din semnele funcţiei în cele trei puncte rezultând subintervalul pentru care are loc schimbarea de semn;

subintervalul pentru care are loc schimbarea de semn; 4) procesul este iterativ şi se încheie atunci

4)

procesul este iterativ şi se încheie atunci când se obţine o eroare mai mică decât precizia

impusă rădăcinii: |

|

.

Exemplu: Să se afle rădăcina ecuaţiei algebrice:

, cu o eroare mai mică de

ştiind că se află în intervalul [

].

Rezolvare.

Pentru determinarea soluţiei ecuaţiei se aplică algoritmul prezentat mai sus şi rezultă

valorile din tabelul următor:

Nr.

           

1.

 

1 1,5

2

-2

0,155465

3,693

2.

 

1 1,25

1,5

-2

-1,089

0,155465

3.

1,25

1,375

1,5

-1,089

-0,50967

0,155465

4.

1,375

1,4375

1,5

-0,50967

-0,1878

0,155465

5.

1,4375

1,46875

1,5

-0,1878

-0,0189

0,155465

6.

1,46875

1,484375

1,5

-0,0189

0,0676

0,155465

7.

1,46875

1,4765625

1,484375

-0,0189

0,0241772

 

Se observă din rezultatele obţinute că această metodă este slab convergentă. Soluţia aproximativă a

ecuaţiei este

slab convergentă. Soluţia aproximativă a ecuaţiei este calculată cu o eroare : Implementarea în Delphi 7

calculată cu o eroare:

Implementarea în Delphi 7:

.

function F(x: extended): extended; begin

F:=ln(x)+3*sqr(x)-4*x-1;

end;

procedure Metoda_Dihotomiei(a, b, eps: extended; var rez: extended); var c: extended; begin repeat

c:=(a+b)/2;

if F(a)*F(c)<0 then b:=c else a:=c; until abs(b-a)<eps;

rez:=(a+b)/2;

end;

c) Metoda coardelor. Descrierea algoritmului şi implementarea lui într-un subprogram.

Fie o funcţie continuă şi derivabilă

având pe intervalul [

] o singură rădăcină

Această metodă se bazează pe următorul algoritm:

Această metodă se bazează pe următorul algoritm: . 1) deoarece , soluţia în prima aproximare se

.

1)

deoarece , soluţia în prima aproximare se paote egala cu abscisa punctului

de intersecţie a coardei (secantei) care trece prin punctele [

de intersecţie a coardei (secantei) care trece prin punctele [ ] şi [ ] cu axa

] şi

[
[

] cu axa

(soluţia în prima aproximare este punctul

).

2)

se verifică semnele funcţiei în cele trei puncte ale intervalului şi subintervalul în care

funcţia prezintă schimbarea de semn, acest subinterval este noul interval în care se află rădăcina. 3) pentru noul interval se procedează analog: soluţia în a doua aproximare se poate egala cu

4)

abscisa punctului de intersecţie a coardei care trece prin punctele [

de intersecţie a coardei care trece prin punctele [ ] cu axa ( soluţia în a

] cu axa

(soluţia în a doua aproximare este punctul

).

]

şi

[
[

procesul este iterativ şi se încheie atunci când se obţine o eroare mai mică decât precizia

impusă rădăcinii: | | , unde – valoarea curentă calculată şi – valoarea precedentă.

Formula de lucru o determinăm din asemănarea Δ şi Δ : Respectiv, d acă contrar

Formula de lucru o determinăm din asemănarea Δ

şi Δ

:

Formula de lucru o determinăm din asemănarea Δ şi Δ : Respectiv, d acă contrar soluţia
Formula de lucru o determinăm din asemănarea Δ şi Δ : Respectiv, d acă contrar soluţia

Respectiv, dacă contrar soluţia se află în subinterval [ subinterval.

atunci noul subinterval [

] va cuprinde soluţia ecuaţiei, în caz

] . Procedeul de aproximare se repetă în acelaşi mod pentru noul

Exemplu: Să se afle rădăcina ecuaţiei algebrice:

, cu o eroare mai mică de

ştiind că se află în intervalul [

].

Rezolvare.

Pentru determinarea soluţiei ecuaţiei se aplică algoritmul prezentat mai sus şi rezultă

valorile din tabelul următor:

Pas

       

)

 

1.

1.000000

1.351300

2.000000

-2.000000

-0.626100

3.693147

2.

1.351300

1.445332

2.000000

-0.626100

-0.146033

3.693147

3.

1.445332

1.466431

2.000000

-0.146033

-0.031635

3.693147

4.

1.466431

1.470962

2.000000

-0.031635

-0.006742

3.693147

După numărul de paşi parcurşi, se observă că şi acestă metodă este slab convergentă însă este mai rapidă decât în cazul metodei de înjumătăţire a intervalului. Soluţia aproximativă a ecuaţiei calculată prin

metoda coardei este

calculată cu o eroare:

calculată prin metoda coardei este calculată cu o eroare : . Implementarea în Delphi 7 :

.

Implementarea în Delphi 7:

function F(x: extended): extended; begin

F:=ln(x)+3*sqr(x)-4*x-1;

end; procedure Metoda_Coardelor(a, b, eps: extended; var rez: extended);

var vc, vp: extended; begin vc:=a; repeat vp:=vc; vc:=(a*F(b)-b*F(a))/(F(b)-F(a)); if F(a)*F(vc)<0 then b:=vc else a:=vc; until abs(vc-vp)<eps; rez:=vc; end;

d) Metoda Newton. Descrierea algoritmului şi implementarea lui într-un subprogram.

Fie o funcţie continuă şi derivabilă are o singură rădăcină pe intervalul [

].

Dacă se dezvoltă în serie Taylor funcţia

pe intervalul [

], care satisface condiţia

în jurul punctului

se obţine:

şi

Reţinând doar primii doi termeni ai dezvoltării (1.1) se obţine o relaţie aproximativă de calcul a lui

[

în funcţie de

şi

:

Această funcţie reprezintă tangenta la graficul funcţiei ]:

în punctul

[

] respectiv în punctul

funcţiei ] : în punctul [ ] respectiv în punctul Punând condiţia se obţine intersecţia cu

Punând condiţia

se obţine intersecţia cu axa

şi rezultă o soluţie aproximativă de forma:

(1.3)

în afara intervalului

[ ]. În exemplul nostru se observă că tangenta dusă din punctul [ ] la funcţia se

intersectează cu axa în punctul , care este cuprins în intervalului [ ]. Pe când tangenta dusă din

Alegerea lui

sau

trebuie să se facă astfel încât să nu se obţină o valoare a lui

punctul

[

] la funcţia intersectează axa în punctul , care nu este cuprins în intervalul

[ ]. Pentru a satisface această condiţie, trebuie să fie luat acel capăt al intervalului [

funcţiei coincide cu semnul primei derivate. Deci, dacă

dreaptă, adică

, iar dacă

atunci punctul iniţial va fi limita stângă, adică

] la care semnul

atunci punctul iniţial este limita

.

Formula de recurenţă a metodei tangentelor utilizată este . De asemenea putem

modifica această formulă înlocuind derivata funcţiei în punctul

. După cum se ştie:

Din (1.4) rezultă că pentru calcularea numerică a derivatei în punctul trebuie să cunoaştem o valoare destul de mică , unde cu cât această valoare este mai mică, cu atât se calculează mai exact derivata. În calitate de valoarea se poate utiliza precizia de rezolvare a ecuaţiei neliniare. Formula finală este:

Procesul de calculare a rădăcinii ecuaţiei neliniare este unul iterativ şi calculul se opreşte atunci când

se realizează condiţia: |

|

.

Exemplu: Să se afle rădăcina ecuaţiei algebrice:

ştiind că se află în intervalul [ Rezolvare. Dacă notăm

].

, cu o eroare mai mică de

, atunci derivata funcţiei

.

este:

Pentru determinarea soluţiei aproximative prin metoda Newton, vom construi în Delphi 7 trei funcţii:

1)

Funcţia denumită

care returnează funcţia pentru care aproximăm soluţia într-un

anumit interval;

2)

Funcţia denumită

care returnează derivata funcţiei date;

3)

Funcţia denumită

care aplică metoda lui Newton asupra funcţiei date.

Pentru determinarea soluţiei ecuaţiei rezultă valorile din tabelul următor:

Pas

       

1.

2,0000000000000

3,69314718055995

1,5655135659914

0,538657839287026

2.

1,5655135659914

0,538657839287026

1,47621171090188

0,0222353540668164

3.

1,47621171090188

0,0222353540668164

1,47219427118359

4,48208875967237E-5

4.

1,47219427118359

4,48208875967237E-5

1,47218614033879

4,08248314928E-10

5.

1,47218614033879

4,08248314928E-10

   

Implementarea în Delphi 7:

function Functie(x: extended): extended; begin

Functie:=ln(x)+3*(x*x)-4*x-1;

end;

function Derivata(x: extended): extended; begin

Derivata:=1/x+6*x-4;

end; function Metoda_Newton(a, b, eps:extended): extended;

var xc, xp, x: extended; begin if (Functie(a)*Derivata(a)>0) then x:=a else x:=b; xc:=x; repeat xp:=xc; xc:=x-Functie(x)*eps/(Functie(x+eps)-Functie(x)); x:=xc; until abs(xc-xp)<eps; Metoda_Newton:=xc; end;

Dacă iniţial se cunoaşte care limită a intervalului [

] trebuie luată, adică se satisface una din

condiţiile

sau

, atunci funcţia principală se modifică astfel:

function Metoda_Newton(x, eps:extended): extended; var xc, xp: extended; begin xc:=x; repeat xp:=xc; xc:=x-Functie(x)*eps/(Functie(x+eps)-Functie(x)); x:=xc; until abs(xc-xp)<eps; Metoda_Newton:=xc; end;

Metoda Newton are o viteză de convergenţă mai superioară decât celelalte metode. Principalul

dezavantaj constă în faptul că această metodă nu poate fi aplicată la orice funcţie sau pentru orice domeniu

[ ]. Dacă punctul iniţial nu este ales în mod corespunzător, atunci nu ava avea loc convergenţa spre

rădăcina . De aceea în practică se recomandă să înceapă căutarea rădăcinii folosind metoda înjumătăţirii

sau metoda coardelor, iar după un anumit număr de paşi pentru accelerarea convergenţei se trece la metoda Newton.

e) Metoda iterativă. Descrierea algoritmului şi implementarea lui într-un subprogram.

pe intervalul [

]. Deoarece

, presupunem

Fie o funcţie continuă şi derivabilă că ecuaţia are o singură rădăcină

o funcţie continuă şi derivabilă că ecuaţia are o singură rădăcină . O rădăcină aproximativă a

. O rădăcină aproximativă a ecuaţiei

se poate

obţine dacă aceasta se poate scrie ca o relaţie de recurenţă echivalentă cu

. Variabila

de obicei

. Formal acest lucru se poate de obţinut dacă adăugăm şi totodată scădem valoarea lui noastră iniţială:

se extrage din ecuaţia funcţiei , astfel obţinând echivalenţa

din ecuaţia

Dezavantajul acestei metode este că ea nu conduce întotdeauna la relaţii iterative convergente. Relaţia de recurenţă a metodei se scrie:

Respectiv, dacă

iniţial este valoarea

, atunci:

Valoarea iniţială poate fi luată oricare punct din intervalul [ ], cu condiţia ca el să fie cât mai aproape de rădăcina exactă a ecuaţiei (adică în practică se recomandă să înceapă căutarea rădăcinii folosind o altă metodă, iar după un anumit număr de paşi să se tracă la metoda iterativă).

Exemplu: Să se afle rădăcina ecuaţiei algebrice:

ştiind că se află în intervalul [

].

,

cu

o

eroare mai mică de

scrie

Rezolvare. În cazul acestei metode trebuie să indicăm valoarea lui . Implementarea în Delphi 7:

. Deci, pentru simplitate putem

 

function Functie(x: extended): extended; begin Functie:= x-sin(x)-0.25; end; function Metoda_Iterativa(x, eps: extended): extended; var dx: extended; begin repeat dx:=Functie(x); x:=x-dx; if (x<>0) then dx:=dx/x; until abs(dx)<eps; Metoda_Iterativa:=x; end;

 

Tema 4. Aproximarea funcţiilor de o variabilă (4 ore)

a)

Aproximarea prin interpolare. Interpolarea liniară şi parabolică.

b)

Interpolarea polinomială globală. Convergenţa interpolării polinomiale globale.

c)

Forma Newton şi Lagrange a polinoamelor de interpolare globală. Descrierea algoritmului şi implementarea lui într-un subprogram.

d)

Interpolarea cu funcţii spline de ordinul unu, doi şi trei. Descrierea algoritmului şi implementarea lui într-un subprogram.

e)

Interpolarea cu funcţii trigonometrice. Convergenţa interpolării trigonometrice. Descrierea algoritmului şi implementarea lui într-un subprogram.

f)

Aproximare funcţiilor în sensul celor mai mici pătrate. Regresia liniară şi parabolică. Descrierea algoritmului şi implementarea lui într-un subprogram.