rezolvarea numerica a ecuatiilor algebrice si transcendente

Post on 28-Nov-2015

17 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Metode numerice

Tema: Rezolvarea numerică a ecuaţiilor algebriceşi transcendente.

Scopul lucr ă rii: 1) Să se separe toate rădăcinile reale ale ecuaţiei f(x) = 0 unde y = f(x) este o

funcţie reală de variabilă reală.2) Să se determine o rădăcină reală a ecuaţiei date cu ajutorul metodei

înjumătăţirii intervaluluicu o eroare mai mică decît ε = 10+6.3) Să se precizeze rădăcina obţinută cu exactitatea ε = 10+6, utilizînd: metoda aproximaţiilor succesive; metoda tangentelor (Newton); metoda secantelor.

4) Să se compare rezultatele luînd în consideraţie numărul de iteraţii, evaluările pentru funcţii şi derivată.

V – 25x3 - 15x - x2 + 19 = 0

Consideraţii teoretice :

1. Calculul rădăcinii reale prin metoda înjumătăţirii intervalului Să considerăm ecuaţia f(x)=0,unde funcţia f(x) este continuă pe intervalul [a,b],are o singură rădăcină reală în acest interval şi f(a)*f(b)<0. Calculăm c=(a+b)/2 – jumătatea intervalului [a,b]. Dacă f(c)=0, atunci c este chiar rădăcina cautată, dacă nu, atunci rădăcina reală se găseşte într-unul din intervalele [a,c] sau [c,b], acolo unde funcţia capătă valori de semne contrare la capetele intervalului (dacă f(a)*f(c)>0, atunci a=c, altfel b=c, atît cît |a-b|>eps, unde eps - o eroare precizată).2. Metoda aproximaţiilor succesive: Fie f(x)=0, sub forma x=(x). Această reprezentare se mai numeşte funcţia iteraţională. Plecînd de la o valoare iniţială arbitrară x0 generăm şirul {xk} (funcţie generică) după regula : xk+1=(xk), k=0,1,2,…, pînă cînd |xk+1-xk| < eps, unde eps – o eroare precizată. 3. Metoda lui Newton(metoda tangentelor) Fie o ecuaţie algebrică sau transcendentă f(x)=0 care admite o singură rădăcină reală în intervalul [a,b]. Metoda lui Newton este definită după următoarea formulă: xk+1=xk-f(xk) / f’(xk), k=1,2,…, unde punctul xk+1 este abscisa punctului de intersecţie a tangentei dusă la curba y=f(x) în punctul xk cu axa ox. De aceea metoda aceasta se numeşte metoda tangentelor. Valoarea xk+1 se calculează pînă cînd |xk+1-xk|<eps, unde eps – o eroare precizată.4.Metoda secantelor

Aceasta metoda constă în aproximarea funcţiei f(x) pe intervalul [a,b], în care ecuaţia f(x)=0 are o rădăcină izolată printr-o dreaptă. Algoritmul metodei secantelor constă în calculul iterativ după formulele:

Am separat radacina prin metaoda grafica, deoarece prin metoda lui Rolle cind am incercat sa gasesc radacinile derivatei am ajuns la inexistenta solutiilor.

Metoda grafica fiind deci o alternative la cea a lui Rolle. Asa deci dind valori am abtinut un grafic si am gasit intervalul [-10,10].

f `(x) = 3x2 -15-x

Listingul programului:

#include<iostream.h>#include<stdlib.h>#include<dos.h>#include<math.h>#include<conio.h>#define eps1 0.01#define eps2 0.01#include<iostream.h>#include<conio.h>#include<STDLIB.H>#include<math.h>

float f(float a,float b,float c,float d,float x) { float f; f=a*x*x*x+b*x*x+c*x+d; return f; }float F1(float a,float b,float c,float d,float x) // derivata lui F { float f; f=a*x*x+b*x+c; return f; }void Binary (float A,float B,float eps,float a,float b, float c,float d) { float S,D,fx,x; int k;

S=A;if (f(a,b,c,d,A)<0) S=B; D=A+B-S; k=0;

do { x=S+(D-S)/2; k++; fx=f(a,b,c,d,x); if (fx==0) exit(1);

if (fx>0) S=x; else D=x; } while((fabs(S-D))>eps);gotoxy(4,11); cout<<"Met Injumatatirii Intervalului";cout<<" Solutia= ";cout<<x<<endl;gotoxy(42,12); cout<<"Nr de iteratii= ";cout<<k;

}

float radical(float x){ float r=(float)1/3;float p=x*x+15*x-19;return exp(r*log(p)); }void Aprox_succesive(float x0,float eps,int Nmax,float a,float b,float c,float d) { float x1,y,x,h; double u; int k=0;

u=1/3;y=x0;do { x=y; h=x*x+15*x-19; y=pow(h,u); k++;

} while(fabs(y-x)>eps&&k<Nmax);x1=x;

gotoxy(4,15); cout<<"Met. Aproximatiilor succesive";cout<<" Solutia = "; gotoxy(42,16); cout<<"Nr de iteratii= "<<k;

gotoxy(52,15); cout<<x1<<endl; }

void Newton(float x0,float eps,int Nmax,float a,float b,float c,float d) { float x1,x,y,d0=1e30,d1; int k,Ier; x=x0; k=0; Et: ; x1=x-f(a,b,c,d,x)/F1(a,b,c,d,x); d1=fabs(x1-x); if (d1<eps) {Ier=0; } else { if (d1<d0) {

if (k>Nmax) {Ier=2; } else k++;

x=x1; d0=d1; goto Et; }

else { Ier=1; } } gotoxy(4,19); cout<<"Met. Newton: "; cout<<" Solutia= "<<x; gotoxy(42,20); cout<<"Ier= "<<Ier; }void Tang_Secant(float A,float B,float eps,int Nmax,float a,float b,float c,float d) {

float FA,FB,FX,x,xt; int Num=0;

FA=f(a,b,c,d,A); FB=f(a,b,c,d,B); x=A-(B-A)*FA/(FB-FA); //calculul solutiei initiale FX=f(a,b,c,d,x); if (FA*FX<=0) {

xt=A; do { x=x-(x-A)*FX/(FX-FA); // calculul dupa form coardelor FX=f(a,b,c,d,x); xt=xt-f(a,b,c,d,xt)/F1(a,b,c,d,xt); // calc dupa form tangentelor Num++; } while(fabs(x-xt)>eps&&Num<Nmax); }

else { xt=B; do {

x=x-(B-x)*FX/(FB-FX); // dupa form Coardelor FX=f(a,b,c,d,x); xt=xt-f(a,b,c,d,xt)/F1(a,b,c,d,xt); //dupa form Tangentelor Num++; } while(fabs(x-xt)<eps&&Num<Nmax);

} gotoxy(4,23); cout<<"Met. Coardelor si Secantelor:"; cout<<" Solutia= "<<x; gotoxy(34,24); cout<<" Nr de iteratii= "<<Num; }void main (void) { float A,B,eps,x,a,b,c,d; int Nmax,temp; clrscr(); gotoxy(20,1); cout<<"Introduceti coeficientii ecuatiei"; gotoxy(10,2); cout<<"a=1"<<endl; a=1; gotoxy(10,3); cout<<"b=-1"<<endl; b=-1; gotoxy(10,4); cout<<"c=-15"<<endl; c=-15; gotoxy(10,5); cout<<"d=19"<<endl; d=19; cout<<"introduceti intervalul [A,B] = [0,1]"<<endl; A=0; B=1; cout<<"introduceti eps= 0.01 "; eps=0.000001; cout<<endl<<"introduceti Nmax de iteratii= 99"; Nmax=99;

cout<<endl<<" "; Binary(A,B,eps,a,b,c,d); Aprox_succesive(A,eps,Nmax,a,b,c,d); Newton(A,eps,Nmax,a,b,c,d); Tang_Secant(A,B,eps,Nmax,a,b,c,d); getch(); }

Rezultatul programului:

Introduceţi coeficienţii ecuaţiei: a= 1 b= -1 c=-15 d= 19introduceti intervalul [A,B] = [0,1]introduceti eps= 0.01introduceti Nmax de iteratii= 99

Met Injumatatirii Intervalului Solutia= 0.999999 Nr de iteratii= 20 Met. Aproximatiilor succesive Solutia = 1 Nr de iteratii= 2 Met. Newton: Solutia= 0.999998 Ier= 0 Met. Coardelor si Secantelor: Solutia= 0.999997 Nr de iteratii= 1

top related