You are on page 1of 8

UNIVERSITATEA TEHNICA DIN MOLDOVA

RAPORT
La lucrarea de laborator nr 1
Tema : Rezolvarea ecuatiilor algebrice i transcendente

Efectuat de st. gr FI-161 : Harea Ion

Verficat de conf.univ.dr. : Moraru Vasile

Chiinu 2016
Scopul lucrarii:

1)Sa se separe radacinele reale ale ecuatiei f(x)=0 unde y=f(x) este o functie reala de variabila
reala.

2)Sa se determine o radacina reala a ecuatiei date cu ajutorul metodei injumatatirii intervalului cu
o eroare mai mica decit =102.

3)Sa se precizeze radacina obtinuta cu exacitatea =106,utilizind :

Metoda aproximatiilor successive;


Metoda tangentelor (Newton);
Metoda secantelor.
4)Sa se compare rezultatele luind in consideratie numarul de iteratii, evaluarile pentru functii si
derivate.

Varianta : 32-33

Ecuatii propuse spre rezolvare:

3 25 + 19 = 0;

lg(2 + 3) + 2 11 = 0;

Folosim metoda grafica pentru a determina radacinile ecuatiei


3 25 + 19 = 0

Derivata f(x)=3x2+25

x -2 -1 0 1

Y + + + -

2) Pentru a doua ecuatie folosim metoda grafica pentru separarea radacinilor .


Scriem ecuatia lg(2 + 3) + 2 11 = 0 sub forma lg(2 + 3) = 11 2
r (4;5).
#include<iostream>

#include<conio.h>

#include<math.h>

#include<stdio.h>

#define f1 pow(x,3)-25*x+19

#define f1der 3*pow(x,2)-25

#define f1it (-pow(x,3)+19)/25

#define f2 log(2*x+3)+2*x-11

#define f2der (2/(2*x+3)*log(10))+2

#define f2it (log(2*x+3)-11)/2

using namespace std;

float a, b;

int c;

long nr = 0;

float fonction(float x)

if (c == 1) return f1;

else return f2;

float derivee(float x)

if (c == 1) return f1der;

else return f2der;

}
float iteration(float x)

if (c == 1) return (float)(f1it);

else{

return (float)f2it;

float bisect()

float eps = 0.01;

float c;

do

nr++;

c = (a + b) / 2;

if (fonction(c) == 0) return c;

else

if (fonction(a)*fonction(c)<0) b = c;

else a = c;

c = a + (b - a) / 2;

} while (fabs(b - a)>eps);

return (c);

float aprox(float x0)

float x1, eps = 0.000001;


x1 = iteration(x0);

while (fabs(x1 - x0)>eps)

nr++;

x0 = x1;

x1 = iteration(x0);

return x1;

float newton(float x0)

float eps = 0.000001, x;

x = x0 - fonction(x0) / derivee(x0);

while (fabs(x - x0)>eps)

nr++;

x0 = x;

if (fonction(x0 != 0)) x = x0 - fonction(x0) / derivee(x0);

return x;

float secante(float x0, float x1)

float eps = 0.000001, x2;

x2 = x1 - (fonction(x1) - (x1 - x0)) / (fonction(x1) - fonction(x0));

while (fabs(x2 - x1)>eps)

nr++;

x0 = x1;

x1 = x2;
x2 = x1 - (fonction(x1)*(x1 - x0)) / (fonction(x1) - fonction(x0));

return(x2);

int main() {

int n;

float x0;

c = 0;

cout << "Alegeti ecuatia" << endl;

cout << "1. x^3+25*x+19=0" << endl;

cout << "2. lg(2x+3)+2x-11=0" << endl;

cin >> c;

cout << "Introdu numarul de intervale:" << endl;

cin >> n;

for (int i = 1; i <= n; i++) {

cout << endl << "Introdu intervalul." << i << endl;

cin >> a >> b;

cout << "Solutia ecuatie ." << c << " pe intervalul" << "(" << a << "," << b << "):" <<
endl;

cout << "----------------------------------------------\n";

x0 = bisect();

cout << "Solutia prin metoda injumatatirii intervalului:";

printf("%4.2f", x0);

cout << endl;

cout << "Valoare functiei in punctul dat:";

printf("%8.6f\n", fonction(x0));

cout << "Numarul de interatii:" << nr << endl;

nr = 0;

cout << "-------------------------------------------------------------\n";

cout << "Solutia prin metoda aproximatiei succesive:"; printf("%8.6f", aprox(x0));


cout << endl;

cout << "Valoarea functiei in punctul dat:"; printf("%8.6f\n", fonction(aprox(x0)));

cout << "Numarul de iteratii:" << nr << endl;

nr = 0;

cout << "-------------------------------------------------------------\n";

cout << "Solutia prin metoda lui Newton:";

printf("%8.6f", newton(x0));

cout << endl;

cout << "Valoarea functiei in punctul dat:";

printf("%8.6f\n", fonction(newton(x0)));

cout << "Numarul de interatii:" << nr << endl;

nr = 0;

cout << "-------------------------------------------------------------\n";

cout << "Solutia prin metoda secantei:";

printf("%8.6f", secante(a, b));

cout << endl;

cout << "Valoarea functiei in punctul dat:";

printf("%8.6f\n", fonction(secante(x0, a)));

cout << "Numarul de i:" << nr << endl;

nr = 0;

cout << "-------------------------------------------------------------\n";

getch();

return 0;

}
Pentru functia 2 :

Concluzie :
In aceasta lucrare de laborator am separat radacinile reale ale fuctiei algebrice si celei transcendente
utilizand metodele urmatoare : metoda lui Newton,metoda secantei,metoda aprocimatiilor
succesive.Pentru fucntia transcendenta am folosit metoda grafica de separare a radacinilor,iar pentru cea
algebrica sirul lui Rolle.
Facind programul am constatat ca fiecare metoda are rezultatul sau si numarul de iteratii diferit.

You might also like