34 0 216KB
Universitatea Tehnică a Moldovei Facultatate Calculatoare Informatică și microelectronică Catedra Informatică Aplicată
Raport Lucrare de laborator Nr.1 la disciplina: Metode Numerice
Tema: Rezolvarea numerică a ecuațiilor algebrice și transendente
A efectuat:
st. gr. C-151 Dutcovici Radu
A verificat:
dr. conf un. E.Tutureanu
Chişinău 2016
Scopul Lucrării: Să se separe analitic și grafic toate rădăcinile reale al ecuațiilor y 1=x 3−3 x 2+ 6 x −5 - mod analitic y 2=x 3−3 x +5
- mod grafic
Să se determine rădăcinile reale ale funcțiilor cu exactitatea ε = 10-4 prin metoda Coardelor și metoda Newton. Să se compare rezultatele obținute. Mersul Lucrării: 1. Separarea Rădăcinilor: a. Separarea rădăcinilor prin modul analitic. Pentru sepeararea rădăcinilor în mod analitic este utilizata metoda șirului lui Rolle. 1. Derivăm ecuația y1 2 y d = y´ 2=3 x −6 x+ 6 2. Egalăm derivat funcției cu 0 și aflăm punctele de interseсție cu axa Ox y d =3 x2−6 x+6=0 ∆=−62−4∗3=−3 3. Deteminăm limitele pe care este posibil ca semnul funcției să alterneze a k =1+ unde a=max {|a1|,|a 2| ,⋯ ,|an|} |a0| 6 k =1+ =7 1 Intervalul de căutare este [ −7, 7 ] 4. Construim șirul lui Rolle x 7 7013 .5
Sign (y)
---
+
+
Avem o singură alternanță de semn și respectic o singură soluție reală pe intervalul ε =[ −7, 7 ] b. Separarea rădăcinilor prin modul grafic. 3 ❑ 1. Scriem ecuția x −3 x +5=0 sub forma f ( x )=g( x ) și obținem x 3=3 x−5 2. Construim graficile funcției
Graficul funcției este prezentat în fig. 1 Figura 1 Graficul funcției y2
Funcția are o singură rădăcină reală pe intervalul ε =[ 1, 3,5 ]
2. Determinarea rădăcinilor funcției: Pentru determinarea rădăcinilor reale a fost elaborat un program în limbajul de programarea C++ care utilizează ambele metode de determinare metoda Coardelor și metoda Newton. Schema bloc a metodei Coardelor este prezentat în fig. 2
fig. 2
Shema bloc al metodei Newton este prezentat în fig. 3
Listingul programului: #include #include #include #include using namespace std; double f1(double x) { return pow(x, 3) - 3 * pow(x, 2) + 6 * x - 5; } double f1_der(double x) { return 3 * pow(x, 2) - 6 * x + 6; } double f2(double x) { return pow(x, 3) - 3 * x + 5; } double f2_der(double x) { return 3 * pow(x, 2) - 3; } void calc_met_coarde(double a, double b, double eps, double(*f)(double)) { double x; double x0 = a; double x1 = b; double y; int iter = 0; if (f(a) * f(b) > 0) { if (f(a) < 0)) { x0 = b; x1 = a; } x = x0; while (fabs(f(x)) > eps) { x = x0 - f(x0) * (x1 - x0) / (f(x1) - f(x0)); if (f(x0) * f(x) < 0) x1 = x; else x0 = x; iter++; } printf("Metoda Coardelor:\n"); printf("x = %6f\n", x);
printf("f(x) = %6f\n", f(x)); printf("nr de iteratii = %d\n", iter); } else printf("eroarea!!!\n"); }
void itang(double a, double b, double eps, double(*f)(double), double(*f1)(double)) { int i = 0; double xn = f(a) * f1(a) > 0 ? b : a; double x1 = xn - f(xn) / f1(xn); double x0 = xn; if (f(a) * f(b) eps) { x0 = x1; x1 = x1 - f(x1) / f1(x1); i++; } printf("Metoda tangentelor:\n"); printf("x = %6f\n", x1); printf("f(x) = %6f\n", f(x1)); printf("nr de iteratii = %d\n", i); } else printf("Eroare!!!\n"); } int main() { printf("f1:\n"); calc_met_coarde(0, 3.5, 0.0001, f1); itang(0, 10, 0.0001, f1, f1_der); printf("\nf2:\n"); calc_met_coarde(-3, 0, 0.0001, f2); itang(-7, 0, 0.0001, f2, f2_der); return 0; }
Afișarea Rezultatelor:
3. Compararea rezultatelor: Metoda
Coardelor Newton
Rădăcina ( x 0 )
Nr. de iterații
f 1( x )
f 2( x )
f 1(x )
1.32216 4 1.32218 5
0.00007 6 -0.0000
Eroarea
ε
f 2(x )
27
12
0.0001
3
6
0.0001
Concluzie: În urma efectuării lucrării de laborator am rezolvat în practică rezolvarea numerică a ecuațiilor algebriceși transcendente. Ambele metode au oferit rezultate aproximativ egale Putem concluziona că cea mai eficientă dintr-e metodele studiate este metoda Newton. Conform tabelului rezultatelor metoda Newton este de 2 ori mai eficientă față de metoda Coardelor.