Está en la página 1de 33

Algoritmos y programación

Sem. II 2008
Clase 3(II)
Aplicación Iteración Indefinida: Do…Loop
„ Métodos para hallar raíces de funciones:
„ Newton-Raphson
„ Bisección
„ Secante
„ Regla Falsa (Regula Falsi)
1
Raíces de funciones
„ Encontrar raíces de funciones es uno de los
problemas más comunes en ingeniería
„ Los métodos numéricos para encontrar raíces de
funciones se usan cuando las técnicas analíticas
no pueden ser aplicadas.
„ Esto último depende de la naturaleza de la
función f(x).

2
Clase 6
¿Qué es la raíz de una
función?
„ Dada una función f: D ⊂ R Î R
„ Se trata de hallar un valor {x0 ∈ D|f(x0)= 0}
„ Es decir, encontrar las soluciones de la ecuación
f(x) = 0
„ Este procedimiento será más o menos
complicado dependiendo de la expresión
algebraica de la función f(x).

3
Clase 6
¿Cómo se encuentran raíces
de funciones?
„ Existen muchos métodos para hallar raíces de
funciones:
„ Método de Newton-Raphson
„ Método de Bisección
„ Método de la Secante
„ Método de la Regla Falsa (Regula Falsi)
„ Todos estos métodos comparten las mismas
características:

4
Clase 6
Métodos numéricos para
encontrar raíces
„ La búsqueda de la raíz se inicia en:
„ un intervalo conocido donde se

encuentre la raíz o,
„ un punto inicial cercano a la raíz.

„ La raíz encontrada es una aproximación


a la raíz

5
Clase 6
Bisección
„ Encuentra la raíz de una función dado un
intervalo
„ Se basa en el
Teorema de Bolzano:
Bolzano
Si f(x) es una función continua en el intervalo
[a, b],
b] y si, además, en los extremos del
intervalo la función f(x) toma valores de signo
opuesto (f(a)*f(b) < 0), 0 entonces existe al
menos un valor c ∈ (a, b) para el que se
cumple: f(c) = 0. 0 6
Clase 6
Método de la Bisección:
1. Establecer:
f(x): función a la cual se le busca una raíz.
[a, b]:
b] intervalo para iniciar la búsqueda
ε > 0 : margen de error
2. Calcular:
c = (a+b)/2
si |f(c)| < ε entonces,
c es la raíz, finalizar.
de lo contrario,
si f(a)*f(c)<0 entonces,
b = c
de lo contrario,
a = c
3. Repetir el paso 2 hasta que se finalice.
Método de la Bisección
y = f(x)
Y

b
a X

Existe una raíz en el intervalo [a, b] ya que


f(a)*f(b) < 0
y = f(x)
Y

c =(a+b)/2
b
a c X

c = (a+b)/2.
Si f(c) = 0 entonces
c es la raíz,
de lo contrario,
si f(a)*f(c) < 0 entonces la raíz se encuentra en el intervalo [a, c]
si f(c)*f(b) < 0. entonces la raíz se encuentra en el intervalo [c, b]
y = f(x)
Y

La raíz se encuentra
en [c, b] :
f(c)*f(b)<0
b
a c X
f(c)*f(a)>0

Si f(c)*f(b) < 0 entonces


a Å c
y = f(x)
Y

c =(a+b)/2

b
a X

c = (a+b)/2.
Si f(c) = 0 entonces
c es la raíz,
de lo contrario,
si f(a)*f(c) < 0 entonces la raíz se encuentra en el intervalo [a, c]
si f(c)*f(b) < 0. entonces la raíz se encuentra en el intervalo [c, b]
Ejemplo
Hacer un programa en VB que permita obtener la raíz
de la función por el Método de la Bisección:
1 1
f (x) = + −6
( x − 0 . 3 ) + 0 . 01 ( x − 0 . 9 ) + 0 . 04
2 2

12
Clase 6
1. Definición de la función
1 1
f ( x) = + −6
( x − 0 .3) + 0 .01 ( x − 0 .9 ) + 0 . 04
2 2

Private Function F(X As Double) As Double


F = 1 / ((X - 0.3) ^ 2 + 0.01) + 1 / _
((X - 0.9) ^ 2 + 0.04) - 6
End Function

13
Clase 6
2. Algoritmo en basic
Dim A As Double, B As Double, N As Long
Dim epsilon As Double, X As Double, C As Double
A = Val(Text1.Text): B = Val(Text2.Text)
epsilon = Val(Text3.Text): N = 0
Do
C = (A + B) / 2
If Abs(F(C)) < epsilon Then
X = C: Exit Do
ElseIf F(A) * F(C) < 0 Then
B = C
Else
A = C
End If
N = N + 1
Loop While (Abs(F(C)) >= epsilon)
Text4.Text = C: Text5.Text = N 14
Clase 6
3. Interfaz

15
Clase 6
Método de Newton-Raphson

Y
(0,F(X0))

y = f(x) X1 X0
X
X0: Aproximación
inicial
X1: nueva
aproximación
Y
(0,F(X0))

X1: nueva
aproximación

y = f(x) X1 X0
X
X0: Aproximación
inicial

La aproximación X1 es la intersección con el eje X de la línea


tangente a la gráfica de f en (X0, f(X0)):
f (X0)
X1 = X 0 −
f ´( X 0 )
Método de Newton-Raphson
Y X1 = X 0 −
f (X0)
f ´( X 0 )

f ( X1 )
X 2 = X1 −
f ´( X 1 )

y = f(x) X2 X1 X0
X
La aproximación X2 es la intersección con el eje X de la línea tangente a la gráfica
de f en (X1, f(X1))
18
Clase 6
¿Cuál es la aproximación de la
raíz?
f ( X n −1 )
X n = X n −1 − ,n ≥1
f ´( X n −1 )
„ La anterior función corresponde a la intersección
de la recta tangente de f(x) en Xn-1 con el eje
de las X.
„ Dicha intersección, llamada Xn, corresponde a
una aproximación de la raíz para la función
f(x), cuando f(Xn)=0 ó f(Xn) ≤ epsilon
„ Este método no siempre es convergente.
19
Clase 6
¿Cuándo falla el método de
Newton-Raphson?
„ El método es atrapado por una raíz imaginaria de
la función f(x):

20
Clase 6
¿Cuándo falla el método de
Newton-Raphson?
„ Cuando la raíz es un Punto de Inflexión: f’’(x)=0

21
Clase 6
¿Cuándo falla el método de
Newton-Raphson?
„ El método “cae” en un punto máximo ó mínimo (o
en sus cercanías):

22
Clase 6
Algoritmo método Newton-
Raphson
f(x): función cuya raíz se va a encontrar.
f’(x): derivada de f(x)
X0 : punto de inicio partir del cual se va a iniciar el
proceso.
2. Si f(X0)=0 entonces la raíz es X0,
de lo contrario:
f (X0)
Calcule X1 mediante la ecuación: X 1 = X 0 −
f ´( X 0 )
haga X0 igual a X1.
3. Repetir el paso 2 hasta que |f(X0)| ≤ epsilon
23
4. Mostrar X0 Clase 6
Ejemplo 2.
Hacer un programa en VB que permita obtener la raíz
de la función por el Método de Newton-Raphson:
1 1
f (x) = + −6
( x − 0 . 3 ) + 0 . 01 ( x − 0 . 9 ) + 0 . 04
2 2

24
Clase 6
2.1. Definir la función
1 1
f ( x) = + −6
( x − 0 .3) + 0 .01 ( x − 0 .9 ) + 0 . 04
2 2

Private Function F(X As Double) As Double


F = 1 / ((X - 0.3) ^ 2 + 0.01) + 1 / _
((X - 0.9) ^ 2 + 0.04) - 6
End Function

25
Clase 6
2.2. Definir una función para
la derivada
− 2( x − 0.3) 2( x − 0.9)
f ′( x) = −
(( x − 0.3) 2
+ 0.01) (( x − 0.9)
2 2
+ 0.04 )
2

Private Function DF(X As Double) As Double


DF = -2 * (X - 0.3) / ((X - 0.3) ^ 2 + _
0.01) ^ 2 - 2 * (X - 0.9) / _
((X - 0.9) ^ 2 + 0.04) ^ 2
End Function

26
Clase 6
2.3. Código en VB del método
Newton-Raphson
Dim X0 As Double, X1 As Double, N As Integer
Dim epsilon As Double
X0 = Val(Text1.Text)
epsilon = Val(Text2.Text)
N = 0
Do
If (f(X0) = 0) Then Exit Do
X1 = X0 – F(X0)/DF(X0)
X0 = X1
N = N + 1
Loop While(Abs(F(X0)) > epsilon)
Text3.Text = X0 27
Clase 6
2.4. Interfaz gráfica

28
Clase 6
Tareas
„ Investigar los métodos de Secante y
Regla Falsa
„ Hacer los algoritmos para los métodos de
la Secante y la Regla Falsa
„ Implementar ambos algoritmos en VB en
el computador

29
Clase 6
Regla falsa
„ Modifica el método de bisección para acelerar la
convergencia.
„ Unir los dos puntos del intervalo que encierra la
raíz con una recta
„ La intersección de esta recta con el eje x es una
aproximación a la raíz

30
Clase 6
Secante
„ Parte de un intervalo [x0,x1]
„ Estima la pendiente de la recta que une los
extremos del intervalo como:
f’(x0)=(f(x1)-f(x0))/(x1-x0)
„ Sustituye f’(x0) en el método de Newton para
calcular la nueva raíz como:
f ( X 0 )( X 1 − X 0 )
X2 = X0 −
f ( X1 − X 0 )
„ Los dos últimos puntos obtenidos x1, x2 se
emplean en la iteración siguiente. 31
Clase 6
Método de la Regla falsa
1. Establecer:
f(x): función a la cual se le busca una raíz.
[a, b]:
b] intervalo para iniciar la búsqueda
ε > 0 : margen de error
2. inicializar
q0=f(a)
q1=f(b)
3. calcular:
c = b-(q1/(q1-q0))*(b-a)
si |c-b| < ε entonces,
c es la raíz, finalizar.
de lo contrario,
q=f(c)
Si q*q1<0 entonces a = b, q0=q
b=c
q1=q 32
Clase
3. Hasta que se termine o se exceda un 6 de iteraciones.
límite
Regla falsa
Sub Regula_Falsi(ByVal a As Double, ByVal b As Double, ByVal
Tol As Double, _ByVal N As Integer, ByRef Flag As Boolean,
ByRef r As Double)
Dim q, q0, q1, p As Double
Dim i As Integer
i = 2
q0 = f(a)
q1 = f(b)
Do While (i <= N)
p = b - q1 * (b - a) / (q1 - q0)
If Abs(p - b) < Tol Then
Flag = True
r = p
Exit Sub
End If
i = i + 1
q = f(p)
If (q * q1 < 0) Then
a = b
q0 = q1
End If
b = p
q1 = q
Flag = False
Loop
End Sub

También podría gustarte