Documente Academic
Documente Profesional
Documente Cultură
Raport
la lucrarea de laborator nr.1
Metode numerice.
Scopul lucrarii:
Insusirea metodelor de separare a radacinilor patrate ale ecuatiei f(x)=0 si
determinarea lor cu exacitatea E.
Sarcina 1:
Sa se separe toate radacinile ecuatiei:
a) 3 0.2 2 0.3 + 1.2 = 0
b) 3 12x 5 = 0
Spararea radaciniilor prin metoda grafic:
3 12x 5 = 0
3 = 12x + 5
Graficul:
ina g
Listingul programului
1 #include<iostream>
2 #include<stdlib.h>
3 #include<math.h>
4
5 using namespace std;
6
7 double fx(double x);
8 double f1x(double x);
9 double f2x(double x);
10 void INPUT(void);
11 void NEWTON(double a, double b, double e);
12 void Secantei(double a, double b, double e);
13 double a, b, e, Nmax;
14
15 int main(void)
16 {
17 int n;
18 // textcolor(BLACK);
19 while (1) {
20 cout << "\n\nSe da ecuatia: x^3 - 12x - 5 =0\n"
21 << "Alegeti metoda de gasire a solutiei:\n"
22 << "1. Metoda Newton;\n"
23 << "2. Metoda Secantei;\n"
24 << "3. Ambele metodele;\n"
25 << "0. Iesire din program;\n";
26 cin>>n;
27 switch (n) {
28 case 1:INPUT();
29 NEWTON(a, b, e);
30 break;
31 case 2:INPUT();
32 Secantei(a, b, e);
33 break;
34 case 3:INPUT();
35 NEWTON(a, b, e);
36 Secantei(a, b, e);
37 break;
38 case 0:exit(0);
39 }
40
41 }
42 }
43
44 double fx(double x)
45 {
46 return x * x * x - 12 * x - 5;
47 }
48
49 double f1x(double x)
50 {
51 return 3 * x * x - 12;
52 }
53
54 void NEWTON(double a, double b, double e)
55 {
56 int itr;
57 float h, x0, x1, allerr;
58
59 for (itr = 1; itr <= Nmax; itr++) {
60 h = fx(a) / f1x(a);
61 x1 = a - h;
62 cout << "\nIteratia: " << itr << " x = " << x1;
63 if (fabs(h) < e){
64 cout << "\nDupa " << itr << " iteratii radacina = " <<
x1;
65 return;
66 }
67 a = x1;
68 }
69 }
70
71 void Secantei(double b, double c, double e)
72 {
73 int a, k = 0;
74 do {
75 a = b;
76 b = c;
77 c = b - fx(b)*(b - a) / (fx(b) - fx(a));
78 if (fx(c) == 0) {
79 cout << "\nRadacina ecuatiei = " << c; //print the root
80
81 }
82 k++;
83 } while (fabs(c - b) >= e);
84 cout << "\nRadacina ecuatiei = " << c << "\n Nr de iteratii = " <<
k;
85
86 }
87
88 void INPUT(void)
89 {
90 cout << "Introduceti [a;b] :";
91 cin >> a>>b;
92 if (a > b) {
93 cout << "INPUT EROR!";
94 // getch();
95 exit(0);
96 }
97 cout << "Introduceti eroarea absoluta :";
98 cin>>e;
99 cout << "\nE = " << e << endl;
100 cout << "Introduceti nr maxim de iteratii :";
101 cin>>Nmax;
102 }
Rezultatul final
Concluzie:
Dup efectuarea acestei lucrri de laborator am studiat metodele de rezolvare numerica a
ecuaiilor neliniare si transcendente. Am reuit s determin rdcinile reale cu o diferen
foarte mic si sa separ radacinile acestora.Am observat numrul de iteraii al fiecarei
metode, medota lui Newton avind un numar mai mic de iteratii.