Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword
Like this
1Activity
0 of .
Results for:
No results containing your search query
P. 1
Lab2-FctiiSimple

Lab2-FctiiSimple

Ratings: (0)|Views: 100|Likes:
Published by Martin Barbarozas
Lab2-FctiiSimple
Lab2-FctiiSimple

More info:

Categories:Types, School Work
Published by: Martin Barbarozas on Mar 14, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/23/2014

pdf

text

original

 
Laborator VBA pentru Excel 2
Metode numerice in VBA
Vom folosi VB pentru a g
ă
si radacinile ecua
ţ
iei
04
=
 xe
x
 prin dou
ă
metode:metoda bisec
ţ
iei
ş
i metoda Newton-Raphson.Ecua
ţ
ia de mai sus are o r
ă
d
ă
cin
ă
în intervalul -2,0.
Pentru a aplica metoda bisec
ţ
iei:
 1. Lansa
ţ
i Microsoft Excel2. Lansa
ţ
i Visual Basic Editor3. In VBE ad
ă
uga
ţ
i un modul4. Tasta
ţ
i codul de mai jos in modulul Module1
-8-6-4-20246-2 -1.5 -1 -0.5 0 0.5 1 1.5 2
 
Option ExplicitPrivate Const Toleranta As Double = 0.001Public Function Bisectie(a As Double, b As Double) As VariantIf (Sgn(f(a)) = Sgn(f(b))) ThenBisectie = "f(a) si f(b) trebuie sa aiba semn diferit"ElseBisectie = BisectionMethod(a, b)End IfEnd FunctionPrivate Function f(x)f = Exp(-x) - x - 4End FunctionPrivate Function BisectionMethod(a As Double, b As Double) As DoubleDim Midpoint As DoubleDim Approx As DoubleDoMidpoint = (a + b) / 2Approx = f(Midpoint)If Sgn(f(a)) = Sgn(Approx) Thena = MidpointElseb = MidpointEnd IfLoop Until (((b - a) <= Toleranta) Or (Approx = 0))BisectionMethod = MidpointEnd Function
Noi func
ţ
ii
ş
i operatori VBA în codul de mai sus
Exp(x) = Returneaz
ă
un Double care este e (baza logaritmilor naturali) ridicat la puterea x.Sgn(x) = Returneaz
ă
un Variant (Integer) ce indic
ă
semnul num
ă
rului x.Or = Execut
ă
o disjunc
ţ
ie logic
ă
asupra a dou
ă
expresii.Remarca
ţ
i c
ă
func
ţ
iile
f
 
ş
i
BisectionMethod
sunt private (vizibile doar în modulul
Module1
), func
ţ
ia care va fifolosit
ă
în Excel fiind
Bisectie
, singura declarat
ă
 
Public
în modul.Am declarat
ş
i o constant
ă
denumit
ă
Toleranta care este Private (vizibila doar în modul Module1), dar fiinddeclarat
ă
în afara procedurilor ea este vizibil
ă
în tot modulul.
 
5. Insera
ţ
i formula simpl
ă
Bisectie în Excel
ş
i modifica
ţ
i valoarea constantei Toleranta pentru a vedea efectulei asupra rezultatului6. Executa
ţ
i codul pas cu pas pentru a vedea modul de calcul al metodei
Pentru a aplica metoda Newton Raphson:
 1. In VBE ad
ă
uga
ţ
i un nou modul2. Tasta
ţ
i codul de mai jos in modulul Module2
Option ExplicitPrivate Const Toleranta As Double = 0.0001Private Const PI As Double = 3.14159265358979Private Const MaxIteratii = 1000Private Function Func(ByVal x As Double, Optional ByRef df As Double) As DoubleFunc = Exp(-x) - x - 4df = -Exp(-x) - 1End FunctionPublic Function NewtonRaphson(x As Double, tip As Integer) As VariantSelect Case tipCase 1NewtonRaphson = Newton(x)Case 2NewtonRaphson = NewtonNumDeriv(x)Case ElseNewtonRaphson = "Selectati 1 sau 2"End SelectEnd FunctionPrivate Function Newton(x As Double) As Variant' Determina o radacina prin metoda Newton-Raphson utilizand derivata analiticaDim iter As IntegerDim f As Double, df As Double, dx As DoubleFor iter = 1 To MaxIteratiif = Func(x, df) 'functia si derivatadx = IIf((Abs(df) > Toleranta), -f / df, -f) ' corectia radaciniix = x + dx ' noua aproximatieIf (Abs(dx) <= Toleranta * Abs(x)) ThenNewton = xExit FunctionEnd IfNext iterNewton = "Nr. maxim de iteratii depasit!"End FunctionPrivate Function NewtonNumDeriv(x As Double) As Variant' Determina prin metoda Newton-Raphson utilizand derivarea numericaDim iter As IntegerDim f As Double, df As Double, dx As DoubleFor iter = 1 To MaxIteratiif = Func(x)dx = 0.000000001 ' pasul de derivaredf = (Func(x + dx) - f) / dx ' derivata numericadx = IIf((Abs(df) > Toleranta), -f / df, -f) ' corectia radacinii
 
x = x + dx ' noua aproximatieIf (Abs(dx) <= Toleranta * Abs(x)) ThenNewtonNumDeriv = xExit FunctionEnd IfNext iterNewtonNumDeriv = "Nr. maxim de iteratii depasit!"End Function
Noi func
ţ
ii
ş
i instruc
ţ
iuni VBA în codul de mai sus
IIf(conditie, parte True, parte False) = este o func
ţ
ie ce evalueaz
ă
condi
ţ
ia. Dac
ă
condi
ţ
ia este adeva
ă
rat
ă
,returneaz
ă
partea true, altfel partea falseAbs(x) = Returneaz
ă
valoarea absolut
ă
a num
ă
rului x.Select Case conditie = Permite executarea uneia sau a mai multor instruc
ţ
iuni func
ţ
ie de valoarea conditiei.Optional = semnific
ă
faptul c
ă
parametrul ce urmeaz
ă
poate s
ă
lipseasc
ă
.Remarca
ţ
i c
ă
în func
ţ
ia
Func
, parametrul x este transmis prin valoare (
ByVal
), pe când parametrul op
ţ
ional dfprin referin
ţă
(
ByRef
). Acest lucru precizeaz
ă
faptul c
ă
în urma apelului func
ţ
iei
Func
, cel de-al doileaparametru
poate fi modificat
în func
ţ
ie
ş
i
va fi returnat cu noua valoare
în procedura apelant
ă
. Dac
ă
 cuvintele cheie
ByRef
sau
ByVal
lipsesc, VB consider
ă
implicit modul de transfer al variabelor
ByRef
.3. Insera
ţ
i formula simpl
ă
Newton în Excel
ş
i modifica
ţ
i valoarea constantei Toleranta pentru a vedea efectulei asupra rezultatului4. Executa
ţ
i codul pas cu pas pentru a vedea modul de calcul al metodeiVom folosi VB pentru a calcula integrala definit
ă
 
==
b xa x x
dxe
π  
2
2
2
 folosind metodele:metoda dreptunghiului
ş
i a trapezului.
Pentru a aplica metodele de integrare:
 1. Ad
ă
uga
ţ
i un nou modul Module32. Tasta
ţ
i codul de mai jos in modulul Module3
Option ExplicitPublic Enum TipIntegralaStanga = 1Centru = 2Trapez = 3End EnumPrivate Const PI As Double = 3.14159265358979Private Function f(x As Double) As Doublef = Exp(-x ^ 2 / 2) / Sqr(2 * PI)End FunctionPublic Function Integrala(a As Double, b As Double, nInt As Integer, tip As TipIntegrala)Select Case tipCase StangaIntegrala = DreptunghiStanga(a, b, nInt)Case CentruIntegrala = DreptunghiCentru(a, b, nInt)Case TrapezIntegrala = IntegralaTrapez(a, b, nInt)Case ElseIntegrala = "Selectati tip intre 1 si 4"End SelectEnd Function

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->