Documente Academic
Documente Profesional
Documente Cultură
NUMERICA
ALEXANDRU MIHAI BICA
Introducere
Acest indrumator de laborator urmeaza pentru capitolele 5-8 cursul de analiza numerica
[4] si este adresat studentilor din anul IV ai specializarii Matematica-Informatica si celor din
anul II ai specializarilor Matematica si Informatica, din cadrul Facultatii de Stiinte. Desigur,
acest indrumator poate … folosit si de catre studentii specializarilor ingineresti ce au in planul
de invatamint un curs de metode numerice.
Pentru capitolele 1-4 s-au folosit ca suport teoretic lucrarile [8], [10], [11], [12], [13], [14],
[19], si [21]. Deasemenea, prezentarea s-a actualizat folosind unele rezultate recente (a se
vedea [1], [2], [3], [5], [6], [9] si [20]). O parte dintre algoritmi (cei din paragrafele 1.1, 1.2,
1.3.2, 1.4.2, 7.1, 7.4, 7.5, 7.5 si din capitolele 3 si 6) sunt preluati din [7]. Ca o noutate fata de
alte lucrari similare sunt paragrafele 2.1, 2.2.2, 2.2.3, 4.1, 4.2 (dreapta si parabola de regresie
sunt folosite si la facultatile cu pro…l economic), 5.1 si 5.3. Unii dintre algoritmi sunt insotiti
si de catre varianta notepad a programului corespunzator implementat in limbajul C.
Capitolele 1 si 3 sunt dedicate interpolarii si aproximarii functiilor continue, iar capitolul
2 prezinta unele procedee de interpolare neteda a datelor experimentale. In capitolul 4 sunt
prezentate cele mai simple procedee de prelucrare a datelor experimentale, bazate pe prin-
cipiul celor mai mici patrate. Capitolele 5-8 sunt dedicate metodelor numerice, prezentandu-
se procedee de integrare numerica (continând estimari recente ale restului din formulele de
cuadratura; a se vedea [2], [3], [5] si [9]) si derivare numerica, metode din algebra liniara, pro-
cedee de aproximare a solutiilor ecuatiilor algebrice si transcendente si a sistemelor neliniare
pe spatii euclidiene, precum si cele mai cunoscute metode de rezolvare numerica a problemelor
Cauchy si la limita asociate ecuatiilor diferentiale.
1 Interpolarea polinomial¼
a a funcţiilor
In acest capitol se prezinta cele mai folosite metode de interpolare polinomiala Lagrange si
Hermite, insotite de instrumentele lor auxiliare : diferentele …nite si divizate.
A = fak : ak = a + kh; k = 0; m; h 2 R; h 6= 0g I
si …e functia f : A ! R.
De…nitia 1: Se numeste diferenta …nita de ordinul intai cu pasul h pe nodul ai , i =
0; m 1; relativa la functia f; diferenta
si de comutativitate a compunerii
r s s r r+s
h( hf ) = h( hf ) = h f
Tabloul cu diferente …nite ofera o metoda simpla, algoritmica de calcul a tuturor difer-
entelor …nite ale unei functii, relative la o multime de noduri echidistante date. Datorita
formulei de recurenta de mai sus, elementele …ecarei coloane se obtin din elementele coloanei
precedente, ceea ce permite o programare simpla a algoritmului de generare a elementelor
tabloului de diferente …nite.
Pasul 3. Scrie m
h f (a) :=
m
h f0 : A…seaza k
h fi ; k = 1; m; i = 0; m k; sau a…seaza
m
numai h f0 : STOP.
Probleme propuse :
1. Sa se construiasca un program de calcul al tabloului de diferente …nite in limbajul
Pascal si in limbajul C.
2. Se da functia functia f (x) = x1 pentru x 6= 0: Sa se construiasca tabloul de diferente
…nite pina la ordinul 6 cu pasul h = 0:2 si punctul de plecare a = 1:
A = fak : ak 2 R; k = 0; m; g I
si …e functia f : A ! R.
De…nitia 1: Se numeste diferenta divizata de ordinul intai cu nodurile ar si ar+1 relativa
la functia f , expresia
Xk
f (ar+i )
[ar ; ar+1 ; :::; ar+k ; f ] =
i=0
u0 (ar+i )
unde
u (x) = (x ar ) (x ar+1 ) ::: (x ar+k ) :
Observatie: Pentru r = 0 si k = m
Xm
f (ak ) X
m
f (ak )
[a0 ; a1 ; :::; am ; f ] = =
k=0
u0 (ak ) k=0 uk (ak )
unde
u (x) = (x a0 ) (x a1 ) ::: (x am )
si
u (x)
; 8k = 0; m:
uk (x) =
x ak
In calcule, in special la constructia formulei de interpolare a lui Newton pentru polinomul lui
Lagrange, este util tabloul de diferente divizate.
x f Df D2 f D3 f ....... Dm 1 f Dm f
a0 f0 Df0 D2 f0 D3 f0 ....... Dm 1 f0 Dm f0
a1 f1 Df1 D2 f1 D3 f1 ....... Dm 1 f1
a2 f2 Df2 D2 f2 D3 f2 .......
:::: :::: :::::: :::::: :::::
am 2 fm 2 Dfm 2 D2 fm 2
am 1 fm 1 Dfm 1
am fm
unde fi = f (ai ) ; i = 0; m:
La constructia tabelului s-a folosit formula de recurenta
Dk 1 f (ai+1 ) Dk 1 f (ai )
Dk f (ai ) = ; k = 1; m; i = 0; m k:
ai+k ai
Aceeasi formula de recurenta o foloseste algoritmul de mai jos :
I. Date de intrare :
m ordinul maxim al diferentei divizate
ak ; k = 0; m nodurile diferentelor divizate
f (ak ) ; k = 0; m valorile functiei pe noduri.
II. Date de iesire : Tabloul diferentelor divizate pina la ordinul m, adica Dk f (ai ) ; k=
0; m; i = 0; m k; sau numai valoarea Dm f (a0 ) :
III. Pasii algoritmului :
Pasul 1. Pentru i = 0; m ataseaza
D0 fi := f (ai ) :
Pasul 2. Pentru k = 1; m;
Pentru i = 0; m k; calculeaza
Dk 1 fi+1 Dk 1 fi
Dk fi :=
ai+k ai
Pasul 3. A…seaza Dk fi ; k = 1; m; i = 0; m k; sau a…seaza numai Dm f0 : STOP.
Probleme propuse :
1. Sa se construiasca un program de calcul al tabloului de diferente divizate in limbajul
Pascal si in limbajul C.
1
2. Considerând functia f : R ! R, f (x) = 1+x 2 sa se construiasca tabloul cu diferentele
Din punct de vedere practic, dându-se o fonctie f : [a; b] ! R; cunoscuta doar pe nodurile
ak 2 [a; b]; k = 0; m; si precizându-se o eroare admisa " > 0, se cere sa se determine
m 2 N si sa se aproximeze valoarea f ( ) prin Lm f ( ) cu o eroare ce nu depaseste ": In acest
caz, presupunandu-se cunoscut un majorant Mm+1 (f ) ; pentru normele derivatelor f (k) C
se determina m astfel incat jRm f ( )j < "; adica
ju ( )j
Mm+1 (f ) < ":
(m + 1)!
Dar aici, cerinta cunoasterii majorantului Mm+1 (f ) nu poate … ocolita. Acest aspect restrange
sfera de aplicabilitate a procedeului.
1 fjj aj x
fi;j+1 =
ai aj fij ai x
pentru i = 1; m si j = 0; i 1:
Observam ca
x a1 x a0
f11 = f (a0 ) + f (a1 ) = L1 f (x)
a0 a1 a1 a0
si analog se obtine pentru i = 2; m
fii = Li f (x)
adica polinomul de interpolare Lagrange relativ la nodurile a0 ; a1 ; :::; ai :
Astfel, sirul elementelor de pe diagonala tabloului f11 ; f22 ; :::; fii ; :::; fmm devine un sir de
aproximatii ale lui f (x) : Acest sir va converge catre f (x) atunci cand
pentru " > 0 dat initial. Prin urmare, algoritmul lui Aitken genereaza primele i + 1 coloane
ale tabloului oprindu-se la prima coloana pentru care este indeplinita conditia de mai sus.
Asadar, gradul maxim al polinomului de interpolare este m, dar algoritmul se poate opri la
un grad mai mic (in urma atingerii preciziei dorite). Deoarece eroarea formulei de interpolare
depinde de ju (x)j ; rezulta ca pentru a opri acest algoritm cat mai repede este indicat sa se
ordoneze nodurile a0 ; :::; am dupa distanta lor fata de ; punctul in care dorim sa aproximam
pe f ( ) : Astfel, se ordoneaza nodurile pina este indeplinita conditia
Dupa cum se observa, metoda lui Aitken si criteriul sau de oprire necesita doar cunoasterea
valorilor f (ai ) ; i = 0; m. Acest avantaj justi…ca prezenta acestui algoritm in bibliotecile
matematice ale softurilor de calcul numeric (gen Matlab, Mathcad sau Mathematica).
Probleme propuse :
1. Sa se construiasca un program
p in limbajele C si Pascal pentru algoritmul lui Aitken.
2. Valorile functiei f (x) = x sunt date pe noduri in tabelul
3
X
m
= f (a0 ) + (x a0 ) ::: (x ai 1 ) Di f0
i=1
Se observa ca in formula (6) s-au folosit doar diferentele divizate de pe latura superioara
a tabloului de diferente. Deasemenea, din (3) si (5) rezulta Lm f (x) = Nm f (x) ; 8x 2 [a; b]:
Observatie: Din formula (6) rezulta ca polinomul de interpolare al lui Newton veri…ca
relatia de recurenta
D0 fk := f (ak ) ; pentru k = 0; m
si
Dj 1 fk+1 Dj 1 fk
Dj fk := pentru j = 1; m si pentru k = 0; m j:
ak+j ak
Pasul 3. k := 0; N0 f ( ) = f (a0 )
Pasul 4. Cat timp k < m executa
k := k + 1;
Nk f ( ) := Nk 1 f ( ) + ( a0 ) ::: ( ak 1 ) [a0 ; :::; ak ; f ]
Daca jNk f ( ) Nk 1 f ( )j < " atunci tipareste Nk f ( ) : STOP.
Pasul 5. Daca jNm f ( ) Nm 1 f ( )j < " atunci tipareste Nm f ( ). STOP.
Altfel, tipareste " Nu s-a putut calcula o aproximatie cu precizia dorita ".
STOP.
Programul in limbajul C
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
int main()
{
double p[100], a[100], f[100], x, e, q;
int m, i, j, k;
double df[100][100];
printf("m=");
scanf("%d", &m);
printf("x=");
scanf("%lf", &x);
printf("e=");
scanf("%lf", &e);
Din formula (9) se observa ca polinomul lui Taylor poate … obtinut recurent prin
T0 f (x) = f (a0 )
(x a0 )k (k)
Tk f (x) = Tk 1 f (x) + f (a0 ) ; pentru k = 1; n:
k!
Astfel, se obtine algoritmul urmator :
Algoritm pentru polinomul lui Taylor
I. Date de intrare:
n gradul polinomului de interpolare
a nodul de interpolare
(k)
f (a) ; k = 0; n; valorile pe nodul a
u 2 [a; b] punctul in care se aproximeaza valoarea functiei f
II. Date de iesire:
Tn f (u) aproximatia lui f (u) prin polinomul lui Taylor
III. Pasii algoritmului:
Pasul 1. …e f0 := f (a) , p (0) := 1 si pentru k = 1; n
fk := f (k) (a)
p (k) := p (k 1) k
Pasul 2. …e T0 f (u) = f (a) si pentru k = 1; n
1
Tk f (u) = Tk 1 f (u) + (u a)k fk
p (k)
1.4.2 Metoda lui Aitken pentru polinomul lui Hermite cu noduri duble
Daca nodurile ak ; k = 0; m; sunt duble atunci se presupun cunoscute valorile f (ak ) ; f 0 (ak ) ;
k = 0; m: Polinomul lui Hermite cu noduri duble este
X
m
f (ak ) f (t)
0
H2m+1 f (x) = uk (x) + (x ak ) jt = ak (10)
k=0
uk (ak ) uk (t)
unde
u (x) = (x a0 )2 (x a1 )2 ::: (x am )2
si
u (x)
uk (x) = 8k = 0; m:
(x ak )2
Acest polinom poate … obtinut astfel,
z2i = ai ; z2i+1 = ai ; i = 0; m
Q2i;0 Q2i 1;0
Q2i;1 = i = 1; m:
z2i z2i 1
si
Qi;j 1 Qi 1;j 1
Qi;j = i = 2; 2m + 1; j = 2; i:
zi zi j
Rezulta urmatorul algoritm prin care se obtin coe…cientii din (11).
z2i := ai ; z2i+1 := ai
Pasul 2. Pentru i = 2; 2m + 1
Pentru j = 2; i calculeaza
Qi;j 1 Qi 1;j 1
Qi;j =
zi zi j
Pasul 3. Tipareste Q0;0 Q1;1 :::Q2m+1;2m+1 : STOP.
Probleme propuse :
1. Sa se construiasca un program in limbajele C si Pascal pentru algoritmele asupra
polinomului lui Taylor si asupra metodei lui Aitken pentru polinomul lui Hermite cu noduri
duble.
p
2. Fie f (x) = x + 1 si Tn f polinomul lui Taylor de gradul n corespunzator nodului
a0 = 0. Sa se determine T0 f (u) pentru n=6 si u=0.3.
3. Folosind algoritmul lui Aitken pentru polinomul lui Hermite cu noduri duble sa se
aproximeze valoarea unei functii f (0:2) avand pe noduri valorile:
x f (x) f 0 (x)
0.1 1.2314028 2.64281
0.3 1.9121188 4.24424
0.4 2.3855409 5.25108
0.5 2.9682818 6.43656
0.6 3.6801169 7.84023
2 Interpolarea neteda pe porţiuni
Acest capitol este dedicat interpolarii netede a datelor experimentale prin interpolare Hermite
cu noduri duble pe portiuni si prin functii spline polinomiale.
(b x)2 (x a) 0 (x a)2 (b x) 0
P (x) = f (a) f (b) +
(b a)2 (b a)2
avem
(b a)4
jR (x)j 7
f (4) C
8x 2 [a; b]:
3 2
Considerand o diviziune a intervalului [a; b]
si valorile pe aceste noduri ale unei functii f 2 C 1 [a; b], f (xi ) ; f 0 (xi ) ; i = 0; n; se poate
construi o functie neteda F 2 C 1 [a; b] pentru care
Formula (14) constituie un punct tare al metodei lui Akima, dar deoarece nu poate propune
o formula si pentru primele doua si ultimele trei noduri conduce la necesitatea introducerii
arti…ciale a unor pante corespunzatoare extremitatilor intervalului [a; b] pentru a extinde
formula (14), ceea ce constituie un punct slab al metodei. De aceea, macar pe primul si
pe ultimul nod putem stabili valori pentru f 0 (x0 ) si f 0 (xn ) astfel incat functia F sa aiba
urmatoarea proprietate de minim:
unde
Zb
J (F ) = [F 00 (x)]2 dx:
a
si se extinde formula (14) pentru i = 1; n 1: Daca F000 (x0 ) = Fn00 (xn ) = 0 atunci proprietatea
(15) este indeplinita, ceea ce va conduce la a propune
3 1 0 3 1 0
f 0 (x0 ) = m0 f (x1 ) ; f 0 (xn ) = mn 1 f (xn 1 ) :
2 2 2 2
In continuare functia F este construita in baza formulei (13).
xj 1 < < xj :
Pasul 6. Calculeaza
(xj )2 ( xj 1 ) 0 ( xj 1 )2 (xj )
F ( ) := f (xj 1 ) f 0 (xj ) +
(xj xj 1 )2 (xj xj 1 )2
Probleme propuse:
1. Sa se construiasca un program in limbajele C si Pascal pentru algoritmul lui Akima.
2. La momentele 7.5 (adica ora 730 ), 10.5 (ora 1030 ), 13, 15.5 (ora 1530 ), 18, 21, 24 si 27
(adica ora 3 A. M. a doua zi) s-au masurat valorile glicemiei, obtinandu-se 130, 121, 128, 96,
122, 138, 114, 90 (masurate in mg/dl). Sa se aproximeze glicemia acestui pacient de la orele
12, 14, 23 si 2 (a doua zi A. M, adica momentul 26) folosind algoritmul lui Akima.
Probleme propuse:
1. Sa se construiasca un algoritm pentru functia spline poligonala de interpolare al c¼ arei
gra…c este linia poligonal¼
a ce uneşte punctele (x0 ; y0 ); (x1 ; y1 ):::; (xn ; yn ) si sa se programeze
in limbajele C si Pascal.
2. La momentele 7.5 (adica ora 730 ), 10.5 (ora 1030 ), 13, 15.5 (ora 1530 ), 18, 21, 24 si
27 (adica ora 3 A. M. a doua zi) s-au masurat valorile glicemiei, obtinandu-se 130, 121, 128,
96, 122, 138, 114, 90 (masurate in mg/dl). Sa se aproximeze glicemia acestui pacient de la
orele 12, 14, 23 si 2 (a doua zi A. M, adica momentul 26) folosind functia spline poligonala
de interpolare. Sa se compare rezultatele cu cele obtinute prin algoritmul lui Akima.
si se obtine
" # " #
(x xi 1 )3 hi (x xi 1 ) (xi x)3 hi (xi x)
si (x) = Mi + Mi 1 + (16)
6hi 6 6hi 6
xi x x xi 1
+ yi 1 + yi ; 8x 2 [xi 1 ; xi ]; 8i = 1; n:
hi hi
Pentru determinarea coe…cientilor Mi ; i = 0; n; din conditia s 2 C 1 [a; b] rezulta cerintele
s0i (xi ) = s0i (xi+1 ) ; 8i = 1; n 1: Acestea conduc la un sistem liniar de n-1 ecuatii cu n+1
necunoscute Mi ; i = 0; n
hi Mi 1 hi + hi+1 hi+1 Mi yi+1 yi yi yi 1
+ Mi + = ; 8i = 1; n 1:
6 3 6 hi+1 hi
La acestea se adauga inca doua conditii M0 = Mn = 0; sau s0 (x0 ) = f0 ; s0 (xn ) = fn (in
ipoteza ca sunt cunoscute f 0 (x0 ) = f0 si f 0 (xn ) = fn ). Adaugand de exemplu, ultimele doua
conditii se obtine sistemul
8 hM
>
<
i i 1
6
+ hi +h3 i+1 Mi + hi+16 Mi = yi+1
hi+1
yi y i yi 1
hi
; 8i = 1; n 1
h1 M 0 h1 M 1 y1 y 0
+ 6 = h1 f0 (17)
>
:
3
hn M n 1 hn Mn yn y n 1
6
+ 3 = fn hn
din care se determina in mod unic M0; M1 ; :::; Mn : Observam ca matricea acestui sistem este
tridiagonala.
In [13] se arata ca functia spline cubica (16) ce indeplineste oricare din cele doua conditii
suplimentare de mai sus are proprietatile :
(i) Minimizarea functionalei
Zb
J (g) = [g 00 (x)]2 dx
a
adica
J (s) = minfJ (g) : g 2 C 2 [a; b]; g (xi ) = yi ; 8i = 0; ng:
(ii) Aproximare uniforma pentru orice functie f 2 C 2 [a; b]; cu estimarea globala a erorii
p p
kf 0 s0 k b a kf 00 kC h
p p
kf sk b a kf 00 kC h h;
unde h = maxfhi : i = 1; ng:
Pentru functia spline cubica (16) veri…cand conditiile s0 (x0 ) = f0 ; s0 (xn ) = fn se con-
struieste urmatorul algoritm.
xj 1 < < xj :
Pasul 2. Executa
a0 := 2; c0 := 1; bn := 1
Pentru i = 1; n calculeaza
hi := xi xi 1 :
ai := 2
Pasul 3. Executa
6 y1 y0 6 yn yn 1
d0 := f0 ; dn = fn
h1 h1 hn hn
Pentru i = 1; n 1 calculeaza
hi
bi :=
hi + hi+1
ci = 1 bi
6 yi+1 yi yi yi 1
di :=
hi + hi+1 hi+1 hi
Pasul 4. Executa
c0
0 :=
a0
Pentru i = 1; n 1 calculeaza
! i := ai bi i 1
ci
i :=
!i
Executa
! n := an bn n 1
Pasul 5. Executa
d0
z0 :=
2
Pentru i = 1; n calculeaza
di bi zi 1
zi :=
!i
Pasul 6. Determinarea solutiei M0; M1 ; :::; Mn a sistemului (17)
Executa
Mn := zn
Pentru i = n 1; 0 calculeaza
Mi := zi i Mi+1 :
Pasul 7. Calculeaza
" # " #
( xj 1 )3 hj ( xj 1 ) (xj )3 hi (xj )
s ( ) := Mj + Mj 1 +
6hj 6 6hj 6
xj xj 1
+ yj 1 + yj
hj hj
Pasul 8. Tipareste s ( ) : STOP.
Programul in limbajul C
#include "stdafx.h"
#using <mscorlib.dll>
using namespace System;
#include <stdio.h>
#include <math.h>
#include <conio.h >
void main()
{
int n,i,nri;
double u,f0,fn,av,bv;
double x[20],y[20],h[20],a[20],b[20],c[20],d[20],alfa[20],omega[20],z[20],M[20];
double s;
printf("n=");scanf("%d",&n);
printf("a=");scanf("%lf",&av);
printf("b=");scanf("%lf",&bv);
printf("u=");scanf("%lf",&u);
printf("f0=");scanf("%lf",&f0);
printf("fn=");scanf("%lf",&fn);
for (i=0;i<=n;i++)
{
printf("y[%d]=",i);
scanf("%lf",&y[i]);
}
for (i=0;i<=n;i++)
x[i]=av+i*((bv-av)/n);
/*Pasul 1*/
for (i=1; i<=n; i++)
h[i]=x[i]-x[i-1];
for (i=0; i<=n; i++)
{
a[i]=2;
}
for (i=1; i<=n-1; i++)
{
b[i]=h[i]/(h[i]+h[i+1]);
}
b[n]=1;
c[0]=1;
for (i=1; i<=n-1; i++)
c[i]=1-b[i];
d[0]=(6/h[1])*((y[1]-y[0])/h[1]-f0);
d[n]=(6/h[n])*(fn-(y[n]-y[n-1])/h[n]);
for(i=1;i<=n-1;i++)
d[i]=(6/(h[i]+h[i+1]))*((y[i+1]-y[i])/h[i+1]-(y[i]-y[i-1])/h[i]);
/*Pasul 2*/
alfa[0]=c[0]/a[0];
for (i=1; i<=n-1; i++)
{
omega[i]=a[i]-alfa[i-1]*b[i];
alfa[i]=c[i]/omega[i];
}
omega[n]=a[n]-alfa[n-1]*b[n];
/*Pasul 3*/
z[0]=d[0]/2;
for(i=1; i<=n; i++)
{
z[i]=(d[i]-b[i]*z[i-1])/omega[i];
}
/*Pasul 4*/
M[n]=z[n];
for (i=n-1;i>=0;i–)
M[i]=z[i]-alfa[i]*M[i+1];
/*Pasul 5*/
for (i=1; i<=n; i++)
if((x[i-1]<u)&&(u<x[i]))
{
printf("i=%d ",i);
nri=i;
}
/*Pasul 6*/
s=(M[nri]*pow((u-x[nri-1]),3))+(M[nri-1]*pow((x[nri]-u),3))/6*h[nri]+(y[nri-1]-(M[nri
1]*h[nri]*h[nri])/6)*((x[nri]-u)/h[nri])+
(y[nri]-M[nri]*h[nri]*h[nri]/6)*(u-x[nri-1])/h[nri];
printf("nns=%lf ",s);
getch();
}
Probleme propuse
1. Se se construiasca un program in limbajul Pascal pentru algoritmul functiei spline
cubice generata de conditii la limita.
2. La momentele 7.5 (adica ora 730 ), 10.5 (ora 1030 ), 13, 15.5 (ora 1530 ), 18, 21, 24 si
27 (adica ora 3 A. M. a doua zi) s-au masurat valorile glicemiei, obtinandu-se 130, 121, 128,
96, 122, 138, 114, 90 (masurate in mg/dl). Sa se aproximeze glicemia acestui pacient de la
orele 12, 14, 23 si 2 (a doua zi A. M, adica momentul 26) folosind algoritmul de la problema
precedenta. Sa se compare rezultatele cu cele obtinute prin algoritmul lui Akima si prin
interpolare spline poligonala. Se dau f0 = 2; f7 = 3:
şi (
6 6mi 1
Mi = h2i
(yi yi 1 ) hi
2Mi 1
3 Mi 1 hi
; i = 1; n; (21)
mi = hi
(yi yi 1 ) 2mi 1 2
unde hi = xi xi 1 ; 8i = 1; n:
Prin utilizarea relaţiilor de recurenţ¼a (21) se obţine in mod unic functia spline cubica
de interpolare pornind de la valorile y0; y1 ; :::; yn si de la valorile primelor doua derivate pe
primul nod, m0 si M0 : Estimarea erorii in formula corespunzatoare de interpolare spline poate
… gasita in [15] pentru cazurile f 2 Lip[a; b]; respectiv f 2 C 1 [a; b] cu f 0 2 Lip[a; b]:
Observatie: Valorile m0 si M0 sunt in general libere (experimental, de obicei se determina
y0; y1 ; :::; yn ) si pot … date astfel incat functia spline corespunzatoare sa aiba proprietati
suplimentare. Astfel, daca M0 = Mn = 0 atunci functia spline cubica cu restrictiile la
subintervalele diviziunii date in (18) va avea proprietatea de minimizare a funcţionalei
Zb
J(y) = [y 00 (x)]2 dx (22)
a
a C 2 [a; b] ce interpoleaz¼
pe mulţimea funcţiilor de clas¼ a f pe nodurile diviziunii n : Deaseme-
0
nea, s şi s aproximeaz¼ a pe f şi respectiv, f 0 , cu o eroare estimat¼
a global astfel :
p 3
kf sk b a kf 00 kC h 2
p p
kf 0 s0 k b a kf 00 kC h: (23)
Pentru a avea Mn = 0 se poate obtine m0 astfel:
Se de…nesc a1 = 2; c1 = h61 ; b1 = h31 (y1 y0 ); d1 = 6
h21
(y1 y0 ) şi recurent se calculeaza
pentru i = 2; n
hi ci 1
ai = 2ai 1
2
3(yi yi 1 ) hi di 1
bi = 2bi 1 (24)
hi 2
şi
6ai 1
ci = 2ci 1
hi
6(yi yi 1 ) 6bi 1
di = 2di 1 : (25)
h2i hi
Punand
dn
M0 = 0 si m0 = (26)
cn
se va obtine Mn = 0:
Algoritmul functiei spline cubice generata de conditii initiale
I. Date de intrare:
nodurile xi ; i = 0; n
valorile yi ; i = 0; n
m0 si M0 , valorile primelor doua derivate pe primul nod
2 [a; b]; 6= xi ; 8i = 0; n; punctul in care se aproximeaza f ( ) prin s ( )
II. Date de iesire: s ( ) :
III. Pasii algoritmului
Pasul 1. Se determina indicele j 2 f1; :::; ng pentru care
xj 1 < < xj :
hi := xi xi 1
3 Mi 1 hi
mi := (yi yi 1 ) 2mi 1
hi 2
6 6mi 1
Mi := 2 (yi yi 1 ) 2Mi 1
hi hi
Pasul 3. Calculeaza
1 Mj
s ( ) := (Mj Mj 1 )( xj 1 )3 + ( xj 1 )2 + mj ( xj 1 ) + yj 1 :
6hj 2
Pasul 4. Tipareste s ( ) : STOP.
Observatie: Daca valorile m0 si M0 nu sunt date atunci se poate intercala intre pasii 1
si 2 subrutina urmatoare:
Pasul 1.1. Executa
3
M0 := 0; a1 := 2; b1 := (y1 y0 )
h1
6 6
c1 := ; d1 := (y1 y0 ):
h1 h21
Programul in limbajul C
#include <conio.h>
#include <stdio.h>
int main()
{
clrscr();
printf("Functia splinenn______________nnnnnn");
‡oat s, h[100], x[100], y[100], u, m[100], M[100];
int i, k, n;
printf("n=");scanf("%d",&n);
//n=7;
/* for (i=0; i<=n; i++)
{
printf("x[%d]=",i);
scanf("%lf",&x[i]);
printf("y[%d]=",i);
scanf("%lf",&y[i]);
}
printf("u=");
scanf("%lf",&u);
printf("m0=");
scanf("%lf",&m[0]);
printf("M0=");
scanf("%lf",&M[0]);
*/
printf("u=");scanf("%f",&u);
printf("m[0]=");scanf("%f",&m[0]);
printf("M[0]=");scanf("%f",&M[0]);
printf("nn");
//u=3.3;m[0]=0;M[0]=17;
for (i=1; i<=n; i++)
h[i] = x[i] - x[i-1];
printf("h[i]: ");
for (i=1; i<=n; i++)
printf("%f ",h[i]);
printf("nnnn");
for (i=1; i<=n; i++)
{
m[i] = (3 / h[i]) * (y[i] - y[i-1]) - 2 * m[i-1] - (M[i-1] / 2) * h[i] ;
M[i] = (6 / (h[i] * h[i])) * (y[i] - y[i-1]) - (6 * m[i-1]) / h[i] - 2 * M[i-1];
printf("M[i]=%f m[i]=%f ",M[i],m[i]);
}
printf("nnnnu=%fnn ",u);
for (i=1; i<=n; i++)
{
printf("%f ",x[i-1]);
if ((x[i-1]<u) && (u<x[i]))
{k = i;printf("* %d* ",k);}
}
s = ((M[k] - M[k-1]) / (6 * h[k] )) * (u - x[k-1]) * (u - x[k-1]) * (u - x[k-1])
+ (M[k-1] / 2) * (u - x[k-1]) * (u - x[k-1])
+ m[k-1] * (u - x[k-1]) + y[k-1];
printf("nnS(%f)=%fnnnn",u,s);
getch();
return 0;
}
Probleme propuse
1. Sa se construiasca un program in limbajul Pascal pentru algoritmul functiei spline
cubice generata de conditii la limita.
2. La momentele 7.5 (adica ora 730 ), 10.5 (ora 1030 ), 13, 15.5 (ora 1530 ), 18, 21, 24 si 27
(adica ora 3 A. M. a doua zi) s-au masurat valorile glicemiei, obtinandu-se 130, 121, 128, 96,
122, 138, 114, 90 (masurate in mg/dl). Sa se aproximeze glicemia acestui pacient de la orele
12, 14, 23 si 2 (a doua zi A. M, adica momentul 26) folosind algoritmul de interpolare spline
cubic generat de conditii initiale cu m0 si M0 date in (26) prin folosirea subrutinei de mai
sus. Sa se compare rezultatele cu cele obtinute prin algoritmul lui Akima si prin algoritmul
de interpolare spline cubic generat de conditii bilocale.
3 Aproximarea uniform¼
a a funcţiilor. Polinoamele lui
Berstein
Fie functia f : [0; 1] ! R.
De…nitia 1. Numim polinomul lui Bernstein de grad m relativ la functia f, polinomul
de…nit prin formula
Xm
k
(Bm f ) (x) = pm;k (x) f ;
k=0
m
unde
m
pm;k (x) = xk (1 x)m k
; k = 0; m:
k
De…nitia 2. Numim formula de aproximare a lui Bernstein, formula
Proprietati:
Bm ( f + g) = Bm f + Bm g; ; 2R
si Bm f 0; daca f 0 .
(2) Polinomul lui Bernstein interpoleaza functia f la capetele intervalului [0,1], adica
uniform pe [0,1].
(4) Daca f 2 C 2 [0; 1] atunci in formula de aproximare a lui Bernstein avem
x (1 x) 00
(Rm f ) (x) = f ( ); 0 < < 1;
2m
x (1 x) x (1 x)
j(Rm f ) (x)j sup jf 00 (x)j = M2 (f )
2m x2(0;1) 2m
si de asemenea
1
j(Rm f ) (x)j M2 (f ):
8m
(5) Polinomul lui Bernstein relativ la functia f : [0; 1] ! R este dat prin formula
1 X
m
m k
(Bm f ) (x; a; b) = m (x a)k (b x)m k
f a + (b a) :
(b a) k=0 k m
Algoritmul POLBERN
Observatia 1. Pentru a reduce volumul de calcule, pentru a‡area lui pm;k (x) am folosit
relatia de recurenta:
m k+1 x
pm;k (x) = pm;k 1 (x):
k 1 x
In acest mod nu vom … nevoiti sa calculam combinari si ridicari la putere nenecesare.
Probleme propuse
Totodata,
@2R X n
= 2 x2i > 0
@a2 i=0
si 2 !2 3
@2R @2R
24
Xn
1 X
n
1
= @a2 @a@b = 4 (n + 1) x2 xi 5 > 0;
@2R @2R
@a@b @b2 i=0
n+1 i i=0
n+1
in virtutea inegalitatii lui Jensen. Atunci, determinantul sistemului (27) este strict pozitiv si
solutia sistemului (27) este unicul punct de minim local pentru reziduul R (a; b) : Rezolvand
acest sistem se determina coe…cientii din ecuatia dreptei de regresie.
X
n X
n X
n
d1 := (n + 1) xi yi xi yi
i=0 i=0 i=0
X
n X
n X
n X
n
d2 := x2i yi xi yi xi
i=0 i=0 i=0 i=0
Pasul 2. Calculeaza
d1
a :=
d
d2
b :=
d
Pasul 3. Tipareste a; b: STOP.
Probleme propuse:
1. Sa se construiasca un program in limbajele C si Pascal pentru algoritmul dreptei de
regresie.
2. (din [21]) Fie tabelul de valori ale functiei y = f (x)
x 1 3 4 6 8 9
y 1 2 4 4 5 3
Sa se determine dreapta de regresie de ecuatie y = ax + b ce ajusteaza datele din tabel. (
95 399
Se gasesc a = 281 si b = 281 ).
y = ax2 + bx + c
X
n X
n
2
R (a; b; c) = [f (xi ) g (xi )] = [yi ax2i bxi + c]2 :
i=0 i=0
Totodata,
@2R X n
= 2 x4i > 0;
@a2 i=0
2 !2 3
@2R @2R Xn X
n X
n
= @a2 @a@b =4 4 2
xi x4i x3i 5>0
@2R @2R
@a@b @b2 i=0 i=0 i=0
si 2
@2R @2R @2R !2 3
@a2 @a@b @a@c X
n X
n X
n
HR (a; b; c) = @2R
@a@b
@2R
@b2
@2R
@b@c
=8 x4i 4(n + 1) x2i xi 5+
@2R @2R @2R i=0 i=0 i=0
@a@c @b@c @c2
2 ! ! !2 3
X
n X
n X
n X
n
+8 x2i 4 xi x3i x2i 5+
i=0 i=0 i=0 i=0
" ! ! #
X
n X
n X
n X
n
+8 x3i xi x2i (n + 1) x3i > 0:
i=0 i=0 i=0 i=0
Atunci, determinantul sistemului (28) este strict pozitiv si solutia sistemului (28) este unicul
punct de minim local pentru reziduul R (a; b; c) : Rezolvand acest sistem se determina coe…-
cientii din ecuatia carteziana a parabolei de regresie,
y = ax2 + bx + c:
!3 !2 ! !2
X
n X
n X
n X
n
x2i xi x4i (n + 1) x3i
i=0 i=0 i=0 i=0
! ! ! ! !
X
n X
n X
n X
n X
n
d1 := (n + 1) x2i x2i yi + xi x2i xi yi +
i=0 i=0 i=0 i=0 i=0
! ! ! !2 !
X
n X
n X
n X
n X
n
+ x3i xi yi x2i yi
i=0 i=0 i=0 i=0 i=0
!2 ! ! !
X
n X
n X
n X
n
xi x2i yi (n + 1) x3i xi yi
i=0 i=0 i=0 i=0
! ! ! ! !
X
n X
n X
n X
n X
n
d2 := (n + 1) xi yi x4i + x2i x3i yi +
i=0 i=0 i=0 i=0 i=0
! ! ! !2 !
X
n X
n X
n X
n X
n
+ xi x2i x2i yi x2i xi yi
i=0 i=0 i=0 i=0 i=0
! ! ! ! !
X
n X
n X
n X
n X
n
x4i xi yi (n + 1) x2i yi x3i
i=0 i=0 i=0 i=0 i=0
! ! ! ! ! !
X
n X
n X
n X
n X
n X
n
d3 := x4i x2i yi + xi x2i yi x3i +
i=0 i=0 i=0 i=0 i=0 i=0
! ! ! !2 !
X
n X
n X
n X
n X
n
+ x2i x3i xi yi x2i x2i yi
i=0 i=0 i=0 i=0 i=0
! ! ! !2 !
X
n X
n X
n X
n X
n
xi xi yi x4i x3i yi :
i=0 i=0 i=0 i=0 i=0
Pasul 2. Calculeaza
d1
a :=
d
d2
b :=
d
d3
c :=
d
Pasul 3. Tipareste a; b; c: STOP.
Zb
Cand primitiva F nu se poate determina sub forma …nita, atunci integrala de…nita f (x) dx
a
se poate calcula doar aproximativ, motivand astfel studiul si utilizarea formulelor de cuadratura
numerica.
In general, o formula de cuadratura este de forma
Zb X
n
f (x) dx = Ak f (xk ) + R(f )
a k=1
in care integrala se poate calcula doar aproximativ. Valorile functiei lui Laplace pentru
x 2 [0; 4] sunt aproximate in 401 noduri echidistante din intervalul [0; 4] si se gasesc
tabelate in tratatele de calculul probabilitatilor.
Consideram elipsa de ecuatie implicita
x2 y 2
(E) : + 2 1 = 0; a; b > 0; a > b
a2 b
p
a2 b2
cu excentricitatea = a
: Ecuatiile parametrice ale elipsei sunt
x = a cos t
(E) : ; t 2 [0; 2 ]:
y = b sin t
Incercand sa calculam lungimea arcului de elipsa cuprins in cadranul I putem folosi atat
ecuatiile parametrice la calculul integralei
Z2 q
E
l = [x0 (t)]2 + [y 0 (t)]2 dt
4
0
b
p
cat si ecuatia explicita y = a
a2 x2 ; x 2 [0; a];
la calculul integralei
Za q
E
l = 1 + [y 0 (x)]2 dx:
4
0
Z2 p
E
l =a 1 2 sin2 tdt:
4
0
Spre exemplu,
Za q Za r
E 1 a4 + (b2 a2 )x2
l = 1 + [y 0 (x)]2 dx = dx;
4 a a2 x 2
0 0
Z2 r
E 1 a2 + (b2 a2 ) sin2 t
l = a cos tdt =
4 a cos2 t
0
Z2 q Z2 r
(a2 b2 )
= a2 + (b2 a2 ) sin2 tdt = a 1 sin2 tdt =
a2
0 0
Z2 p
=a 1 2 sin2 tdt:
0
Integralele eliptice de genul I, II si III in sensul lui Legendre sunt respectiv,
Z'
dt
F (k; ') = p
1 k 2 sin2 t
0
Z' p
E(k; ') = 1 k 2 sin2 tdt
0
Z'
dt
p ;
1 + h sin2 t 1 k 2 sin2 t
0
Pentru valoarea absolut¼ a a restului R(f ) se pot stabili margini superioare. Corespunz¼ator cu
propriet¼aţile funcţiei f aceste margini superioare pot … mai apropiate sau mai îndep¼ artate de
jR(f )j. Astfel, dac¼ a f 2 C[a; b] atunci estimarea se face cu ajutorul modulului de continuitate,
b a b a
jR(f )j $(f ; ):
2 2
În [9] s-au obţinut recent urm¼atoarele estim¼ ari :
8
> L(b a)2
< 4
; daca f 2 Lip[a; b]
jR(f )j
>
: (b a)2 kf 0 k ;
4
daca f 2 C 1 [a; b]:
not¼
am hi = xi+1 xi ; 8i = 0; n 1; şi
1X
n 1
In (f; ) = hi [f (xi ) + f (xi+1 )]:
2 i=0
Corespunz¼
ator diviziunii de mai sus se obţine :
Teorema: (in [5] si [9]) Formula trapezului corespunz¼
atoare diviziunii este
Zb
f (x)dx = In (f; ) + Rn (f; );
a
Zb X
n 1
b a i(b a)
f (x)dx = [f (a) + 2 f (a + ) + f (b)] + Rn (f ) (30)
2n i=1
n
a
şi 8 b a
>
> 2
$(f ; b2na ); dac¼
a f 2 C[a; b]
>
> (b a)2 L
>
< 4n
; dac¼a f 2 Lip[a; b]
(b a)2 kf 0 k
jRn (f )j 4n
; dac¼a f 2 C 1 [a; b] (31)
>
> (b a)3 L0
>
> ; dac¼
a f 0 2 Lip[a; b]
>
: 12n2
(b a)3 kf 00 k
12n2
; dac¼a f 2 C 2 [a; b]:
Observatie: Formula (30) se poate obtine si integrand formula de interpolare spline
poligonala cu noduri echidistante.
Fie functia integrabila f : [a; b] ! R cu valori cunoscute pe noduri echidistante din
intervalul [a,b].
De…nitia 1. Numim formula de cuadratura generalizata a trapezelor formula de cuadratura
obtinuta prin aplicarea formulei de cuadratura a trapezului pe …ecare subinterval
[a + (k 1)h; a + kh]; k = 1; n;
unde h = b na :
1. Formula de cuadratura a trapezelor este
Zb " #
b a X1
m
f (x) dx = f (a) + 2 f (a + kh) + f (b) + Rn (f ) :
2n k=1
a
(b a)3 00 (b a) h2 00
Rn (f ) = f ( )= f ( ); a < < b;
12n2 12
de unde
(b a)3 (b a) h2
jRn (f )j M 2 (f ) = M2 (f ):
12n2 12
3. Formula de cuadratura a trapezelor are gradul de exactitate 1.
4. Daca se considera in formula de cuadratura a trapezelor
n = 2p ; p = 0; 1; 2; :::
si se noteaza prin
b a b a
hp = = ; p = 0; 1; 2; :::
n 2p
X
n 1
Sp = f (a) + 2 f (ak ) + f (b); ak = a + khp ; k = 0; n;
k=1
cu
S0 = f (a) + f (b);
atunci urmatoarele formule de recurenta au loc
hp
hp+1 = ;
2
p
X
2
Sp+1 = Sp + 2 f (a + (2k 1) hp+1 ) ; p = 0; 1; :::
k=1
deci
Zb
hp
f (x) dx Sp :
2
a
Algoritmul (Trapez-repetat)
Zb
Algoritmul calculeaza valoarea aproximativa a integralei f (x) dx prin formula repetata a
a
trapezelor, cu o precizie data :
Intrari: a,b-limitele de integrare
f-expresia functiei
precizia dorita
Zb
Iesiri: f (x) dx valoarea aproximativa
a
Pasul 1: (Initializari)
p := 0; hp := b a; Sp := h2p [f (a) + f (b)] ; np := 1
Pasul 2: p := p + 1
Pasul 3: hp := hp2 1
Pasul 4: sum:=0
Pasul 5: Pentru i = 1; np 1 executa
sum:=sum+f (a + (2i 1) hp )
Pasul 6: sum:=hp sum
Pasul 7: Sp := Sp2 1 +sum
Pasul 8: np := 2np 1
Pasul 9: Daca jSp Sp 1 j atunci
salt la pasul al doilea
Pasul 10: Tipareste Sp : STOP.
Programul in limbajul C
#include "stdafx.h"
double f(double x)
{
return 1/( x*x + 1 );
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,i;
double a, b, x[100], s;
printf("n=");
scanf("%d",&n);
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
printf("REZ: %lfnnnn",s);
return 0;
}
Probleme propuse:
1. Sa se utilizeze formula de cuadratura a trapezului pentru n=10 la calculul integralei
Z 1
1
dx
0 x+1
Zb
b a (b a)2 0
f (x)dx = [f (a) + f (b)] [f (b) f 0 (a)] + R(f ): (32)
2 12
a
Estimarea restului acestei formule de cuadratur¼ a a fost obţinut¼a de K.Petr în 1915, în [18]
(pentru alte moduri de obţinere a acestei formule si a restului, a se vedea şi [16], [20]),
(b a)5 f IV
jR(f )j (33)
720
pentru functii f 2 C 4 [a; b]: Recent, în 2001, N.Barnett şi S.S.Dragomir au obţinut în [2] o
estimare ce utilizeaz¼
a derivata de ordinul trei,
(b a)4 kf 000 k
jR(f )j (34)
160
pentru f 2 C 3 [a; b]: Ulterior, în 2002, au fost conduşi la o estimare valabil¼
a pentru funcţii de
3 ori derivabile cu derivata de ordinul 3 Lipschitz (având constanta Lipschitz L000 , a se vedea
[3]) :
(b a)5 L000
jR(f )j : (35)
720
Considerând o diviziune a intervalului [a; b] :
Zb
1X 1 X 2 0
n 1 n 1
f (x)dx = hi [f (xi ) + f (xi+1 )] h [f (xi+1 ) f 0 (xi )] + Rn (f; In ) (36)
2 i=0 12 i=0 i
a
kf 000 k X 4
n 1
jRn (f; In )j h: (37)
160 i=0 i
b a
Dac¼
a diviziunea In este echidistant¼
a atunci hi = h = n
; 8i = 0; n 1; iar formula se
simpli…ca (36) devenind,
Zb X
n 1
b a (b a)2 0
f (x)dx = [f (a) + 2 f (xi ) + f (b)] [f (b) f 0 (a)] + Rn (f ): (38)
2n i=1
12n2
a
(b a)4 kf 000 k
jRn (f )j : (39)
160n3
iar inegalitatile (35) si (33) ne conduc la estimarile
8
(b a)5 L000
>
< 720n4
jRn (f )j (40)
>
: (b a)5 kf IV k
720n4
:
T := T + [f (xi 1 ) + f (xi )]
Pasul 3. Calculeaza
(b a) (b a)2
S := T [f 0 (b) f 0 (a)]:
2n 12n2
Pasul 4. Tipareste S. STOP.
Probleme propuse :
1. Sa se scrie un program in limbajele C si Pascal pentru algoritmul cuadraturii perturbate
a trapezului.
2. Sa se utilizeze formula de cuadratura a perturbata a trapezului pentru n=10 la calculul
integralei Z 1:5
t2
e 2 dt;
0
si sa se compare cu rezultatul de la paragraful precedent si cu cel dat in tabelele de valori ale
functiei integrale a lui Laplace.
(b a)5 (iv)
R (f ) = f ( ); a < < b;
2880
astfel pentru evaluarea erorii avem
(b a)5
jR (f )j M4 (f ):
2880
De…nitia 1. Numim formula de cuadratura a lui Simpson repetata formula de cuadratura
obtinuta prin aplicarea formulei de cuadratura a lui Simpson pe …ecare subinterval [a + 2 (k 1) h; 2k
k = 1; n; unde h = b2na :
1. Formula de cuadratura repetata a lui Simpson este
Zb " #
b a X
n X
n 1
f (x) dx = f (a) + 4 f (a + (2k 1) h) + 2 f (a + 2kh) + f (b) + Rn (f ) :
6n k=1 k=1
a
2. Daca f 2 C 4 [a; b] atunci restul in formula de cuadratura repetata a lui Simpson are
expresia
(b a)5 (iv) (b a) h4 (iv)
Rn (f ) = f ( ) = f ( ) ; a < < b;
2880n4 180
de unde
(b a)5 (b a) h4
jRn (f )j M 4 (f ) = M4 (f ):
2880n4 180
3. Formula de cuadratura repetata a lui Simpson are gradul de exactitate 3.
4. Daca se considera in formula de cuadratura repetata a lui Simpson
n = 2p ; p = 0; 1; 2; :::
si se noteaza prin
b a b a
hp = = ; p = 0; 1; 2; :::
2n 2p+1
cu
S0 = f (a) + f (b);
X
n
Sp(1) = f (a + (2k 1) hp ) ; p = 0; 1; 2; :::
k=1
X
n 1
Sp(2) = f (a + 2khp ) ; p = 0; 1; 2; :::
k=1
(2)
cu S0 = 0; atunci au loc relatiile de recurenta
1
hp+1 = hp ;
2
(2)
Sp+1 = Sp(2) + Sp(1) ;
deci
Zb
hp
f (x) dx S0 + 2Sp(2) + 4Sp(1) :
3
a
Algoritmul (Simpson-repetat)
Zb
Algoritmul calculeaza valoarea aproximativa a integralei f (x) dx prin formula repetata a
a
lui Simpson, cu o precizie data :
Intrari: a,b-limitele de integrare
f-expresia functiei
precizia dorita
Zb
Iesiri: f (x) dx-valoarea aproximativa
a
Pasul 1: (Initializari)
p := 0; hp := b 2 a ; S0 := f (a) + f (b); n0 := 1;
(2) (1) (2) (1)
S0 := 0; S0 := f (a + h0 ); I0 := h3 S0 + 2Sp + 4Sp
Pasul 2: p := p + 1
Pasul 3: hp := 12 hp 1
Pasul 4: np := 2np 1
(2) (2) (1)
Pasul 5: Sp := Sp 1 + Sp 1
(1)
Pasul 6: Sp := 0
Pasul 7: Pentru k := 1; np executa
(1) (1)
Sp := Sp + f (a + (2k 1) hp )
(2) (1)
Pasul 8: Ip := h3p S0 + 2Sp + 4Sp
Pasul 9: Daca jIp Ip 1 j atunci
salt la pasul al doilea
Pasul 10: Tipareste Ip : STOP.
Programul in limbajul C
#include "stdafx.h"
double f(double x)
{
return 1 /( x + 1 );
}
int _tmain(int argc, _TCHAR* argv[])
{
int n,i;
double a, b, x[1000], s;
printf("n=");
scanf("%d",&n);
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
s = (b-a) / (6 * n) * s;
printf("REZ: %22.20lfnnnn",s);
return 0;
}
Probleme propuse
A = (aij )i;j=1;n
deci
(1) (2)
(n)
detA = a11 a22 ::: ann :
Transformarile necesare sunt date de relatiile:
(1)
aij := aij ; i; j = 1; n;
(p+1) (p) (p) (p)
aij := aij apj aip =a(p)
pp ; p = 1; n 1;
(p)
pentru i; j = p + 1; n: Conditia de realizare a metodei este app 6= 0; p = 1; n:
In caz contrar sunt necesare unele interschimbari de linii si/sau coloane.
Algoritmul (DET)
Algoritmul calculeaza determinantul unei matrici A.
Intrari: n-ordinul matricei
A-matricea careia i se calculeaza determinantul
Iesiri: det (A)
Pasul 1: det := 1
Pasul 2: Pentru p := 1; n 1 executa
Pasul 2.1 : Daca app 6= 0 salt la pasul 2.3
Pasul 2.2 : Cauta un element ajp 6= 0, cu j 2 fp + 1; :::; ng :
Daca acest element nu exista atunci det := 0: STOP.
altfel
det := det:
Schimba linia p cu linia j.
Pasul 2.3.1: Pentru i := p + 1; n executa
aip
aij := aij apj app
Pasul 2.4 : det := det app
Pasul 3: det := det ann
Pasul 4: Tipareste: det: STOP.
6.2 Calculul inversei unei matrici
Fie A o matrice patratica de ordinul n
A = (aij )i;j=1;n
Algoritmul (INV)
Algoritmul calculeaza inversa unei matrici A.
Intrari: n-ordinul matricei
A-matricea careia i se calculeaza inversa
Iesiri: A 1 sau
un mesaj de eroare daca A este nesingulara
Pasul 1: Pentru j = n + 1; 2n executa
Pasul 1.1 : Pentru i = 1; n executa
Daca n + i = j atunci aij := 1
altfel aij := 0
Pasul 2: Pentru p = 1; n executa
Pasul 2.1 : Daca app 6= 0 se trece la pasul 2.3
Pasul 2.2 : Se cauta un element ajp 6= 0, j 2 fp + 1; :::; ng :
Daca un astfel de element nu exista atunci
tipareste: ”A este nesingulara”. STOP.
altfel
schimba linia p cu linia j in intreaga matrice
(avand 2n coloane)
Pasul 2.3 : c := app
Pasul 2.4 : Pentru j = p; 2n executa
apj := apj =c
Pasul 2.5 : Pentru i = 1; n executa
Pasul 2.5.1 : Daca i 6= p atunci
Pasul 2.5.1.1: c := aip
Pasul 2.5.1.2: Pentru j = p; 2n executa
aij := aij apj c
Pasul 3: Pentru i = 1; n executa
Pasul 3.1 : Pentru j = 1; n executa
aij1 := aij+n
Pasul 4: Tipareste A 1 : STOP.
Probleme propuse
1. Sa se scrie cate un program in limbajul C pentru algoritmii DET si INV.
2. Sa se calculeze determinantul si (daca
0 este posibil) 1
inversa urmatoarelor matrici:
0 1 0 1 1 4 2 5
3 2 1 2 1 3 B 2 1 4 3 C
(a) @ A
2 1 0 ; (b) @ 3 3 2 A ; (c) B@ 3 2 1
C:
1 A
1 0 0 1 2 1
3 1 0 5
R: (a) det
0 = 1; (b) det 1 = 6; (c) det 0
= 0: 1
0 0 1 1 5 7
A 1=@ 0 1 2 A si A 1 = 16 @ 1 1 5 A
1 2 1 3 3 3
3. Sa se compare rezultatele obtinute cu cele furnizate de procedurile DET si INV.
X
n
(p)
apj xj = b(p) ; p = 1; n;
i=p
xn = bn(n) =a(n)
nn ;
" #
1 Xn
(p)
xp = (p)
b(p)
p apj xj ; p = n 1; 1:
app j=p+1
Algoritmul (Gauss)
Algoritmul rezolva sistemul liniar Ax = b prin metoda lui Gauss, alegandu-se drept varianta
de implementare aceea a pivotului maxim.
Intrari: n-ordinul matricei
A-matricea sistemului
b- vectorul termenilor liberi
Iesiri: x-vectorul solutiilor, sau
un mesaj de eroare, in cazul in care sistemul nu e compatibil determinat
Pasul 1: Pentru k = 1; n; executa: pk := k
Pasul 2: Pentru k = 1; n 1; executa
Pasul 2.1: determina i; j 2 fk; k + 1; :::; ng astfel incat:
jaij j = max jar;q j ; r; q = k; n
Pasul 2.2: Daca aij = 0 atunci
Tipareste:”Sistemul nu este compatibil determinat”. STOP.
Pasul 2.3: Schimba linia i cu linia k din matricea A
Pasul 2.4: Schimba componentele i si k in vectorul b
Pasul 2.5: Schimba coloana j cu coloana k in matricea A
Pasul 2.6: Schimba componentele i si k ale vectorului P.
Pasul 2.7: Pentru i = k + 1; n executa
Pasul 2.7.1: temp:= aakkik
Probleme propuse
1. Sa se scrie un program in limbajele C si Pascal pentru algoritmul lui Gauss..
2. Sa se rezolve sistemele:
8
>
> 2x1 + x2 4x3 + x4 = 0
<
4x1 + 3x2 + 5x3 2x4 = 10
(a) ;
>
> x1 x2 + x3 x4 = 3
:
8 x1 + 3x2 3x3 + 3x4 = 1
>
> 2x1 + 4x3 + x4 = 7
<
2x2 + 4x3 + x4 = 7
(b) ;
>
> 2x1 + 4x2 + 3x3 = 9
:
8 x1 + 2x2 + 2x4 = 5
< 2x1 + 2x2 + 2x3 = 6
(c) x1 x2 = 2 :
:
3x1 + x2 + 2x3 = 8
=( ij )i;j=1;n ; =( 1 ; :::; n)
ann ann
::: 0
obţinem forma sistemului,
x= x+ : (42)
Dac¼a exist¼a un aii = 0; atunci se rearanjeaz¼ a ecuaţiile şi se renumeroteaz¼
a necunoscutele
astfel încât sistemul s¼ a … adus la forma în care aii 6= 0; 8i = 1; n: Astfel, odat¼
a poat¼ a ajunşi
la forma (42) a sistemului (41), se va putea aplica sistemului liniar metoda aproximaţiilor
succesive, obţinând iteraţiile
(k+1)
X
n
(k+1)
fxi = ij xj + i , i = 1; n: (44)
j=1
(0) 1 0
x1
Iteraţiile (43) vor porni de la un vector iniţial arbitrar, x(0) = @ ::: A : Astfel, este de…nit
(0)
xn
un proces iterativ Picard. Aplicând principiul de punct …x al lui Banach vom obţine condiţii
su…ciente de convergenţ¼ a a acestui proces. :
Teorema: Dac¼ a soluţie x 2 Rn ,
a det A 6= 0 şi k k1 < 1; atunci sistemul (41) are o unic¼
ce este limita şirului de…nit prin recurenţ¼a în (43) indiferent de vectorul iniţial x(0) : Dac¼
a
(0)
x = atunci are loc urm¼ atoarea estimare a erorii :
k kk1
x x(k) 1
k k1 ; 8k 2 N : (45)
1 k k1
Se considera sistemul
A=P +Q (46)
Proprietatea 1. Pentru x(m) dat, exista in mod unic x(m+1) daca si numai daca exista
1
P si avem:
x(m+1) = P 1 Qx(m) + P 1 b: (47)
Prin urmare, scrierea sub forma (46) a matricei A trebuie sa tina seama de conditia ca sa
existe P 1 :
Proprietatea 2. Convergenta metodei iterative este asigurata daca
kP 1 Qk < 1; k k …ind una dintre normele unei matrice.
In functie de alegerea matricei P avem diverse metode iterative.
Metoda lui Jacobi, cea prezentata la inceputul acestui paragraf, se obtine pentru
0 1
a11 0 ::: 0
B 0 a22 : : : 0 C
P := PJ = B @ :::
C ; aii 6= 0; i = 1; n:
::: ::: ::: A
0 0 : : : ann
In acest caz, conditia de convergenta pentru orice valoare de pornire x(0) ; este de exemplu:
( n )
X aij
In PJ 1 A 1 = max = c < 1;
1 i n
j=1;j6=i
a ii
1 kP 1 Qk
x(k) x(k 1)
eps;
kP 1 Qk
k k …ind una dintre normele pentru indice; kP 1 Qk trebuie sa …e <1 pentru ca metoda
sa convearga.
Intrari: n-ordinul matricei
A-matricea sistemului
b- matricea termenilor liberi
eps-precizia
norma kP 1 Qk (daca nu, se poate calcula in program)
x(0) -aproximatia initiala
Iesiri: x(m) -aproximatia …nala
Pasul 0: m := 0
Pasul 1: m := m + 1
Pasul 2: Pentru i = 1; n executa
!
(m)
X
n
(m 1)
1
Pasul 2.1: xi = aii
bi aij xj
j=1;j6=i
(m) (m 1) 1 kP 1Q
k
Pasul 3: Daca x x kP 1 Qk eps atunci STOP
altfel mergi la Pasul 1.
Probleme propuse
[a; a+b
2
]; daca f (a)f a+b
2
< 0;
[a1 ; b1 ] = a+b a+b
[ 2 ; b]; daca f (a)f 2
> 0:
In general avem
[an ; an +b
2
n
]; daca f (an )f an +bn
2
< 0;
[an+1 ; bn+1 ] = an +bn an +bn
[ 2 ; bn ]; daca f (an )f 2
> 0:
b a
jxn xj ;
2n
daca xn = an sau xn = bn :
Probleme propuse
x tgx = 0:
0 < m1 f 0 (x) M1 ; 8x 2 J
( acest lucru se poate realiza dac¼a f 0 (x) 6= 0 şi atunci când f 0 (x) < 0; c¼
aci ecuaţia f (x) = 0
poate … pus¼ a sub forma f (x) = 0 ). Apoi, ecuaţia f (x) = 0 se pune sub forma echivalent¼ a
x = x f (x) ; unde > 0 se alege astfel încât s¼ a avem k'0 k1 < 1; şi se va pune
' (x) = x f (x) : Pentru a determina constanta > 0 pornim de la inegalitatea
Tipareste xn : STOP.
Probleme propuse :
1. Sa se construiasca un program in limbajele C si Pascal pentru metoda aproximatiilor
succesive.
2. Folosind metoda aproximatiilor succesive sa se aproximeze solutia din intervalul (1,2)
a ecuatiei
x4 x 1 = 0:
@'i X
n
@'i (x)
0
k' k1 = ; i; j = 1; n = max max :
@xj 1 i n
j=1
x2D @xj
a M = (f 0 x(0) ) 1 : Dac¼
adic¼ a det(f 0 x(0) ) = 0, atunci se va alege o alt¼ a valoare de
pornire x(0) :
Observatia 3: Fie sistemul de dou¼ a ecuaţii scris sub forma
x = F (x; y)
y = G(x; y);
xn+1 = F (xn ; yn )
yn+1 = G(xn ; yn );
cu (x0 ; y0 ) 2 D:
Daca sirul (xn ; yn )n 0 este convergent si F; G sunt continue pe D, atunci limita sirului
este solutia (x ; y ) :
Proprietatea 1. Daca F; G : D ! D sunt continue, cu derivatele partiale de ordinul
intai continue pe D si
@F @F
@x @y
kW k = M < 1; W (x; y) = @G @G ;
@x @y
atunci (xn ; yn ) ! (x ; y ) :
Observatia 4. Un exemplu de norma ce poate … considerata este
@F @F @G @G
kW kM = max max + max ; max + max :
D @x D @y D @x D @y
Tipareste xn ; yn : STOP.
Programul in limbajul C
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
double x[1000],y[1000],epsilon;
int i;
‡oat F(‡oat v)
{
return 5-v;
}
‡oat G(‡oat v)
{
return 6/v;
}
int main(int argc, char* argv[])
{
printf("epsilon=");
scanf("%lf",&epsilon);
printf("x0=");
scanf("%lf",&x[0]);
printf("y0=");
scanf("%lf",&y[0]);
x[1]=F(y[0]);
y[1]=G(x[0]);
i=0;
while ((abs(x[i+1]-x[i])>=epsilon)&&(abs(y[i+1]-y[i])>=epsilon))
{
i++;
x[i+1]=F(y[i]);
y[i+1]=G(x[i]);
}
printf("%lf %lf",x[i+1],y[i+1]);
getch();
return 0;
}
jxn xj (xn xn 1 )2 :
Observatia 4. Algoritmul a fost dat pentru cazul in care solutia ecuatiei a fost izolata
in intervalul [a,b], iar functiile f 0 si f 00 au semn constant pe acest interval, iar alegerea
lui x0 la pasul 1 este evidenta. Exista si alte modalitati de determinare a valorii initiale de
pornire:
a; f (a) f 00 (c) > 0 sau f (b) f 00 (c) < 0
x0 =
b; f (a) f 00 (c) < 0 sau f (b) f 00 (c) > 0
unde c = a+b2
si f 00 (x) 6= 0; x 2 [a; b]:
In cazul general, cand nu avem informatii despre functia f se ia o valoare oarecare, iar
daca dupa un numar …xat de iteratii nu ajungem la precizia dorita se reia procedeul cu o alta
valoare de pornire.
Probleme propuse
f (x) := x3 + x 0; 1 = 0:
3. Folosind metoda tangentei sa se calculeze cea mai mica radacina pozitiva a ecuatiei
x tgx = 0:
f (xn )
xn+1 = xn (b xn ) ; x0 = a;
f (b) f (xn )
sau
f (xn )
xn+1 = xn (a xn ) ; x0 = b;
f (a) f (xn )
spunem ca se utilizeaza metoda secantei pentru aproximarea solutiei x :
Observatia 1. Daca sirul (xn )n 0 este convergent si f 2 C[a; b], atunci limita sirului
este x :
Observatia 2. Aproximarea initiala x0 se alege dupa cum urmeaza
jf (xn )j
jxn xj ;
m1 (f )
sau
M1 (f ) m1 (f )
jxn xj jxn xn 1 j ;
m1 (f )
unde
m1 (f ) = inf jf 0 (x)j si M1 (f ) = sup jf 0 (x)j :
[a;b] [a;b]
jxn xj jxn xn 1 j :
De…nitia 2. Spunem ca avem metoda combinata secanta-tangenta, daca se construieste
sirul de intervale
xs0 ; xt0 xs1 ; xt1 ::: xsn ; xtn ::: (56)
sau
xt0 ; xs0 xt1 ; xs1 ::: xtn ; xsn ::: (57)
astfel incat x 2 (xsn ; xtn ) ; respectiv x 2 (xtn ; xsn ) ; iar
f (xtn )
xtn+1 = xtn ;
f 0 (xtn )
f (xsn )
xsn+1 = xsn t s
xtn xsn :
f (xn ) f (xn )
Observatia 4. Daca f (a)f 0 (a) < 0 se ia xs0 = a si xt0 = b; caz in care se obtine sirul
(56), iar daca f (b)f 0 (b) < 0 se ia xs0 = b si xt0 = a; caz in care se obtine sirul (57).
Observatia 5. Daca xn = xtn sau xn = xsn avem evaluarea
jxn xj xtn xsn :
Observatia 6. Reamintim ca algoritmul a fost dat pentru cazul in care f (a)f (b) < 0
(exista o solutie in intervalul [a,b]) si semnul functiei f 00 e constant pe intervalul [a,b]. O
alta posibilitate de alegere a xs0 si xt0 este cea data de Observatia 4., in care nu e necesara
cunoasterea semnului derivatei a doua a functiei f.
Observatia 7. Ca aproximatie a solutiei ecuatiei se poate considera xsn sau xtn , dar
exista si o alta posibilitate
xs + xtn
SOL:= n :
2
Observatia 8. In aplicatii se cere aproximarea unei solutii pentru o ecuatie data, cu
eroare precizata. De obicei, eroarea este precizata prin distanta intre 2 aproximatii succesive
jxn xn 1 j : In general insa, jxn xn 1 j nu implica intotdeauna jxn x j < : De
aceea, sunt foarte utile metodele combinate prin care solutia x este aproximata din ambele
parti, ea a‡andu-se mereu intre 2 aproximante succesive:
Probleme propuse
x3 x 0; 1 = 0:
x6 x 1 = 0:
8 Metode numerice pentru ecuaţii diferenţiale
8.1 Derivarea numeric¼
a
Fie cunoscute valorile functiei f : [a; b] ! R pe nodurile distincte ai 2 [a; b]; i = 0; m;
yi = f (ai ) :
De…nitia 1. Numim formula de derivare numerica, formula
X
m
(k)
f ( )= Ai f (ai ) + Rm (f );
i=0
unde 2 [a; b]; …xat, pentru care exista f (k) ( ); iar Rm (f ) este restul formulei.
De…nitia 2. Formula de derivare numerica este de tip interpolator daca se obtine prin
derivarea unei formule de interpolare.
Formula de derivare numerica Gregory-Newton pentru = a este
1 k k (3k + 5)
(Nm f )(k) (a) = k
hf (a) k+1
h f (a) + k+2
h f (a) ::: ;
hk 2 24
de unde
1 1 1 1
f 0 (a) hf (a) 2
hf (a) + 3
hf (a) ::: + ( 1)m 1 m
hf (a)
h 2 3 m
si respectiv
1 11
f 00 (a) 2
hf (a) 3
hf (a) + 4
hf (a) ::: :
h2 12
Algoritmul (Derivgn)
Algoritmul calculeaza valoarea derivatei unei functii f intr-un punct a, aproximand-o pornind
de la formula lui Gregory-Newton.
Intrari: m-ordinul formulei de tip interpolator
f-expresia functiei, sau
f (a), f (a + h),...,f (a + mh)-valorile functiei pe punctele a + kh, k = 0; m; h = bma
a-punctul in care este ceruta valoarea aproximativa a functiei
Iesiri: (Nn f )0 (a) f 0 (a)-valoarea aproximativa a derivatei lui f in a
Pasul 1: Se determina sirul diferentelor …nite n f (a) ; :::; m n f (a)
Pasul 2: df:=0
Pasul 3: Pentru j := 1; m executa
j
df := df + h1 ( 1)j 1 1j h f (a)
Pasul 4: Tipareste df. STOP.
Probleme propuse
1. Sa se scrie un program in limbajele C si Pascal pentru algoritmul Derivgn.
2. Se considera functia f (x) = lg x, ale carei valori sunt date in tabelul de mai jos:
x 50 55 60 65
:
f (x) 1; 6990 1; 7404 1; 7782 1; 8129
Sa se calculeze valoarea lui f 0 (50) prin metoda de derivare numerica Gregory-Newton.
8.2 Metoda reţelelor
Metoda retelelor aplicata la ecuatii diferentiale liniare utilizeaza diferentele divizate in aprox-
imarea derivatelor succesive ale unei functii pe noduri si conduce la rezolvari de sisteme
algebrice de ecuatii liniare.
Astfel, folosind forma data de Newton polinomului lui Lagrange, se obtin aproximari ale
derivatelor succesive ale unei functii pe un nod x0
f (x0 + h) f (x0 )
f 0 (x0 ) = [x0 ; x0 + h; f ] = (58)
h
f (x0 + h) f (x0 h)
f 0 (x0 ) = (59)
2h
f (x0 + h)
2f (x0 ) + f (x0 h)
f 000 (x0 ) = 2[x0 h; x0 ; x0 + h; f ] = (60)
h2
si in general, folosind formula de legatura dintre diferentele divizate cu noduri echidistante si
diferentele …nite, se obtine
n
f (x0 )
f (n) (x0 ) = h n : (61)
h
Consideram ecuatia diferentiala liniara de ordinul II
cu conditiile la limita
y (a) = A; y (b) = B (63)
si p; q; f 2 C[a; b]: Presupunem ca problema bilocala (62)+(63) are solutie unica pe [a; b]:
Se considera o diviziune echidistanta a intervalului [a; b] prin nodurile
xi = a + i h; i = 0; n
1
cu h = n
(b a) si se fac notatiile
y (xi+1 ) y (xi 1 )
y 0 (xi ) = (65)
2h
y (xi+1 ) 2y (xi ) + y (xi 1 )
y 00 (xi ) = : (66)
h2
Notand yi = y (xi ) ; i = 0; n, din (64), (65) si (66) se obtine sistemul liniar
1 1
h2
(yi+1 2yi + yi 1 ) + 2h
pi (yi+1 yi 1 ) + qi yi = fi ; i = 1; n 1
(67)
y0 = A; yn = B:
Rezolvand sistemul (67) de n-1 ecuatii cu n-1 necunoscute y1 ; :::; yn 1 se obtine aproximatia
solutiei problemei bilocale (62)+(63) pe nodurile diviziunii considerate.
xi := a + i h
Pasul 3. Executa
y0 := A; yn := B
Pasul 4. Rezolva sistemul
(2 h pi ) yi 1 + (2h2 qi 4) yi + (2 + h pi ) yi+1 = 2h2 fi ; i = 1; n 1
y0 = A; yn = B:
Probleme propuse
1. Sa se construiasca un program in limbajele C si Pascal pentru algoritmul metodei
retelelor.
2. Folosind metoda retelelor sa se rezolve problema bilocala
x x0 0 (x x0 )2 00
y(x) = y(x0 ) + y (x0 ) + y (x0 ) + ::: (69)
1! 2!
Avand in vedere (68) si folosind pentru derivatele lui f notatiile
@f @2f
fx = ; fxy = ; ...
@x @x@y
se obtine
y0 = f
y 00 = fx + fy y 0 = fx + fy f
y 000 = fxx + 2fxy f + fyy f 2 + fx fy + fy2 f:
Deci,
x x0 (x x0 )2 (1)
y(x) = y0 + f (x0 ; y0 ) + f (x0 ; y0 ) + :::
1! 2!
(x x0 )p 1
::: + f (p 1)
(x0 ; y0 ) + ::: (70)
p!
unde f (j) este derivata totala de ordinul j a functiei f (x; y (x)) in raport cu x.
Prin transcrierea seriei (70) si alegerea unui pas de lungime h, x x0 = h; se poate evalua
solutia y in punctul x1 := x0 + h: Mai departe, calculand derivatele y 0 ; y 00 ; ::: in punctul
x1 ; se poate aproxima y(x2 ); x2 := x1 + h: Continuand in acest mod se obtine o multime
discreta de valori yk care aproximeaza solutia y in punctele xk := x0 + kh; si yk y (xk ) ;
k = 1; 2; :::.
In felul acesta, suntem condusi la o metoda iterativa de aproximare discreta a solutiei y a
problemei (68).
Introducand polinomul lui Taylor
h (1) hk 1 (k 1)
(Tk f ) (x; y) = f (x; y) + f (x; y) + ::: + f (x; y); k = 1; 2; :::
2! k!
formula (70) se scrie sub forma:
Probleme propuse
y 0 = x2 y
; x 2 [0; 4]
y(0) = 1
1
Sa se aproximeze valorile solutiei y in punctele xi = 1 + 10
; i = 1; 10 folosind metoda lui
Euler.
h (1) hk 1 (k 1)
(Tk f ) (x; y) = f (x; y) + f (x; y) + ::: + f (x; y); k = 1; 2; :::
2! k!
si formula
y(x) = y0 + h (Tk f ) (x; y)
genereaza metodele de tip Runge-Kutta pentru k = 1; 2; 3; 4:
Pentru k = 1 se obtine metoda lui Euler (Runge-Kutta de ordinul I).
Pentru k = 2 se obtine metoda Runge-Kutta de ordinul al II-lea data recurent prin
1
yn+1 = yn + (K0 + K1 ) ; n 2 N,
2
unde
K0 = hf (xn ; yn ); K1 = hf (xn + h; yn + K0 ); y0 dat.
Pentru k = 3 se obtine metoda Runge-Kutta de ordinul al III-lea generata recurent prin
1
yn+1 = yn + (K0 + 4K1 + K2 ) ; n 2 N, y0 dat,
6
K0 = hf (xn ; yn );
1 1
K1 = hf (xn + h; yn + K0 );
2 2
K2 = hf (xn + h; yn + 2K1 K0 ):
Cea mai des folosita (pentru k = 4) este metoda Runge-Kutta de ordinul al IV-lea generata
recurent prin
1
yn+1 = y0 + (K0 + 2K1 + 2K2 + K3 ) ; n 2 N, y0 dat,
6
K0 = hf (xn ; yn );
1 1
K1 = hf (xn + h; yn + K0 );
2 2
1 1
K2 = hf xn + h; yn + K1 ;
2 2
K3 = hf (xn + h; yn + K2 ):
Ordinul de marime al erorii de trunchiere in metodele Runge-Kutta este de hk+1 :(a se vedea
[8]).
Metoda Runge-Kutta este descrisa de urmatorul algoritm:
1. Date initiale: x0; y0 ; h 2 R, n 2 N si f
2. Pentru i = 0; n 1; se executa
2.1 xi := x0 + ih
2.2 K1 := hf (xi ; yi )
K2 := hf xi + 12 h; yi + 12 K1
K3 := hf (xi + 12 h; yi + 21 K2 )
K4 := hf (xi + h; yi + K3 ) :
2.3. yi+1 := yi + 16 (K1 + 2K2 + 2K3 + K4 )
3. Date …nale: yi ; i = 0; n:
Probleme propuse