Documente Academic
Documente Profesional
Documente Cultură
Chişinău -2019
1
Scopul lucrării : Separarea soluțiilor algebrice și transcendente, ce cuprinde 2 etape:
- Separarea intervalelor pe care ecuația are o singură soluție
- Micşorarea pe cît mai mult posibil a fiecărui din aceste intervale sau a unuia din ele (dacă trebuie
de determinat doar una din soluţii).
Condiția problemei: Să se separe analitic și grafic rădăcinile ecuațiilor:
1.(x-1)^2 – (e^x)/2 = 0
2.x^3 + 3*x^2 – 2*x + 4
Algoritmizarea metodei coardelor:
Determinarea extremităţii fixe. Pentru a evita calculul f ′′(x), se va folosi următorul procedeu: se
determină semnul f(x) în punctul c de intersecţie cu axa 0x al dreptei care trece prin punctele (a, f(a)) şi
(b, f(b)). Fixă va fi acea extremitate e a segmentului [a, b], pentru care se îndeplineşte condiţia: f(e)×f (c)
< 0.
Pasul 1. Determinarea extremităţii fixe e şi a aproximării x0 : dacă f(a) × f”(a) < 0, atunci x0 ⇐ a, xf ⇐ b,
altfel x0 ⇐ b, xf ⇐ a; i ⇐ 0.
Pasul 2. Calculul xi+1 conform formulei
Pasul 3. Dacă | xi+1-xi |<=E, atunci soluţia calculată x ⇐ xi . SFÎRŞIT. În caz contrar, i ⇐ i+1 şi se revine
la pasul 2.
Pasul 3. Dacă | xi+1-xi |<=E atunci soluţia calculată x ⇐ xi+1. SFÎRŞIT. În caz contrar, i ⇐ i+1 şi se revine
la pasul 2.
Rezolvare:
Codul text:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
2
double ecuatie(double x){
double rs;
rs = pow(x,3) + 3*pow(x,2) - 2*x + 4;
return rs;
}
int Meniu(){
system("pause");
system("cls");
cout << "1.Metoda coardelor formula 2;" << endl;
cout << "2.Metoda modificata Newton." << endl;
cout << "0.Iesire din program." << endl;
int m;
cin >> m;
return m;
}
int main(){
double a, b, x = 10, x0, xf, e = 0.0001, x1 = 0, xn_1, xn;
double stop, temp;
int f = 0, men;
do{
men = Meniu();
switch(men){
case 1:
if(men = 1) goto ok1;
4
while(f < 1){
ok1:
printf("Dati capetele segmentului:\n");
cout << "a = " ; cin >> a;
cout << "b = "; cin >> b;
f = conditie(a, b);
if (f == 0) cout << "Segment incorect!\n";
}
temp = aprox_init(a,b);
if((ecuatie(temp) * ecuatie(a)) < 0){
x0 = a;
xf = b;
}else{
x0 = b;
xf = a;
}
do{
x = corpus1(x0,xf);
stop = abs(x-x0);
x0 = x;
}while(stop >= e);
cout << endl << "x = " << x;
cout << endl << "f(x) = " << ecuatie(x) << endl;
break;
case 2:
if(men = 2) goto ok2;
while(f < 1){
ok2:
printf("Dati capetele segmentului:\n");
cout << "a = " ; cin >> a;
cout << "b = "; cin >> b;
f = conditie(a, b);
if (f == 0) cout << "Segment incorect!\n";
}
temp = aprox_init(a,b);
5
if((ecuatie(temp) * ecuatie(a)) < 0){
x0 = a;
xn = x0;
}else{
x0 = b;
xn = x0;
}
do{
xn_1 = corpus2(xn,x0);
stop = abs(xn_1-xn);
xn = xn_1;
6
Schema bloc:
Metoda Coardelor 2
7
Metoda Newton modificată
8
9
Concluzie:
A rezolva ecuaţia algebrică sau transcendentă (în continuare ecuaţia) f(x) = 0 înseamnă a determina
acele valori ale variabilei x pentru care egalitatea f(x) = 0 este una adevărată. În cazul cînd ecuaţia are o
structură simplă, soluţiile ei pot fi determinate exact şi relativ uşor prin metodele analitice, care se
studiază în cadrul cursului liceal de matematică. Dacă însă structura ecuaţiei este complicată, procedura
de determinare a soluţiilor devine destul de anevoioasă. Mai mult decît atît, atunci cînd ecuaţia modelează
anumite situaţii, fenomene care depind de mai mulţi parametri, iar valoarea acestora este cunoscută doar
aproximativ, noţiunea de soluţie exactă îşi pierde în general sensul. Din acest motiv, este util de a
cunoaşte şi metodele de calcul aproximativ al soluţiilor ecuaţiilor şi algoritmii care realizează aceste
metode.
10