Lab 1 Metode Numerice [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova Universitatea Tehnică a Moldovei Facultatea Calculatoare, Informatică şi Microelectronică Departamentul Ingineria Software și Automatică

Raport Lucrare de laborator Nr.1 la disciplina: Metode Numerice

Tema: Rezolvarea numerică a ecuațiilor algebrice și transendente

A efectuat:

A verificat:

Chişinău 2019

Sarcina Lucrării:  Să se separe analitic și grafic toate rădăcinile reale al ecuațiilor 𝑦1 = 𝑥 3 + 2𝑥 2 − 𝑥 + 5 - mod analitic 𝑦2 = 𝑥 3 − 5𝑥 − 9 - mod grafic  Să se determine rădăcinile reale ale funcțiilor cu exactitatea ε = 10-5 prin metoda Coardelor 2,metoda mixtă și metoda Newton. 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̇ = 3𝑥 2 + 4𝑥 + 1 2. Egalăm derivat funcției cu 0 și aflăm punctele de interseсție cu axa Ox 𝑦𝑑 = 3𝑥 2 + 4𝑥 + 1 = 0 ∆= 42 + 4 ∗ 3 = 28 3. Deteminăm limitele pe care este posibil ca semnul funcției să alterneze 𝑎 𝑘 =1+ 𝑢𝑛𝑑𝑒 𝑎 = 𝑚𝑎𝑥{|𝑎1 |, |𝑎2 |, ⋯ , |𝑎𝑛 |} |𝑎0 | 5 𝑘 =1+ =6 1 Intervalul de căutare este [−6, 6] 4. Construim șirul lui Rolle x -6 -1,5 0,2 -6 + + + Sign(y) Avem o singură alternanță de semn și respectic o singură soluție reală pe intervalul 𝜀 = [−6, −1,5] b. Separarea rădăcinilor prin modul grafic. 1. Scriem ecuția 𝑥 3 − 5𝑥 − 9 = 0 sub forma 𝑓(𝑥) = 𝑔(𝑥) și obținem 𝑥 3 = 5𝑥 + 9 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 𝜀 = [0, 4]

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 2 ,metoda Newton şi metoda mixtă. Schema bloc a metodei Coardelor este prezentat în fig. 2

Shema bloc al metodei Newton este prezentat în fig. 3

Listingul programului: #include #include #include float x, x0, xx0, x1, xF, t0, t1, r, eps = 0.001; double f(double x) { return pow(x,3)+2*pow(x,2)-x+5; } double f1(double x)//f derivat {

return 3*pow(x,2)+4*x-1; } double f11(double x)//f dublu derivat { return 6*x+4; }

float metoda_coardelor_II(float a, float b) { int n = 0; if(f(a)*f(b) > 0){ printf("\nIntroduceti din nou"); return 0; }else{ printf("\n\n\n||metoda_coardelor_II:||\n"); if(f(a)*f11(a) < 0){ x0 = a; xF = b; }else{ x0 = b; xF = a; } e1: n++; x1 = x0 - ((f(x0)*(xF-x0))/(f(xF)-f(x0))); if(fabs(x1-x0) < eps){ printf("\nx1 = %f\n",x1); printf("f(x) = %f",f(x1)); printf("\nn = %d",n); }else{ x0 = x1; goto e1; } } return 0; } float metoda_tangentelor_Newton(float a, float b) { int n = 0; if(f(a)*f(b) > 0){ printf("\nIntroduceti din nou!\n"); return 0; }else{ printf("\n\n\n||metoda_tangentelor_Newton:||\n"); if(f(a)*f11(a) > 0){ x0 = a; xx0 = x0; xF = b; }else{

x0 = b; xx0 = x0; xF = a; e1:

} n++; x1 = x0 - (f(x0)/f1(x0)); if(fabs(x1-x0) < eps){ printf("\nx1 = %f",x1); printf("\nf(x) = %f",f(x1)); printf("\nn = %d",n); }else{ x0 = x1; goto e1; } } return 0;

} float metoda_mixta(float a, float b) { int n = 0; if(f(a)*f(b) > 0){ printf("\nIntroduceti din nou!\n"); return 0; }else{ printf("\n\n\n|| Metoda mixta: ||\n"); if(f(a)*f11(a) > 0){ t0 = a; x0 = b; }else{ t0 = b; x0 = a; } et: n++; t1 = t0 - (f(t0)/f1(t0)); x1 = x0 - ((f(x0)*(t0-x0))/(f(t0) - f(x0))); if(fabs(t1 - x1) < eps){ r = (t1 + x1)/2; printf("\nx1 = %f",x1); printf("\nt1 = %f",t1); printf("\nf(x) = %f",f(x1)); printf("\nf(t) = %f",f(t1)); printf("\nn = %d",n); }else{ x0 = x1; t0 = t1; goto et; } } return 0; }

int main() { et: char k; float a,b,a1,b1, a2, b2; printf("Dati datele de intrare: \n"); printf("a = "); scanf("%f",&a); printf("b = "); scanf("%f",&b); a2 = a1 = a; b2 = b1 = b; metoda_coardelor_II(a,b); metoda_tangentelor_Newton(a1,b1); metoda_mixta(a2,b2); printf("\n\nDoriti sa continuati? (d/n): "); getchar(); scanf("%c",&k); if(k == 'd'){ system("cls"); goto et; } return 0; }

Afișarea Rezultatelor:

Concluzie: În urma efectuării lucrării de laborator am rezolvat în practică rezolvarea numerică a ecuațiilor algebriceși transcendente.Toate metodele au oferit rezultate aproximativ egale Putem concluziona că cea mai eficientă dintre metodele studiate este metoda mixta .