Unidad 2 - ayudasingenieria · 2021. 2. 3. · Métodos Cerrados Métodos Cerrados: 1)Bisección...
Transcript of Unidad 2 - ayudasingenieria · 2021. 2. 3. · Métodos Cerrados Métodos Cerrados: 1)Bisección...
Unidad 2
Solución de Ecuaciones No Lineales
Raíces de ecuaciones
Técnicas numéricas para encontrar:
• Raíces reales de ecuaciones algebraicas y trascendentes. Determinan sólo una raíz real. Métodos Cerrados y Métodos Abiertos
• Raíces reales y complejas de polinomios. Determinan todas las raíces.
Problema del paracaidista
• Forma explícita: calcular v dadas g, m, c y t
Solución analítica
• Forma implícita: calcular c dadas g, m, v y t
Ecuación no lineal
No tiene solución analítica !!! Se resuelve numéricamente
v (t )=g m
c( 1−e
−cm
t )
f (c )=g m
c( 1−e
−cm
t ) −v=0
Métodos Cerrados
Métodos Cerrados: 1)Bisección 2)Falsa Posición La función cambia de signo en la vecindad de
una raíz. Dos valores iniciales que “encierren” a la raíz.
Reducen el tamaño del intervalo y así convergen a la respuesta aproximada correcta.
Raíz de una EcuaciónDefinición: valor de x tal queEn los métodos cerrados se requieren dos valores iniciales: los extremos
del intervalo xl y x
u (lower: inferior, upper: superior).
Generalmente si: f(x
l) y f(x
u) tienen signos opuestos: número impar de raíces
f(xl) y f(x
u) tienen el mismo signo: cero o un número par de raíces
f (x )=0
Métodos Gráficos
Son útiles para: determinar los valores iniciales. visualizar propiedades de las funciones.
Raíces múltiples Función discontinua
Raíz doble
Método de Bisección
[bisectar = dividir en dos segmentos iguales]
En general, si f(x) es real y continua en el intervalo [xl , x
u] y
f(xl) y f(x
u) tienen signos opuestos,
es decir
f(xl).f(x
u)<0 (1)
entonces hay al menos una raíz entre
xl y x
u.
Algoritmo del Método de Bisección
Paso 1: se elige intervalo [xl , x
u] donde haya cambio de signo de
la función. Verificar con (1)
Paso 2: se aproxima la raíz
como el punto medio del
intervalo
(2)
fórmula de la bisección
x r=x l + x u
2 raíz verdadera
raíz aproximada
f (x )
x
f (x l)
f (xr )
f (xu)
x l xuxr xrv
Algoritmo del Método de Bisección
Paso 3: seleccionar aquel subintervalo en que f(x) cambie de signo
a) Si f(xl).f(x
r)<0 ,
la raíz está en el
subintervalo izquierdo
Hacer xu
xr
y volver al Paso 2
Iteración actual
Iteración siguiente
Este subintervalo se descarta
raíz verdadera
raíz aproximada
f (x )
f (x l)
f (xr )
f (xu)
x l xu xxr
xrv
x l xu=xranterior
f (x l)⋅f (x r )<0
Algoritmo del Método de Bisección
b) Si f(xl).f(x
r)>0 ,
la raíz está en el
subintervalo derecho
Hacer xl x
r
y volver al Paso 2
c) Si f(xl).f(x
r)=0 ,
la raíz es xr ,
termina el cálculo
Iteración actual
Iteración siguiente
Este subintervalo se descarta
f (x )
raíz aproximada
raíz verdadera
f (x l)
f (xr )
f (xu)
x l xu xxr xrv
x l=xranterior xu
f (x l)⋅f (x r )>0
Representación Gráfica del Método
Método de Bisección: Ejemplo 5.3
Encontrar la raíz de la función:
Elegimos el intervalo donde hay cambio de signo en la función, por ejemplo [12,16]:
Se cumple que f(xl).f(x
u)<0
f (x )=667.38
x( 1−e−0.146843 x )−40
Iteración xl
xu
f(xl) f(x
u)
0 12 16 6.06 2.26
Método de Bisección: Ejemplo 5.3
Método de Bisección: Ejemplo 5.3
Iteración xl xu f(xl) f(xu) xr f(xr) signo f(xl) f(xr)
1 12 16 6.06 2.26 14 1.56 +
(cambio de signo en este intervalo)
Se hace: xl=xr=14 Nuevo intervalo: [14 , 16]
Método de Bisección: Ejemplo 5.3
Iteración xl xu f(xl) f(xu) xr f(xr) signo f(xl) f(xr)
2 14 16 1.56 2.26 15 0.42
(cambio de signo en este intervalo)
Se hace: xu=xr=15 Nuevo intervalo: [14 , 15]
Método de Bisección: Ejemplo 5.3
Iteración xl xu f(xl) f(xu) xr f(xr) signo f(xl) f(xr)
3 14 15 1.56 0.42 14.5 0.55 +
(cambio de signo en este intervalo)
Se hace: xl=xr=14.5 Nuevo intervalo: [14.5 , 15]
Ejemplo 5.3: Estimación del Error
Iteración xl xu xr a (%) t(%)
1 12 16 14 5.279
2 14 16 15 6.667 1.487
3 14 15 14.5 3.448 1.896
4 14.5 15 14.75 1.695 0.205
5 14.75 15 14.875 0.840 0.641
Valor 'verdadero' hasta 6 cifras: x rverdadero
=14.7802
εa=|x rnuevo
−x ranterior
x rnuevo |⋅100 % εt=|x r
nuevo−x r
verdadero
x rverdadero |⋅100 %
Error relativo aproximado porcentual Error relativo verdadero porcentual
Criterio de finalización de iteraciones: tolerancia
εa <εs
(3) (4)
Método de Bisección: Curvas de Error
E t =|x rnuevo
−x rverd|⩽Δx /2
E a=|xrnuevo
−x rant|=Δx /2
La curva de error verdadero siempre está por debajo de la curva de error aproximado
Método de Bisección: Curvas de Error
y distantes
Iteración actual
x l xuxranteriorxr
v
x l xuxrnuevo
raíz verdadera cerca del centro del intervalo
|xrnuevo
−xrv|
|xrnuevo
−xranterior|
εa εt
y cercanos
Iteración anterior
Iteración actual
x l xuxranteriorxr
v
x l xuxrnuevo
raíz verdadera cerca del extremo del intervalo|xr
nuevo−xr
v|
|xrnuevo
−xranterior|
εa εt
Iteración anterior
εt=|x rnuevo
−xrverd
xrverd | εa=|x r
nuevo−xr
ant
x rnuevo |
Método de Bisección: Error Especificado
n=ln (Δ x 0 /E a ,d )
ln 2
Número de iteraciones para un error absoluto especificado
Sea Ea,d
el error absoluto deseado en el cálculo y x0 el intervalo
inicial de búsqueda. El número de iteraciones n que deben realizarse
para determinar la raíz con ese error especificado es :
(5)
Método de Bisección: Pseudocódigo
iniciar xl, xu // Paso 1 iniciar iter=0, imax, es, xr = xudefinir funcion frepetir: xv = xr // Para calcular ea xr = (xl + xu)/2 // Paso 2 si xr != 0: ea = abs((xr xv)/xr)*100 iter = iter + 1 prueba = f(xl) * f(xr) // Paso 3 si prueba < 0: xu = xr en caso contrario: xl = xr hasta que (ea<es or iter>=imax)mostrar xr
• Código en Octave: biseccion.m• Código en Python: biseccion.py• Planilla de cálculo: biseccion.ods
Método de la Falsa Posición
Bisección no es muy eficiente.Se prefiere el método de la falsa posición o regula falsi.
Se aproxima la raíz como la
intersección de la recta con
el eje x
Método de la Falsa Posición: Cálculo de xr
Triángulos semejantes , ángulos iguales:
Despejando xr:
f (x )
f (x l)
f (xr )
f (xu)
x l xu xxr xrv
tanα=f (x l)
x r−x l
=f (xu)
x r−x u
x r=x u−f (x u)(x l−x u)
f (x l )− f (x u)fórmula de la falsa posición (6)
Algoritmo del Método de la Falsa Posición
Paso 1: idéntico al Paso 1 del método de bisección.Paso 2: se aproxima la raíz con la fórmula de la falsa posición (6).Paso 3: idéntico al Paso 3 a) o b) del método de bisección.
Además, se introducen: cambios para reducir evaluaciones de la función (ver pseudocódigo Método de Regula Falsi).
contadores para evitar estancamiento (ver pseudocódigo Método de Regula Falsi Modificado).
Representación Gráfica del Método
Representación Gráfica del Método
f (x )
raíz verdadera
f (x l)
f (xr1)
f (xu)
x l xu xxr1xr
v xr2
punto estancado
f (x )
raíz verdadera
f (x l)
f (xr1)
f (xu)
x l xu xxr1xr
v xr2
punto estancado
f(x) no tiene un punto de inflexión en [xl , x
u]
a) f(xl).f(x
r)<0
Representación Gráfica del Método
f (x )
raíz verdadera
f (x l)
f (xr1)
f (xu)
x l xu xxr1 xr
vxr2
punto estancado
f (x )
raíz verdadera
f (x l)
f (xr1)
f (xu)
x l xux
xr1
xrv
xr2
punto estancado
f(x) no tiene un punto de inflexión en [xl , x
u]
b) f(xl).f(x
r)>0
Representación Gráfica del Métodof (x )
f (x l1)
f (xr1)
f (xu1)
x l1 xu
1 xx l2=xr
1
xrv
f (x l)⋅f (x r )>0
xu3=xr
2 xu2
f (xr2)
x l3
xr3
Los superíndices denotan el número de iteración
Iteración 1:
Iteración 2:
Iteración 3:
f (x l)⋅f (x r )<0
f (x l)⋅f (x r )>0
f(x) tiene un punto de inflexión en [x
l , x
u]
Caso General:
Método de la Falsa Posición: Pseudocódigo
iniciar xl, xu // Paso 1 iniciar iter=0, imax, es, xr = xudefinir funcion ffl = f(xl), fu = f(xu) //cambios para reducir evaluaciones de la funciónrepetir: xv = xr // Para calcular ea xr = xu fu*(xlxu)/(flfu) // Paso 2 si xr != 0: ea = abs((xr xv)/xr)*100 iter = iter + 1 fr = f(xr) prueba = fl * fr // Paso 3 si prueba < 0: xu = xr fu = fr en caso contrario: xl = xr fl = fr hasta que (ea<es or iter>=imax)mostrar xr
Método de la Falsa Posición: Ejemplo 5.5
Resolver, por el método de la Falsa Posición, con g = 9.8, m = 68.1, t = 10:
f (c )=g m
c( 1−e
−cm
t ) −v=0
• Planilla de cálculo: regula_falsi.ods
• Código en Octave (opción 1): regula_falsi.m
• Código en Octave (opción 2): regula_falsi2.m
• Código en Python: regula_falsi.py
Método de la Falsa Posición: Curva de Error
Método de la Falsa Posición Modificado
Existen problemas si la función es casi constante: el avance hacia la raíz es lento, ya que uno de los puntos se estanca si la función no tiene un punto de inflexión .
Modificación de la falsa posición: cuando la función se estanca, se divide por dos el valor de la misma en el punto estancado.
Se detecta el estancamiento a través de contadores.
Método de la Falsa Posición Modificado
f (x )
raíz verdadera
f (x l1)
f (x l2)
f (xu1)
x l1 xu
1 xxr1 xr
vxr2
punto estancado en las tresprimeras iteraciones
xr3
f (x l3)
f (xu2)
f ( xu2)
2
3º iteración: Regula Falsi Regula Falsi Modificada
1º iteración
2º iteración3º iteración
Método de la Falsa Posición Modificado: Pseudocódigo
iniciar xl, xu // Paso 1 iniciar iter=0, imax, es, xr = xudefinir funcion ffl = f(xl), fu = f(xu) //cambios para reducir evaluaciones de la funciónrepetir: xv = xr // Para calcular ea xr = xu fu*(xlxu)/(flfu) // Paso 2 si xr != 0: ea = abs((xr xv)/xr)*100 iter = iter + 1 fr = f(xr) prueba = fl * fr // Paso 3 si prueba < 0: xu = xr fu = fr iu = 0 , il = il + 1 // contadores para evitar estancamiento si (il>=2): fl = fl/2 en caso contrario: xl = xr fl = fr il = 0 , iu = iu + 1 // contadores para evitar estancamiento si (iu>=2): fu = fu/2 hasta que (ea<es or iter>=imax)mostrar xr
Falsa Posición Modificado: Ejemplo 5.5
Resolver por el método de la Falsa Posición Modificado, con g = 9.8, m = 68.1, t = 10:
f (c )=g m
c( 1−e
−cm
t ) −v=0
• Código en Python: ejemplo5_5_RFM.py • Planilla de cálculo: ejemplo5_5_RFM.ods
Falsa Posición Modificado: Ejemplo 5.6
Resolver, por el método de la Falsa Posición Modificado, con x
l = 0 , x
u = 1.3:
f (x )=x 10−1=0
• Código en Python (regula falsi):ejemplo5_6_RF.py • Código en Octave: regFalsiMod.m• Código en Python:regFalsiMod.py • Planilla de cálculo: regFalsiMod.ods
Problemas 5.1 a 5.19, pag. 139
Métodos Abiertos
• También emplean iteraciones sucesivas.• No requieren que el intervalo inicial encierre a la
raíz.• En general, son más eficientes que los cerrados,
aunque no siempre funcionan.• Se extienden para sistemas de ecuaciones no
lineales.
Métodos Cerrados y Abiertos
• Idea: reescribir la ecuación
como
– Despejando x– Sumando x miembro a miembro
• Ejemplos:
Iteración de Punto Fijo
f (x )=0
x=g (x )
x 2−2 x +3=0⇒x=
x 2+32
sin x=0⇒ x=sin x + x
• Esquema iterativo: (7)
• Error aproximado: (8)
Iteración de Punto Fijo: Cálculo de xr
x i+1=g (x i )
fórmula de iteración de punto fijo
εa=|x i +1−x i
x i +1|⋅100%
Iteración de Punto Fijo: Ejemplo 6.1 Hallar, mediante iteración de punto fijo, la raíz de:
f (x )=e−x−x
Se reescribe como: x i+1=e−x i
Valor inicial: x 0=0
x 1=e−x 0=e−0=1
x 2=e−x 1=e−1=0.367879...
1º iteración:
2º iteración:
• Planilla de cálculo: punto_fijo.ods• Código en Python: punto_fijo.py• Código en Octave: punto_fijo.m
Resolver x = g(x) equivale a encontrar la intersección de las gráficas de las funciones:
Esta intersección se denomina punto fijo de la función g(x)
f 1(x )=x
f 2(x )=e−x
Iteración de Punto Fijo: Interpretación Geométrica
Representación Gráfica del Método
CONVERGE
DIVERGE
COMPORTAMIENTOMONÓTONO
COMPORTAMIENTOOSCILATORIO
Ecuación iterativa:
Solución exacta:
Restando m. a m.:
Por TVM:
con:
Condición de Convergenciax i+1=g (x i )
x r=g (x r )
x r−x i +1=g (x r )−g (x i)
g ' (ξ)=g (x r )−g (x i )
x r−x i
x i≤ξ≤x r
Como es proporcional a , el método eslinealmente convergente o divergente.
Reemplazando: (9)
Por lo tanto: (10)
Condición de Convergencia
E t , i +1=g ' (ξ )E t , i
|g ' ( ξ)|<1
∀ξ∈[x i , x r ]
Esto significa que se asegura la convergencia si en todo el intervalo . |g ' (x )|<1 [x 0 ,x r ]
E t ,i +1 E t ,i
g 1(x )
x 0
Verificar la condición de convergencia de las funciones de iteración de punto fijo de:
CONVERGE
Condición de Convergencia: Ejemplo
x 2−2 x−2=0 , x 0=2
g 1(x )=√ 2 x +2
g ' 1(x )=1
√ 2 x +2
|g ' 1(2)|<1
Función de iteración g1(x):
DIVERGE de la raíz cercana a x
0=2
Condición de Convergencia: Ejemplo
g 2(x )=x 2
−22g ' 2(x )=x
|g ' 2(2)|>1
Otra función de iteración g2(x):
CONVERGE a otra raíz !!
Cuidado:
g 2 (x )
x 0
Iteración de Punto Fijo: Pseudocódigo
iniciar xv, iter=0, imax, es definir funcion grepetir: xr = g(xv) si xr != 0: ea = abs((xr xv)/xr)*100 iter = iter + 1 xv = xr hasta que (ea<es or iter>=imax)mostrar xr
Igualando la pendiente a f '(x):
f ' (x i)=f (x i)−0
x i−x i +1
Despejando (...):
x i+1=x i−f (x i )
f ' (x i )
Método de NewtonRaphson
(11)fórmula de NewtonRaphson
Encontrar, por el método de NewtonRaphson, la
raíz de: f (x )=e−x−x
f ' (x )=−e−x−1
f (x 0)=e−0−0=1
f ' (x 0)=−e−0−1=−2
x 1=x 0−f (x 0)
f ' (x 0)=0−
1−2
=0.5 ...
Método de NewtonRaphson: Ejemplo 6.3
La derivada de la función es :
Valor inicial: x 0=0
1º iteración:
Método de NewtonRaphson: Ejemplo 6.3
• Planilla de cálculo: newton_raphson.ods• Código en Python: newton_raphson.py• Código en Octave: newton_raphson.m
La ecuación iterativa de NR:
Es una ecuación de iteración de punto fijo:
Siendo:
Condición de Convergencia
x i+1=g (x i)
x i +1=x i−f (x i)
f ' (x i)
g (x i )=x i−f (x i )
f ' (x i )
g ' (x i )=f (x i ) f ' ' (x i)
[ f ' (x i)]2Si existe: ∀ x i∈[x 0 , x r ]
Condición de Convergencia
El Teorema de NewtonRaphson demuestra que se asegura la convergencia si en todo el intervalo .
|g ' (x )|<1[x 0 ,x r ]
Como es proporcional a , el método escuadráticamente convergente o divergente.
Análisis de Error Newton Raphson
Partiendo de la serie de Taylor se puede demostrar que:
E t ,i +1 E t ,i2
E t , i +1=−f ' ' (x r )
2 f ' (x r )E t , i
2
Esto significa que el número de cifras correctas aproximadamente se duplica en cada iteración cuando el método converge.
(12)
Desventajas del método de NewtonRaphson
Desventajas del método de NewtonRaphson
NewtonRaphson: Pseudocódigo
iniciar xv, iter=0, imax, es definir funcion fdefinir funcion dfrepetir: xr = xv f(xv)/df(xv) si xr != 0: ea = abs((xr xv)/xr)*100 iter = iter + 1 xv = xr hasta que (ea<es or iter>=imax)mostrar xr
x i−1x i
xx i+1x r
f (x )línea
secante
Se aproxima la derivada f '(x) de NewtonRaphson con una diferencia finita hacia atrás:
Método de la Secante
f ' (x i)=f (x i−1)− f (x i)
x i−1−x i
Sustituyendo en la fórmula de NewtonRaphson y despejando xi+1:
Si bien necesita 2 puntos, no se clasifica como un método cerrado.
Método de la Secante
x i+1=x i−f (x i ) ( x i−1−x i )
f (x i−1)− f (x i )(13)
fórmula de la secante
Encontrar, por el método de la secante, la raíz de:f (x )=e−x
−x
Método de la Secante: Ejemplo 6.6
La raíz verdadera es:
Valores iniciales:1º iteración:
x=0.56714329 ...
x−1=0.0 , x 0=1.0
x−1=0 , f (x−1)=1.00000
x 0=1 , f (x 0)=−0.63212
x 1=1−−0.63212 (0−1)
1−(−0.63212)=0.61270 , ε t=8.0 %
Método de la Secante: Ejemplo 6.6
• Planilla de cálculo: secante.ods• Código en Python: secante.py• Código en Octave: secante.m
Como es proporcional a , el método tiene convergencia o divergencia superlineal, ya que .
Análisis de Error Secante
Se puede demostrar que:
E t ,i +1 E t ,i1.618
E t , i +1=| f ' ' (x r )
2 f ' (x r )|0.618
E t , i1.618 (14)
Lo que significa que: E t , i +1=cte E t , i1.618
1< p=1.618 <2
Falsa Posición Secante: Diferencias
Método de la Secante: Pseudocódigo
iniciar x0, x1, iter=0, imax, es definir funcion frepetir: x2 = x1 (f(x1)*(x0x1))/(f(x0)f(x1)) si x2 != 0: ea = abs((x2 x1)/x2)*100 iter = iter + 1 x0 = x1; x1 = x2 hasta que (ea<es or iter>=imax)mostrar x2
Considera un cambio fraccionario para estimar la derivada:
f ' (x i)=f (x i+δx i)− f (x i)
δx i
Reemplazando en la ecuación de NR:
x i+1=x i−δ x i f (x i )
f (x i +δ x i )− f (x i )
Método de la Secante Modificado
fórmula de la secante modificada
(15)
No se pueden usar métodos cerradospara raíces múltiples pares.
Los métodos de NewtonRaphson y de la secante tienen convergencia lineal cuando hay raíces múltiples.
Raíces Múltiples
Se puede demostrar que u(x) tiene las mismas raíces que f(x):
u (x )=f (x )
f ' (x )
Planteando NR para u(x): x i +1=x i−u (x )
u ' (x )Desarrollando (...),
x i +1=x i−f (x i) f ' (x i)
[ f ' (x i ) ]2− f (x i ) f ' ' (x i)
Método de NewtonRaphson Modificado
fórmula de NewtonRaphson modificada
(16)
Tiene convergencia cuadrática para raíces múltiples.
NewtonRaphson Modificado: Pseudocódigo
iniciar xv, iter=0, imax, es definir funcion fdefinir funcion dfdefinir funcion d2frepetir: xr = xv (f(xv)*df(xv)) / (df(xv)**2f(xv)*d2f(xvt)) si xr != 0: ea = abs((xr xv)/xr)*100 iter = iter + 1 xv = xr hasta que (ea<es or iter>=imax)mostrar xr
NewtonRaphson Modificado: Ejemplo 6.9
Calcular, por los métodos de NewtonRaphson estándar y modificado, la raíz múltiple de:
f (x )=x 3−5 x 2
+7 x −3
• Código en Python: newton_ej6_9.py • Código en Octave: newton_ej6_9.m• Código en Python: newtonRaphsonMod.py • Código en Octave: newtonRaphsonMod.m
Problemas 6.1 a 6.25, pag. 167
Valor inicial: x 0=0
Raíces de Polinomios
• Deflación polinomial
• Método de Müller
• Permite encontrar sucesivamente las raíces de un polinomio P(x).
• Una vez encontrada una raíz x1, para no
volver a la misma raíz se divide a P(x) por (x – x
1). El nuevo polinomio ya no
posee la raíz x1.
Deflación Polinomial
Encontrar las raíces de:P (x )=x 3−2 x 2
−x +2
Aplicando el método de NewtonRaphson con x0 = 0:
Primera raíz: 2.00000 ( 2 iteraciones)
Nuevo polinomio:
g (x )=x 2−1
Deflación Polinomial: Ejemplo
g (x )=P (x )
x−2
Nuevo polinomio:
Tercera raíz: 1.00000 (1 iteración)
Para realizar P(x)/(x2), se puede utilizar Octave: >> P=[1 2 1 2];>> p1=[1 2];>> [g,r]=deconv(P,p1)g = 1 0 1r = 0 0 0 0
P (x )=1 x 3−2 x 2−1 x +2
p 1(x )=1 x −2
resto del cociente
Deflación Polinomial: Ejemplo
Aplicando el método de NR con x0 = 1:
h (x )=g (x )
x−1=x +1
Segunda raíz: 1.00000 ( 1 iteración)
Deflación Polinomial: Ejemplo
Método de la secante:
2 puntos función lineal→
Método de Müller:
3 puntos función cuadrática→
Método de Müller
Método de Müller
Se escribe la función cuadrática de la forma:f (x )=a (x−x 2)
2+b (x−x 2)+c
Evaluando en los puntos x0, x1 y x2 (…) se tiene que: c = f (x 2)
f (x 0)− f (x 2)=a (x 0−x 2)2+b (x 0−x 2)
f (x 1)− f (x 2)=a (x 1−x 2)2+b (x 1−x 2)
Método de Müller
Reemplazando,
Haciendo: h0=x 1−x 0
Reemplazando en las anteriores y resolviendo para a y b (...), se tiene:
a=δ1−δ0
h1+h 0
h1=x 2−x 1
δ0=f (x 1)− f (x 0)
x 1−x 0
δ1=f (x 2)− f (x 1)
x 2−x 1
b=a h1+δ1 c = f (x 2)
Método de Müller
Para encontrar la raíz, x 3−x 2=−2 c
b±√b 2−4 a c
Se elige el signo central de modo que coincida con el signo de b.Se descarta un valor (x0, x1 ó x2):
– Raíces reales: el más alejado de x3
– Raíces complejas: (x0, x1, x2) = (x1, x2, x3)
Método de Müller
x 3=x 2−2 c
b±√b 2−4 a c
(17)
fórmula de Müller
Encontrar una raíz de la función:
f (x )=x 3−13 x−12
Partiendo de (x0, x1, x2) = (4.5, 5.5, 5.0)
f (4.5)=20.625 , f (5.5)=82,875 , f (5.0)=48
h 0=5.5−4.5=1 h1=5.0−5.5=−0.5
δ0=f (x 1)− f ( x 0)
x 1−x 0
=62.25 δ1=f (x 2)− f (x 1)
x 2−x 1
=69.75
Método de Müller: Ejemplo 7.2
a=...=15 , b=62.25 , c =48
√b 2−4 a c =...=31.54461
x 3=x 2+−2 c
b+√ b 2−4 a c
=...=3.976487
εa=| 3.976487−53.976487 |=25.74 %
Planilla de cálculo: muller.ods
Método de Müller: Ejemplo 7.2
iniciar x0, x1, x2, iter=0, imax, es definir funcion ff0 = f(x0) ; f1 = f(x1) ; f2 = f(x2)
repetir: h0 = x1 – x0 ; h1 = x2 x1delta0 = (f1f0) / h0 ; delta1 = (f2f1) / h1
a = (delta1delta0) / (h1+h0)b = a*h1 + delta1 c = f2
D = sqrt(b*b4*a*c) E = b + D si abs(bD) > abs(E): E = bD
x3 = x2 – 2*c / E f3 = f(x3) si x3 != 0:
ea = abs((x3 x2)/x3)*100 iter = iter + 1 x0 = x1; x1 = x2; x2 = x3f0 = f1; f1 = f2; f2 = f3
hasta que (ea<es or iter>=imax)mostrar x3
Método de Müller: Pseudocódigo
Encontrar las raíces de: f (x )=x 3−x−1
Método de Müller: Ejemplo
f(x) tiene una raíz real y dos raíces complejas.
Método de Müller: Ejemplo
• Planilla de cálculo: muller2.ods• Código en Python: muller2.py• Código en Octave: muller2.mPartiendo de:
(x0, x1, x2) = (0, 1, 2), se encuentra
(x0, x1, x2) = (0, 4, 7), se encuentra
(x0, x1, x2) = (0, 4, 7), se encuentra
x r 1=1.3247
x r 2=−0.66236+0.56228 i
x r 3=−0.66236−0.56228 i
• Octave: Raíz de una función: fzero(funcion, valorInicial) >> f = inline('exp(x)x','x');
>> xr = fzero(f,0.0)
xr = 0.56714
Raíces de un polinomio: roots(vectorCoefPol) >> P = [1 0 1 1]; % x^3x1
>> r = roots(P)
r =
1.32472 + 0.00000i
0.66236 + 0.56228i
0.66236 0.56228i
Herramientas disponibles
• Planilla de cálculo: búsqueda de valor destino, destino.ods
• Python: librerías Numpy y Scipy
Raíz de una función: fsolve(funcion, valorInicial)>>> from scipy.optimize import fsolve
>>> def f(x): return exp(x)x
...
>>> xr = fsolve(f,0.0)
>>> xr
0.56714329040978384
Herramientas disponibles
Raíces de un polinomio:
roots(poly1d(vectorCoefPol))
>>> from numpy import poly1d, roots
>>> p=poly1d([1,0,1,1]) # x^3x1
>>> p
poly1d([ 1, 0, 1, 1])
>>> r=roots(p)
>>> r
array([ 1.32471796+0.j, 0.66235898+0.56227951j,
0.662358980.56227951j])
>>> xr2=r[1] # se extrae la segunda raiz de r
>>> xr2
(0.66235897862237292+0.56227951206230109j)
Herramientas disponibles
Problemas 7.1 a 7.25, pag. 197
Estudio de casos (Cap. 8)
Ley de los gases no ideales
• Ley de los gases ideales
pV=n RT
• Ecuación de Van der Waals
p a
v2 v−b=RT , v=Vn
Volumen molar
Ley de los gases no ideales
• Calcular el volumen molar para el dióxido de carbono y el oxígeno
• Solucion en Octave: caso_81.m
R=0,082054l atmmol K
a b
CO2
3,592 0,04267
O2
1,360 0,03183
Flujo en canales abiertos
• Ecuación de continuidad Q=U A=U B H
Flujo en canales abiertos
• Ecuación de Manning U=
1nR2 / 3 S1 / 2
R=AP
Radio hidráulico
P=B2H Perímetro mojado
• Reemplazando (...),
Q=S1 / 2
nB H 5 / 3
B2H 2 / 3
Flujo en canales abiertos
• Datos*: Q = 4 m³/s, B = 2 m, S = 0.001, n = 0.015
• Incógnita = H• Resolver
• Resuelto por iteración de punto fijo en canales.ods
f H =S1 / 2
nBH 5 / 3
B2H 2 / 3−Q=0
Problemas 8.1 a 8.46, pag. 216