curs 11 - babeș-bolyai universityvasile.chis/cursuri/info/c11ppt.pdf · cum se defineste o...
TRANSCRIPT
CURS 11
Rezolvarea ecuaţiilor transcendente Fie ecuatia: f(x)=0 algebrică - dacă poate fi adusă la o formă polinomială transcendentă – dacă nu este algebrică
Ecuaţii algebrice: 3x=9; 2x2-3x+2=0; x5=x(2x-1); Ecuaţii transcendente: sin(x)+cos(x)=0.5; eln(x)-x=π;
Pentru determinarea soluţiilor ecuaţiilor transcendente este nevoie de metode de aproximare.
Cum se defineste o rădăcină aproximativă?
Rădăcină unei ecuatii:
Pentru determinarea soluţiilor unei ecuaţii de forma f(x)=0 trebuie parcurse două etape:
1. separarea rădăcinilor - partiţionarea intervalului de definiţie al funcţiei în mai multe subintervale determinate de nodurile xmin=x1, x2, ... , xM=xmax astfel încât oricare subinterval să conţină cel mult o rădăcină a ecuaţiei
2. calculul rădăcinilor cu o anumită precizie
Dacă o funcţie continuă f(x) are valori de semn opus la capetele unui interval [a,b] (dacă f(a)·f(b)<0) atunci în acel interval se găseşte cel puţin o rădăcină a ecuaţiei f(x)=0. Rădăcina este unică în intervalul [a,b] dacă derivata funcţiei (f'(x)) există şi îşi păstrează semnul în acel interval.
1. Separarea rădăcinilor
Nici o radacina in intervalul [-10,-5]
Radacini multiple in intervalul intervalul [0,10]
O singura radacina in intervalul [10,15]
Dacă subintervalele rezultate în urma partiţionării domeniului de definiţie al funcţiei sau a domeniului în care se caută zerourile funcţiei, [xm,xm+1], sunt suficient de mici astfel ca fiecare să conţină cel mult o rădăcină, atunci:
Teorema:
- metoda bisecţiei (înjumătăţirii intervalului) - metoda lui Newton (metoda tangentei) - metoda secantei - metoda falsei poziţii -metoda aproximaţiilor succesive - ...
2. Calculul rădăcinilor cu o anumită precizie
Metode:
Metoda bisecţiei
- constă în împărţirea repetată a intervalului iniţial [a,b] în jumătăţi ale acestuia şi selectarea intervalului (jumătăţii) în care se află soluţia.
Conditia de oprire a procesului iterativ :
- oferă convergenţă liniară a soluţiei ecuaţiei - convergenţă lentă - garantează convergenţa la soluţia exactă dacă valorile f(a) şi f(b) sunt de semne contrare
Avantaje si dezavantaje
Program exemplu: metoda bisecţiei
//metoda bisectiei
#include<stdio.h>
#include<math.h>
#include <conio.h>
#include <stdlib.h>
#define eps 1e-8
double f(double x)
{
return 4.5*cos(x/3)*cos(x/3)-x/4;
}
double bisect(double inf, double sup, double (*pf)(double))
{
double c;
if((*pf)(inf)==0) return inf; if((*pf)(sup)==0) return sup; if((*pf)(inf)*(*pf)(sup)>0)
{
printf("\nNu exista sol sau exista solutii multiple");
while(!_kbhit());
exit(1);
}
do {
c=(inf+sup)/2.0;
if((*pf)(c)==0) return c;
if((*pf)(inf)*(*pf)(c)<0)
sup=c;
else
inf=c;
}
while((sup-inf) >= eps); // conditia de oprire
return c;
}
int main()
{
double s;
float A=3.0, B=4;
s=bisect(A,B,f);
printf("\nSolutia este s= %lf\a",s); while(!_kbhit()); return 0;
}
Metoda lui Newton
- propusă de către Isaac Newton în anul 1669 - revăzută de către Joseph Raphson în 1690 si Thomas Simpson în 1740 - una dintre cele mai răspândite metode folosite în acest scop - algoritmul bazat pe această metodă poate fi folosit şi la determinarea minimului sau maximului unei funcţii prin determinarea zeroului primei derivate a funcţiei, în metode de optimizare.
Fie ecuatia: f(x)=0
Conditia de oprire a procesului iterativ :
Calculul soluţiei exacte implică: 1. alegerea unei aproximaţii iniţiale (x0) a soluţiei ecuaţiei f(x)=0
- condiţie necesară şi suficientă: f(x0)f"(x0)>0. 2. calculul derivatei funcţiei al cărui zero se calculează
- calcul numeric (daca nu este posibil analitic)
Deoarece în relaţia iterativă de calcul a rădăcinii valoarea f'(x0) apare la numitor, în cazul accidental în care derivata funcţiei în punctul xi este zero, se va alege pentru aceasta valoarea ε (o valoare mică, diferită de zero) folosită la calculul derivatei sale.
1. în unele cazuri este necesară o alegere atentă a valorii de start, x0 2. necesită evaluarea a două funcţii. 3. la o iteraţie, se poate determina numai una dintre rădăcinile ecuaţiei cu rădăcini
multiple (depinde de rădăcina aproximativă de "guess" de la care se porneşte)
Dezavantajele metodei lui Newton
Calculul numeric al derivatelor
1. Forward differences method (FDM)
2. Central differences method (CDM)
Vezi cursul 2 – pasul de reprezentare a numerelor reale simpla precizie: 2-23 = 1.192 x 10-7
dubla precizie: 2-52= 2.22 x 10-16
Pentru valori de tip REAL, stocate pe 4 octeţi, p 10-7, iar pentru valori de tip DOUBLE, stocate pe 8 octeţi, p 10-16.
Conditii pentru alegerea valorii
//Metoda Newton
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> double f(double x) { return 4.5*cos(x/3)*cos(x/3)-x/4; } double newton(double (*) (double), double x0) { double p=1.0,eps,x,df; int k; //Calculul preciziei masinii si a valorii eps do p=p/2.0; while(p+1.0!=1.0); eps=pow(p,1/3.0); printf("p= %.20lf\teps= %.20lf",p,eps); //Calculul solutiei x=x0; k=0; do { k++; x0=x; //calculul numeric al derivatei prin CDM df=(f(x+eps)-f(x-eps))/2/eps; //evitarea cazului in care df este zero if(df==0) df=eps; //actualizarea solutiei x=x0-f(x)/df; printf("\nIteratia: %d: x= %15.12lf",k,x);
if(k>20) { printf("\nNu converge!"); exit(1); } } while(x!=x0); printf("\nSolutia ecuatiei este
%15.12lf\nNr. de iteratii: %d",x,k); return x; } int main () { double x0,x; int k; printf("Solutia initiala: x0= "); scanf("%lf",&x0); newton(f,x0); while(!_kbhit()); return 0; }