Está en la página 1de 57

PROGRAMACIÓN EN

MATLAB-UNSCH

Resolución de
ecuaciones no
lineales
ING. MILAGROS TIPE ANAYA
mtipe.phi@gmail.com

"No es que no nos atrevamos


porque las cosas son difíciles;
es que las cosas son difíciles
porque no nos atrevemos"-
Séneca
FEBRERO, 2019 / MÓDULO 03
El método de
la Bisección

La enunciación del
procedimiento es atribuida a
Bernard Bolzano, Praga, 1781-1848.

EL MÉTODO DE LA BISECCIÓN
El método de
la Bisección

Si la función es continua en un
intervalo [a b] y en sus extremos
cambia de signo, lo que indica
que f(a)*f(b) < 0, existirá una raíz c,
tal que a < c < b, en el que f(c) = 0.
Reduciendo convenientemente
el intervalo de confinamiento
[a b] se llegará a acotar el valor de
c tanto como se desee.

EL MÉTODO DE LA BISECCIÓN
Algoritmo:
Se comienza con unos f(a) y f(b), tales que f(a)*f(b) < 0.
Se determina c = (a+b)/2 y se calcula f(c).
Si f(c) = 0 se ha llegado a la solución.
Si no, se cumplirá que f(c)*f(a) < 0 ó f(c)*f(b) < 0.
Si f(c)*f(a) < 0, la solución estará en [a c]; si f(c)*f(b) < 0,
en [c b].
Se estudia el nuevo intervalo donde esté la raíz,
reduciendo secuencialmente en dos mitades hasta
que se estreche lo que se desee el intervalo de
confinamiento que contenga la solución.

EL MÉTODO DE LA BISECCIÓN
Alternativas en la aplicación del método de
la bisección según donde esté la raíz:

Si f(c)*f(a) < 0, la solución estará en [a c]


si f(c)*f(b) < 0, la solución estará en [c b]

EL MÉTODO DE LA BISECCIÓN
Codificación en Matlab:

EL MÉTODO DE LA BISECCIÓN
Codificación en Matlab:

EL MÉTODO DE LA BISECCIÓN
Aplicación: x*sen(x) - 1 = 0
Se representa geométricamente el método de la Bisección
para llegar a la solución del problema de este ejemplo.
Proceso iterativo:
f(x) = x*sin(x)-1
a = 1 ; b =2 ;
Ejecución en Matlab:
f(x) = x*sin(x)-1
a = 1 ; b =2 ;
Error del algoritmo:
Estudiemos: x^3+2*x^2+(4/3)*x-(8/27) = (x-(2/3))^3
La raíz auténtica es 0.666666666... Sin embargo, la función es
igual a cero en un valor que no es exactamente una raíz.
Aunque se aumente la precisión, el proceso es el mismo y sólo
se consigue 5 dígitos significativos debido a la incapacidad de
la aritmética de precisión doble de la máquina para calcular
el valor de la función f con precisión suficiente cerca de la raíz.
El método de
Punto Fijo

Se usa para resolver


f(x) = 0 si la función se
puede expresar como
g(x) = x.

MÉTODO DE PUNTO FIJO


Codificación en Matlab:

MÉTODO DE PUNTO FIJO


Aplicación: x^3+x - 1 = 0
Expresemos la ecuación de varias formas con
el formato g(x)=x:
1) x = 1-x^3
2) x = (1-x)^1/3
3) x = (1+2*x^3)/(1+3*x^2)

Partiendo del mismo punto x0, la primera diverge, la segunda


converge y la tercera también converge, pero mucho más rápido.
Ejecución en Matlab:
caso 1) x = 1-x^3 DIVERGE

Ingrese ecuación: g(x)= 1-x^3


Ingrese x0= 0.2
Ingrese nro. máx. de iteraciones= 10
   k          x
   1 1.000000000000000
   2 0.000000000000000
   3 1.000000000000000
   4 0.000000000000000
   5 1.000000000000000
   6 0.000000000000000
   7 1.000000000000000
   8 0.000000000000000
   9 1.000000000000000 DIVERGE!
  10 0.000000000000000 
sol =
     0
Ejecución en Matlab:
caso 2) x = (1-x)^1/3 CONVERGE
Ingrese ecuación: g(x)= (1-x)^(1/3)
Ingrese x0= 0.2
Ingrese nro. máx. de iteraciones= 100
   k          x
   1 0.200000000000000
   2 0.928317766722556
   3 0.415403842195531
   4 0.836152165572468
   5 0.547201024596119
........
  51 0.682327776824394
  52 0.682327823161706
  53 0.682327789985750
  54 0.682327813738618
  55 0.682327796732364
sol =
      0.68233
Ejecución en Matlab:
3) x = (1+2*x^3)/(1+3*x^2) CONVERGE
Ingrese ecuación: g(x)=
(1+2*x^3)/(1+3*x^2)  
Ingrese x0= 0.2
Ingrese nro. máx. de iteraciones= 30
   k          x
   1 0.200000000000000
   2 0.907142857142857
   3 0.718705256677222
   4 0.683428006697773
   5 0.682328836813548
   6 0.682327803828931
sol =
      0.68233
Aplicación: x^3-sen(x) = 0
Expresemos las siguientes relaciones de
recurrencia con el formato g(x)=x:
1) x = (sen(x))^1/3
2) x = sen(x)/x^2

Partiendo del mismo punto x0, la primera converge, la segunda diverge.


Ejecución en Matlab:
caso 1) x = (sen(x))^1/3 CONVERGE
Ingrese ecuación: g(x)= sin(x)^(1/3)
Ingrese x0= 1
Ingrese nro. máx. de iteraciones= 50
   k          x
   1 1.000000000000000
   2 0.944089241243065
   3 0.932155606858048
   4 0.929440744615873
   5 0.928814720660568
   6 0.928669921079787
   7 0.928636405171610
   8 0.928628646171441
   9 0.928626849879244
  10 0.928626434014585
  11 0.928626337736393
  12 0.928626315446702
sol =
      0.92863
Ejecución en Matlab:
caso 2) x = sen(x)/x^2 DIVERGE
Ingrese ecuación: g(x)= sin(x)/x^2
Ingrese x0= 1
Ingrese nro. máx. de iteraciones= 50
   k          x
   1 1.000000000000000
   2 0.841470984807897
   3 1.053032245559427
   4 0.783610863509739
   5 1.149493453836111
   6 0.690632403599030
   7 1.335557017966715
   8 0.545187952544983
   9 1.744706028619675 DIVERGE!
  10 0.323559811448361
......
Convergencia y proceso
iterativo
Si |g'(r)| = v < 1 y el punto de partida está cerca
de r, el proceso converge linealmente a
velocidad v. Si |g'(r)| > 1, diverge.
¡El problema!
Necesitamos disponer de una vía
sistemática y fiable de construir
un modelo x = g(x) para hallar la
solución x de la ecuación f(x) = 0,
comenzando desde cualquier x0
próximo a la solución y sin
preocuparnos de que |g'(x)| < 1

RESOLUCIÓN DE ECUACIONES NO LINEALES


Método de
Newton -
Raphson

Isaac Newton, Inglaterra, 1642-


1727, la persona con una de las
mentes más portentosas que ha
dado la Humanidad, fue el
primero que ideó esa vía y la
fomra de llevarla a la práctica de
manera sencilla.

MÉTODO DE NEWTON-RAPHSON
Método de Newton-Raphson
Consiste en reemplazar la función f(x) en cada
punto del proceso iterativo por el modelo de
ella que define su recta tangente en ese punto
(linealizar la función en un punto).

La relación general de recurrencia para encontrar


una solución de la ecuación f(x) = 0 es:

x(k+1) = x(k) - f(x(k)) / f'(x(k))


Explicación del método:
En x = x1 la ecuación de la recta tangente a f(x) es
y = f(x1)+f'(x1)*(x-x1)
En x = x1, y = f(x1) por lo que la ordenada de esta
ecuación es la misma que la de f. La pendiente de f en
x1 es la misma que la de y: f'(x1)
El siguiente punto del proceso iterativo lo determina la
solución de y(x) = 0, es decir, dónde esa recta tangente
corta al eje x:
0 = f(x1) + f'(x1)*(x-x1)
La solución de esta última ecuación es:
x = x1 - f(x1) / f'(x1)

MÉTODO DE NEWTON-RAPHSON
Esquema básico del proceso
iterativo:

MÉTODO DE NEWTON-RAPHSON
Codificación en Matlab:

MÉTODO DE NEWTON-RAPHSON
Aplicación:
x^3 - sen (x)
Ejecución en Matlab:
x^3 - sen (x) CONVERGE

Ingrese ecuación: f(x)= x^3-sin(x)


Ingrese x0= 1.5
Ingrese nro. máx. de iteraciones= 50
   k          x
   1 1.144046793009916
   2 0.976917256896711
   3 0.931959298141172
   4 0.928643964513558
   5 0.928626309231307
   6 0.928626308731734
sol =
      0.92863
Método de
Halley

Fue formulado por el astrónomo,


matemátio y físico inglés
Edmund Halley, Inglaterra, 1656-
1742, conocido por el cálculo de la
trayectoria del cometa Halley.

MÉTODO DE HALLEY
Método de
Halley
Consiste en reemplazar la función f(x) en cada punto del
proceso iterativo por el modelo que define de ella su
aproximación por desarrollo en serie de Taylor hasta la
segunda derivada en ese punto.

Con una convergencia cúbica, su relación general de


recurrencia para encontrar una solución de la ecuación f(x) =
0 es:

MÉTODO DE HALLEY
Codificación en Matlab:

MÉTODO DE HALLEY
Codificación en Matlab:

MÉTODO DE HALLEY
Ejecución en Matlab:
x + ln (x) CONVERGE
Ingrese x0= 1
Ingrese nro. máx. de iteraciones= 100
Ingrese ecuación: f(x)= x+log(x)
   k          x
   1 0.833333333333333
   2 0.742802129138226
   3 0.683878857746516
   4 0.642317967076387
   5 0.612074254722788
   6 0.590391605494396
   7 0.576210032500276
   8 0.569095885425200
   9 0.567257437494691
  10 0.567143708536072
  11 0.567143290415419
  12 0.567143290409784
sol =
      0.56714
Método de Utiliza como dirección de búsqueda de
la solución la que determina una recta
la Secante secante a la función en dos puntos
sucesivos del proceso iterativo.

MÉTODO DE LA SECANTE
Método de la
Secante
Si en una iteración k del proceso la ecuación de Newton es:

La idea es reemplazar f'(x(k)) por:

La relación de recurrencia del proceso iterativo de la secante


queda:

MÉTODO DE LA SECANTE
Codificación en Matlab:

MÉTODO DE LA SECANTE
Codificación en Matlab:

MÉTODO DE LA SECANTE
Ejecución en Matlab:
x^3 - sen (x) = 0
Ingrese x0= 1.4
Ingrese nro. máx. de iteraciones= 100
Ingrese ecuación: f(x)= x^3-sin(x)
   k          x
   1 1.065107226548895
   2 0.978070204938512
   3 0.937387385189276
   4 0.929273092828631
   5 0.928635284046901
   6 0.928626318027714
   7 0.928626308731868
sol =
      0.92863
Método de Utiliza como dirección de búsqueda de
la solución la que determina una recta
la Falsa secante a la función en dos puntos
sucesivos del proceso iterativo en los
Posición que la función toma valores de signo
opuesto.

MÉTODO DE LA FALSA POSICIÓN


Problemas de
convergencia
lenta
En determinadas circunstancias desfavorables, tanto el método
de la secante como el de la falsa posición pueden presentar
problemas de convergencia.

MÉTODO DE LA FALSA POSICIÓN


Método de Illinois
o variante de
Regula Falsi
Para remediar las deficiencias de ambos métodos, en los
años 50 del XX se desarrolló una variante de 'regula falsi'.
Consiste en usar puntos para trazar la secante, además del
calculado x(i+1), f(x (i+1)):
Si f(x(i+1))*f(x(i)) < 0, el punto x(i-1), f(x(i-1)) se reemplaza por
x(i), f(x(i))
Si f(x(i+1))*f(x(i)) > 0, el punto x(i-1), f(x(i-1)) se reemplaza por
x(i-1), f(x(i-1))/2
Donde corte esta secante al eje x será el nuevo punto del
proceso iterativo,

MÉTODO DE LA FALSA POSICIÓN


Codificación en Matlab:

MÉTODO DE LA FALSA POSICIÓN


Codificación en Matlab:

MÉTODO DE LA FALSA POSICIÓN


Ejecución en Matlab:
cos (x) - x^3 = 0
Ingrese x0= 0
Ingrese x1= 1
Ingrese nro. máx. de iteraciones= 100
Ingrese ecuación: f(x)= cos(x)-x^3
   k          x
   1 0.685073357326045
   2 0.841355125665652
   3 0.878745153000139
   4 0.865161061169064
   5 0.865470035939167
   6 0.865477925839117
   7 0.865474033086510
   8 0.865474033101614
   9 0.865474033101615
sol =
      0.86547

MÉTODO DE LA FALSA POSICIÓN


Método de
Müller

Presentado en 1956 por David


Eugene Muller, EE.UU., 1924-2008.

MÉTODO DE MÜLLER
Método de
Müller
Es una generalización del método de la secante, en el
sentido de que no necesita el cálculo de la derivada de la
función.
Es un método iterativo que necesita 3 puntos iniciales:
(x0,f(x0)), (x1,f(x1)), y (x2,f(x2)).
Se construye una parábola con el eje OX; la abscisa de este
punto se usa para construir la siguiente aproximación.
Cerca de una raíz simple, converge más rápidamente que
el método de la secante y es casi tan veloz como el
método de Newton-Raphson.
Puede emplearse tanto para hallar ceros reales como para
hallar ceros complejos y puede programarse con
aritmética compleja.

MÉTODO DE MÜLLER
Método de
Müller
Utiliza una variante del método de la secante: una
interpolación cuadrática de tres puntos del proceso iterativo
para, a partir de las raíces de esa interpolación, definir un
nuevo punto del proceso.

MÉTODO DE MÜLLER
Método de
Müller

Si se consideran los puntos (x0,f(x0)), (x1,f(x1)), y (x2,f(x2)), el


procedimiento aproxima a estos puntos el polinomio de segundo
grado:

Los parámetros a,b y c de ese polinomio se determinan a partir de las


siguientes condiciones:

MÉTODO DE MÜLLER
Método de
Müller

Resolviendo el sistema de 2 ecuaciones con 2 incógnitas:

Se obtiene la expresión de los parámetros a y b:

MÉTODO DE MÜLLER
Método de
Müller

Para determinar el nuevo punto del proceso se aplica la fórmula:

Se escoge el signo que garantice el denominador más grande en valor


absoluto: Si b > 0, el signo es positivo; si b < 0, el signo es negativo.
El nuevo punto x3 será entonces x3 =x2 + z.
Para actualizar los valores y dar el siguiente paso, elegimos los nuevos x0 y
x1 como los dos puntos más cercanos a x3 de entre {xo,x1,x2} y x3 pasa a ser
el nuevo x2. MÉTODO DE MÜLLER
Codificación en Matlab:

MÉTODO DE MÜLLER
Codificación en Matlab:

MÉTODO DE MÜLLER
Codificación en Matlab:

MÉTODO DE MÜLLER
Ejecución en Matlab:
x^3 - sen (x) = 0
Ingrese x0= 1
Ingrese x1= 1.2
Ingrese x2= 1.5
Ingrese nro. máx. de iteraciones= 100
Ingrese ecuación: f(x)= x^3-sin(x)
 k       x(real)     x(imaginario)   f(x)
   1  0.92180150107728 +  0.00000000000000 i      -0.013420379383080 
   2  0.92869933190373 +  0.00000000000000 i       0.000145194787601 
   3  0.92862632836513 +  0.00000000000000 i       0.000000039033263 
   4  0.92862630873174 +  0.00000000000000 i       0.000000000000011 
sol =
      0.92863

MÉTODO DE MÜLLER
Ejecución en Matlab:
x^3 - sen (x) = 0

MÉTODO DE MÜLLER
¡Gracias!
"Usted debe ser el cambio que
desea ver en el mundo"
- Gandhi.

RESOLUCIÓN DE ECUACIONES NO LINEALES