Sunteți pe pagina 1din 9

LUCRAREA 06

REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE


METODELE SECANTEI, NEWTON-RAPHSON ȘI
APROXIMAȚIILOR SUCCESIVE

METODE NUMERICE DE MODELARE, SIMULARE ȘI OPTIMIZARE


Doctorand Conducător Științific
Ing. Doru STOICA Prof. Univ. Habil. Dr. Ing. Mihai Adrian ALBULESCU

UNIVERSITATEA PETROL – GAZE DIN PLOIEŞTI


Ploiești, 2021
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

Cuprins

Cuprins ......................................................................................................................................... 2

Enunțul și scopul lucrării ................................................................................................................. 3

Suport teoretic............................................................................................................................ 3

Produsul software folosit .............................................................................................................. 3

Functiile și resursele utilizate ........................................................................................................ 3

Cerințele lucrării ............................................................................................................................ 4

YOUR LOGO 2
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

Enunțul și scopul lucrării

Această lucrare practică are ca scop trasarea


graficelor diferitelor funcții și aflarea soluțiilor
ecuațiilor algebrice utilizând metoda secantei,
Newton-Raphson și a aproximațiilor succesive,
precum și comparațiile între acestea. Vor fi
exemplificate următoarele aspecte:
 Definirea funcției SecantMethod;
 Definirea funcției NewtonMethod;
 Definirea funcției AproxSucc.

SUPORT TEORETIC

Elementele necesare rezolvării cerințelor propuse au fost prezentate în cadrul


cursului.

PRODUSUL SOFTWARE FOLOSIT

 Microsoft Excel, VBA

FUNCTIILE ȘI RESURSELE UTILIZATE

 Grafice. Funcții definite de utilizator pentru metodele enunțate.

YOUR LOGO 3
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

Cerințele lucrării

Să se rezolve următoarele cerințe:


 Se va deschide aplicația de calcul tabelar;
 Se va salva pe desktop fișierul cu numele
laborator_excel_06.xlsm;
 Se vor realiza următoarele foi de lucru:
 Metoda secantei
 Metoda Newton-Raphson
 Metoda aproximațiilor succesive
 Comparație
 Se va selecta foaia de lucru Metoda secantei și se va
completa cu următoarele valori, începând cu celula
A1.
x f(x) a b Metoda secantei Nr. iter.
-1.00
-0.98
 Se vor completa valorile asociate variabilei x în intervalul [-1..1,4]
cu rația 0,02, începând cu celula A4 până la A44;
 Se va deschide interfața VBA, se va insera un modul (Module1) și se va
introduce următorul script:
Const Pi = 3.14159265358979

Public Function f(ByVal x As Double) As Double


f = x ^ 2 - 0.7
End Function

Public Function SecantMethod(ByVal a As Double, ByVal b As Double, ByVal Toleranta As Double, ByRef contor As Integer) As Double
Dim err As Double
Dim x As Double
contor = 0
Do
contor = contor + 1
x = a - f(a) * (a - b) / (f(a) - f(b))
err = Abs(x - a)
b = a
a = x
Loop Until ((err < Toleranta) Or (contor > 1000))
SecantMethod = x

End Function

Public Function separa(xmin As Double, xmax As Double, dx As Double) As Variant


Dim nr_val As Integer, nrN As Integer, nrInt As Integer
nr_val = (xmax - xmin) / dx + 1

Dim fx(), vint()


Dim x As Double
Dim i As Integer, j As Integer

ReDim fx(1 To nr_val, 1 To 2)


ReDim vint(1 To 10, 1 To 2)

x = xmin
i = 0
Do
i = i + 1

YOUR LOGO 4
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE
fx(i, 1) = x
fx(i, 2) = f(x)
x = x + dx
Loop Until x > xmax
nrN = i

j = 0
For i = 1 To nrN - 1
If (fx(i, 2) * fx(i + 1, 2) <= 0) Then ' testarea conditiei de existenta a radacinii
j = j + 1
vint(j, 1) = fx(i, 1)
vint(j, 2) = fx(i + 1, 1)
End If

Next i
nrInt = j
separa = vint
End Function

Sub Secanta()

Dim i As Integer
Dim contor As Integer
Dim a As Double, b As Double
Dim val()
Dim Toleranta As Double
Toleranta = 0.001

Worksheets(1).Range("B2:L100").ClearContents

For i = 2 To 122
Worksheets(1).Cells(i, 2).Value = f(Worksheets(1).Cells(i, 1).Value)
Next i
val = separa(-5, 10, 1)
For i = 1 To UBound(val, 1)
Worksheets(1).Cells(i + 1, 3).Value = val(i, 1)
Worksheets(1).Cells(i + 1, 4).Value = val(i, 2)
Next i

For i = 2 To UBound(val, 1)
If Not (IsEmpty(Worksheets(1).Cells(i, 3).Value)) Then
a = Worksheets(1).Cells(i, 3).Value
b = Worksheets(1).Cells(i, 4).Value
Worksheets(1).Cells(i, 5).Value = SecantMethod(a, b, Toleranta, contor)
Worksheets(1).Cells(i, 6).Value = contor
End If
Next i

End Sub

 Se va adăuga un buton pe foaia de calcul din secțiunea Controls din pagina Developer:
 Se va denumi butonul Metoda Secantei (click dreapta pe buton->Edit) și se va asocia
cu macro-ul Secanta (click dreapta pe buton->Assign Macro):
 Se va rula scriptul prin acționarea butonului definit la pasul anterior;
 Se va realiza graficul funcției;

YOUR LOGO 5
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

 Se va selecta foaia de lucru Metoda Newton-Raphson și se va completa cu următoarele


valori, începând cu celula A1:
x f(x) a b Metoda Newton-Rapson Nr. iter.
-1.00
-0.98
 Se vor completa valorile asociate variabilei x în intervalul [-1..1,4] cu rația 0,02,
începând cu celula A4 până la A44;
 Se va deschide interfața VBA, se va insera un modul (Module2) și se va introduce
următorul script:
Public Function dF(ByVal x As Double) As Double
dF = 2 * x
End Function

Public Function NewtonMethod(ByVal x0 As Double, ByVal Toleranta As Double, ByRef contor As Integer) As Variant
Dim xn As Double, err As Double, x As Double
contor = 0
x = x0
Do
contor = contor + 1
xn = x - f(x) / dF(x)
err = Abs(xn - x)
x = xn
Loop Until ((err < Toleranta) Or (contor > 1000))
NewtonMethod = xn
End Function

Sub Newton_Raphson()

Dim i As Integer
Dim contor As Integer
Dim a As Double, b As Double
Dim val()
Dim Toleranta As Double
Toleranta = 0.001
contor = 0

Worksheets(2).Range("B2:L100").ClearContents

For i = 2 To 122
Worksheets(2).Cells(i, 2).Value = f(Worksheets(2).Cells(i, 1).Value)
Next i
val = separa(-5, 10, 1)
For i = 1 To UBound(val, 1)
Worksheets(2).Cells(i + 1, 3).Value = val(i, 1)
Worksheets(2).Cells(i + 1, 4).Value = val(i, 2)
Next i

For i = 2 To UBound(val, 1)
If Not (IsEmpty(Worksheets(2).Cells(i, 3).Value)) Then
a = Worksheets(2).Cells(i, 3).Value
b = Worksheets(2).Cells(i, 4).Value
Worksheets(2).Cells(i, 5).Value = NewtonMethod((a + b) / 2, Toleranta, contor)
Worksheets(2).Cells(i, 6).Value = contor
End If
Next i

End Sub

 Se va adăuga un buton pe foaia de calcul din secțiunea Controls din pagina Developer:
 Se va denumi butonul Metoda Newton-Raphson (click dreapta pe buton->Edit) și se va
asocia cu macro-ul Newton_Raphson (click dreapta pe buton->Assign Macro):
 Se va rula scriptul prin acționarea butonului definit la pasul anterior;
 Se va realiza graficul funcției;

YOUR LOGO 6
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

 Se va selecta foaia de lucru Metoda aproximațiilor succesive și se va completa cu


următoarele valori, începând cu celula A1:
x f(x) a b Metoda Aproximațiilor Succesive Nr. iter.
-1.00
-0.98
 Se vor completa valorile asociate variabilei x în intervalul [-1..1,4] cu rația 0,02,
începând cu celula A4 până la A44;
 Se va deschide interfața VBA, se va insera un modul (Module3) și se va introduce
următorul script:
Public Function g(ByVal x As Double) As Double
g = x ^ 2 + x - 0.7
End Function

Public Function AproxSucc(ByVal x0 As Double, ByVal Toleranta As Double, ByRef contor As Integer) As Variant
Dim dx As Double, xn As Double, err As Double, x As Double
contor = 0
x = x0
Do
contor = contor + 1
xn = g(x)
err = Abs(xn - x)
x = xn
Loop Until ((err < Toleranta) Or (contor > 1000))
AproxSucc = xn
End Function

Sub Aproximatiilor_Succesive()

Dim i As Integer
Dim contor As Integer
Dim a As Double, b As Double
Dim val()
Dim Toleranta As Double
Toleranta = 0.001
contor = 0

Worksheets(3).Range("B2:L100").ClearContents

For i = 2 To 122
Worksheets(3).Cells(i, 2).Value = f(Worksheets(3).Cells(i, 1).Value)
Next i
val = separa(-5, 10, 1)
For i = 1 To UBound(val, 1)
Worksheets(3).Cells(i + 1, 3).Value = val(i, 1)
Worksheets(3).Cells(i + 1, 4).Value = val(i, 2)
Next i

For i = 2 To UBound(val, 1)
If Not (IsEmpty(Worksheets(3).Cells(i, 3).Value)) Then
a = Worksheets(3).Cells(i, 3).Value
b = Worksheets(3).Cells(i, 4).Value
Worksheets(3).Cells(i, 5).Value = AproxSucc((a + b) / 2, Toleranta, contor)
Worksheets(3).Cells(i, 6).Value = contor
End If
Next i

End Sub

 Se va adăuga un buton pe foaia de calcul din secțiunea Controls din pagina Developer:
 Se va denumi butonul Metoda aproximatiilor succesive (click dreapta pe buton->Edit)
și se va asocia cu macro-ul Aproximatiilor_Succesive (click dreapta pe buton->Assign
Macro):
 Se va rula scriptul prin acționarea butonului definit la pasul anterior;
 Se vor realiza graficele funcției f(x), g(x) și a bisectoarei y=x;

YOUR LOGO 7
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

 Se va selecta foaia de lucru Comparație și se va completa cu următoarele valori,


începând cu celula A1:
x f(x) a b Metoda Nr. Metoda Nr. Metoda Newton- Nr. Metoda Aproximatiilor Nr.
bisectiei iter secantei iter Raphson iter Succesive iter.

-1.00

-0.98

 Se vor completa valorile asociate variabilei x în intervalul [-1..1,4] cu rația 0,02,


începând cu celula A4 până la A44;
 Se va deschide interfața VBA, se va insera un modul (Module4) și se va introduce
următorul script:
Private Function BisectionMethod(ByVal a As Double, ByVal b As Double, ByVal Toleranta As Double, ByRef contor As Integer) As Variant

Dim Midpoint As Double


Dim Approx As Double
contor = 0

If (Sgn(f(a)) = Sgn(f(b))) Then


BisectionMethod = "f(a) si f(b) trebuie sa aiba semn diferit"
Else
Do
contor = contor + 1
Midpoint = (a + b) / 2
Approx = f(Midpoint)
If Sgn(f(a)) = Sgn(Approx) Then
a = Midpoint
Else
b = Midpoint
End If

Loop Until ((Abs(b - a) < Toleranta) Or (Approx = 0) Or (contor > 1000))

BisectionMethod = Midpoint
End If

End Function

Sub comparatie()

Dim i As Integer
Dim contor As Integer
Dim a As Double, b As Double
Dim val()
Dim Toleranta As Double
Toleranta = 0.001

Worksheets(4).Range("B2:L100").ClearContents

For i = 2 To 122
Worksheets(4).Cells(i, 2).Value = f(Worksheets(4).Cells(i, 1).Value)
Next i

val = separa(-5, 10, 1)

For i = 1 To UBound(val, 1)
Worksheets(4).Cells(i + 1, 3).Value = val(i, 1)
Worksheets(4).Cells(i + 1, 4).Value = val(i, 2)
Next i

For i = 2 To UBound(val, 1)
If Not (IsEmpty(Worksheets(4).Cells(i, 3).Value)) Then
a = Worksheets(4).Cells(i, 3).Value
b = Worksheets(4).Cells(i, 4).Value

Worksheets(4).Cells(i, 5).Value = BisectionMethod(a, b, Toleranta, contor)


Worksheets(4).Cells(i, 6).Value = contor
Worksheets(4).Cells(i, 7).Value = SecantMethod(a, b, Toleranta, contor)
Worksheets(4).Cells(i, 8).Value = contor
Worksheets(4).Cells(i, 9).Value = NewtonMethod((a + b) / 2, Toleranta, contor)
Worksheets(4).Cells(i, 10).Value = contor
Worksheets(4).Cells(i, 11).Value = AproxSucc((a + b) / 2, Toleranta, contor)
Worksheets(4).Cells(i, 12).Value = contor
End If
Next i

End Sub

YOUR LOGO 8
LUCRAREA 06
REZOLVAREA NUMERICĂ A ECUAȚIILOR ALGEBRICE. METODELE SECANTEI, NEWTON-RAPHSON ȘI APROXIMAȚIILOR SUCCESIVE

 Se va adăuga un buton pe foaia de calcul din secțiunea Controls din pagina Developer;
 Se va denumi butonul Compara (click dreapta pe buton->Edit) și se va asocia cu macro-
ul comparatie (click dreapta pe buton->Assign Macro);
 Se va rula scriptul prin acționarea butonului definit la pasul anterior.
 Se va realiza graficul funcției;
 Se va salva fișierul și se vor purta discuții pe marginea rezultatelor obținute prin
modificarea variabilei Toleranta din foaia de calcul Comparație;
 Se va salva fișierul cu numele laborator_excel_06_sin.xlsm
 Se va înlocui funcția inițială f(x)=x2-0.7 cu funcția sin(x). Se vor actualiza și funcțiile
dF și g(x) din cadrul macrocomenzilor.
 Se vor modifica valorile asociate variabilei x în intervalul [-4..8] cu rația 0,10, în toate
foile de calcul;
 Se vor rula pe rând macrocomenzile prin intermediul butoanelor asociate;
 Se va actualiza graficul funcției g(x) din foaia de calcul Metoda aproximațiilor succesive;
 Se va salva fișierul și se vor purta discuții pe marginea rezultatelor obținute prin
modificarea variabilei Toleranta din foaia de calcul Comparație;
 Se va salva fișierul cu numele laborator_excel_06_exp.xlsm
 Se va înlocui funcția f(x)=sin(x) cu funcția ex-2x-3. Se vor actualiza și funcțiile dF și
g(x) din cadrul macrocomenzilor.
 Se vor modifica valorile asociate variabilei x în intervalul [-4..2] cu rația 0,05, în toate
foile de calcul;
 Se vor rula pe rând macrocomenzile prin intermediul butoanelor asociate.
 Se va actualiza graficul funcției g(x) din foaia de calcul Metoda aproximațiilor succesive;
 Se va salva fișierul și se vor purta discuții pe marginea rezultatelor obținute prin
modificarea variabilei Toleranta din foaia de calcul Comparație;

YOUR LOGO 9

S-ar putea să vă placă și