Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la...

36
Solución numérica de ecuaciones no lineales de una variable Procesos Numéricos Profesor: Gustavo Adolfo Restrepo Arboleda Por: Melissa Arcila Montoya - 201117508012 Stefania Giraldo Jimenez - 20102001112 Manuela Piedrahita Vasco - 201119101012 Cristina Rodríguez Arrázola - 201020015012 Ingeniería de Producción Universidad EAFIT Medellín – Antioquia 2013

Transcript of Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la...

Page 1: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Solución numérica de ecuaciones no lineales

de una variable

Procesos Numéricos

Profesor: Gustavo Adolfo Restrepo Arboleda

Por: Melissa Arcila Montoya - 201117508012 Stefania Giraldo Jimenez - 20102001112

Manuela Piedrahita Vasco - 201119101012 Cristina Rodríguez Arrázola - 201020015012

Ingeniería de Producción Universidad EAFIT

Medellín – Antioquia 2013

Page 2: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

TABLA DE CONTENIDOS

Página INTRODUCCIÓN OBJETIVOS TEOREMAS

1. Teorema del valor intermedio 2. Teorema de Rolle 3. Teorema del valor medio

MÉTODOS 1. Método de búsquedas incrementales 2. Método de la bisección 3. Método del punto fijo 4. Método de Newton-Raphson 5. Método de la secante 6. Método de la regla falsa 7. Método de las raíces múltiples

CONCLUSIÓN BIBLIOGRAFÍA

Page 3: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

INTRODUCCIÓN

Los procesos numéricos es una rama de las matemáticas que utiliza algoritmos a través de

números para la simulación de procesos de la vida diaria. Dichos procesos van desde el

cálculo de los valores de una función, hasta la programación de una herramienta de

simulación como CREO Parametric o SolidWorks.

La producción de este trabajo está enfocada a explicar los diversos métodos de solución

de ecuaciones no lineales de una variable. Entre los métodos se encuentran el método de

búsquedas incrementales, el método de la bisección, el método del punto fijo, el método

de Newton-Raphson, el método de la secante, el método de la regla falsa, y el método de

las raíces múltiples.

Adicionalmente, se explicaran tres teoremas que son esenciales para entender y aplicar

dichos métodos. Estos son: teorema del valor intermedio, teorema de Rolle, y teorema del

valor medio.

Es importante tener en cuenta lo siguiente:

Sea f una función. Se dice que P es una raíz de la ecuación f(x) = 0 si f(P) = 0.

También se dice que P es un cero (0) de f.

OBJETIVOS

Fortalecer lo aprendido en clase por medio de la producción de este trabajo y de los

códigos en el lenguaje de Octave.

Proveer diversos métodos que faciliten la búsqueda de raíces.

Servir de fuente de búsqueda a otros estudiantes que requieran la información

suministrada.

Page 4: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

TEOREMAS

1. Teorema del valor intermedio

Sea f una función continua en el intervalo cerrado [a, b], [ ] , y sea k

un número entre f(a) y f(b). Existe un c que pertenece a (a, b) tal que f(c) = k.

Este teorema sirve para demostrar la existencia de raíces cuando f(a) y f(b)

tienen signos contrarios.

Este teorema también sirve para demostrar la existencia de una única raíz

cuando se cumple la siguiente condición:

F es diferenciable en (a, b) y f’(x) no cambia de signo para todo x que

pertenece a [a, b]; entonces existe un único xm en [a, b] que es raíz de la

ecuación f(x) = 0.

Ilustración 1 - Teorema del valor intermedio

2. Teorema de Rolle

Sea f una función continua en el intervalo cerrado [a,b] y diferenciable en el

intervalo (a,b). Si entonces existe un punto c (a,b) en donde

la derivada es igual a 0 (f’(c)=0).

Este teorema sirve para demostrar la existencia de una única raíz en un

Page 5: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

intervalo cerrado y por esta misma razón soluciones a ecuaciones de una

variable.

También se utiliza para demostrar el Teorema del Valor medioAdemás, el

Teorema de Rolle se puede usar para deducir numerosas propiedades de

las funciones, por ejemplo, la búsqueda de soluciones de una ecuación

(equivalente a buscar los ceros de una función f(x)=0)

Ilustración 2 - Teorema de Rolle

3. Teorema de valor medio

Teorema de los incrementos finitos es una propiedad de las funciones derivables

en un intervalo. Se usa normalmente para demostrar otros teoremas.

Si es una función continua en el intervalo [ ] y diferenciable en

entonces existe al menos algún punto ƺ en el intervalo tal que:

Page 6: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Ilustración 3 - Teorema del valor medio

Page 7: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

MÉTODOS

1. Método de Búsquedas Incrementales

Este método se utiliza principalmente como una introducción al método de la

bisección con el fin de encontrar un intervalo que contenga una raíz. Consiste en

empezar en un extremo del intervalo de interés y evaluar la función con pequeños

incrementos a los largo de dicho intervalo. Este método se basa en el teorema del

valor intermedio, el cual se explicó anteriormente. Es importante tener en cuenta

que si la longitud del incremento no es la adecuada (lo suficientemente pequeña),

algunas raíces pueden pasar inadvertidas.

Paso a paso:

a) Se selecciona un valor arbitrario de salida (dentro del intervalo de

interés), y un valor para los incrementos , donde .

b) Se genera una sucesión de valores tal que

.

c) Cada vez que se genere un valor de , se halla el valor de .

d) Se observan los signos de y de .

e) Se suspende el proceso cuando se presente un cambio de signo en

y o cuando se llegue a un límite de iteraciones sin

encontrar dicho cambio.

Ilustración 3 - Método de búsquedas incrementales

Page 8: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Ejemplo:

Se hará uso de esta ecuación para ejemplificar todos los métodos. La gráfica es la

siguiente:

Vamos a buscar un intervalo de la siguiente ecuación, que contenga una raíz:

f(x)= cos (x) – cos (3.1*x)

Valor inicial: 0.005

Incremento: 0.1

Número de iteraciones: 100

El intervalo donde se encuentra la raíz es [1.50500, 1.60500]

Código en Octave:

clear all

clear

clc

Page 9: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

%En esta parte el usuario ingresa los datos iniciales que requiere el metodo

ingresefuncion=input('ingrese la funcion: ', 's'); %el usuario ingresa la funcion que desea

encontrarle la raiz

x0=input('ingrese valor inicial: '); %se debe ingresar un valor de partida

delta=input('ingrese incremento: '); %esto expresa el tamaño del intervalo que se desea

encontrar

iter=input('ingrese el numero de iteraciones: '); %se debe ingresar el numero de

iteraciones deseadas

funcion=inline(ingresefuncion); %aqui se transforma a funcion una cadena de caracteres

para poder evaluar valores

fx0=funcion(x0); %se evalua la funcion en el punto inicial

if fx0==0

fprintf('La raiz esta en x0(%g)',x0); %si fx0 es igual a cero entonces que indique que

x0 es la raiz

else

x1=x0+delta; %haga un incremento en x0 para obtener el primer intervalo

i=1; %empieza el contador

fx1=funcion(x1); %evalua la funcion en x1

while fx0*fx1>0 && i<iter %mientras no hay un cambio en la funcion o el contador

sea menor al numero de iteraciones

x0=x1; %x1 sera el valor inicial del intervalo

fx0=fx1; %el valor inicial de la funcion sera el valor de la funcion en x1

x1=x0+delta; %realiza el incremento para el nuevo intervalo

fx1=funcion(x1); %evalua la funcion el x1

tabla(i,1)=i;

tabla(i,2)=x0;

tabla(i,3)=x1;

i=i+1; %incrementa el intervalo

end

tabla

if fx0==0 %si la funcion evaluada en x0 es 0

fprintf('La raiz esta en x0 (%g)',x0); %indicar que x0 es la raiz

else

if fx1==0 %si la funcion evaluada en x1 es 0

fprintf('La raiz esta en x1 (%g)',x1); %indicar que x1 es la raiz

Page 10: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

else

if fx0*fx1<0 %sino evalue si la raíz está contenida en ese intervalo

fprintf('La raiz esta entre x0 : (%g) y x1 : (%g) \n',x0,x1);

else

fprintf('No fue encontrada la raiz'); %sino la raiz no fue encontrada

en ese numero de iteraciones

end

end

end

end

2. Método de la Bisección

Es un método de búsqueda de raíces en el cual, teniendo un intervalo [a, b] que

contenga la raíz, se divide en sub-intervalos, que a medida que se repite el proceso

se hacen más pequeños y el resultado se aproxima cada vez más el valor de la raíz.

Partiendo de una función continua y de dos valores iniciales es necesario que la

función evaluada en dichos puntos tome signos opuestos, es decir:

Luego se obtiene la primera aproximación a la raíz por medio de la siguiente

fórmula:

Al evaluar se deben tener en cuenta los siguientes casos:

En dicho caso ya se habría encontrado la raíz, la cual sería

Lo cual indicaría que la raíz se encuentra en dicho intervalo y se procede a buscar

nuevamente el punto medio del intervalo haciendo y dejando el mismo .

Page 11: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Indica que la raíz no se encuentra en este intervalo y por lo tanto hacemos

y dejamos el mismo .

Repetir el proceso hasta alcanzar el error deseado.

Ilustración 4 - Método de la Bisección

Ejemplo:

Encontrar la raíz para la ecuación f(x)=cos (x) – cos(3.1*x)

Intervalo: [1,2]

Tolerancia: 0.000001

Número de iteraciones: 1000

Page 12: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

La raíz está en 1.53249 con un error de 9.53674x10-7.

Código en Octave

clc

clear

clear all

format long

ingresefuncion = input('ingrese la funcion: ', 's'); %aqui el usuario debe ingresar la funcion

para calcularle la raiz

a = input('ingrese limite inferior del intervalo: '); %se debe ingresar el limite izquierdo del

intervalo

b = input('ingrese limite superior del intervalo: '); %se debe ingresar el limite derecho del

intervalo

tol = input('ingrese la tolerancia deseada: '); %se debe ingresar la tolerancia deseada por el

usuario

iter = input('ingrese el numero de iteraciones: '); %se debe ingresar el maximo numero de

iteraciones a realizar

funcion = inline(ingresefuncion); %aqui se convierte a funcion una serie de caracteres para

poder evaluar valores

fa = funcion(a); %aqui se evalua la funcion en a

fb = funcion(b); %aqui se evalua la funcion en b

tabla = 0;

%x1 = -50:0.5:50;

%y1 = funcion(x1);

%plot(x1,y1)

if fa==0

fprintf('La raiz es : %g \n',a); %si al evaluar la funcion en a da 0 entonces indica que

la raiz es a

Page 13: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

else

if fb==0

fprintf('La raiz es : %g \n',b); %si al evaluar la funcion en b da 0 entonces

indica que la raiz es b

else

if fa*fb<0 %si la funcion en a y b tiene cambio de signo entonces se utiliza

este intervalo

xm=(a+b)/2; %encuentra el valor medio del intervalo

fxm=funcion(xm); %evalua la funcion en el punto medio

encontrado

i=1; %se inicia el contador

error=tol+1; %se inicia el error

tabla(i,1) = i;

tabla(i,2) = xm;

tabla(i,3) = fxm;

tabla(i,4) = error;

while error>tol && fxm~=0 && i<=iter %mientras el error sea

mayor a la tolerancia, fxm diferente de 0 y la iteracion actual sea menor o igual a iter,

evalue las siguientes condiciones

if fa*fxm<0 %si la funcion evaluada en a y xm cambia de

signo entonces hacer limite superior xm y evalue la funcion

b=xm; %se iguala el punto b al punto medio

fb=fxm; %como los puntos b y xm son iguales. las

funciones son iguales

else %sino esto quiere decir que la raiz se

encuentra en el otro intervalo

a=xm; %y se iguala a y xm

fa=fxm; %como los puntos a y xm son iguales. las

funciones son iguales

end

xaux=xm;

xm=(a+b)/2; %encuentra el valor medio del intervalo

fxm=funcion(xm); %evalua la funcion en el punto medio

encontrado

error=abs(xm-xaux); %se compara el error con la tolerancia

i=i+1; %incrementa el numero de iteraciones

tabla(i,1) = i; %En la columna 1 se muestra el numero de

iteraciones

tabla(i,2) = xm; %En la columna 2 se muestra el punto

medio o sea la raiz

tabla(i,3) = fxm; %En la columna 3 se muestra la funcion

Page 14: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

evaluada en la raiz

tabla(i,4) = error; %En la columna 4 se muestra el error

absoluto

end

if fxm==0

fprintf('La raiz es : %g \n',xm); %si al evaluar la funcion en

xm da 0 entonces indica que la raiz es xm

else

if error<tol %no se encontro la raiz pero se llego a una

aproximacion a esta con un error menor a la tolerancia

fprintf('La aproximacion a la raiz es : %g con un

error de: %g \n ',xm,error);

else

fprintf('El numero de iteraciones ingresadas no fue

suficiente');

end

end

else %no se encontro la raiz con el numero de iteraciones

ingresadas

fprintf('El intervalo ingresado es indaecuado');

end

end

end

tabla

3. Método del Punto Fijo

También llamado método de aproximación sucesiva.

Permite resolver sistemas de ecuaciones no necesariamente lineales. Busca raíces

de una función, siempre y cuando se cumplan los criterios de convergencia.

El Método de Punto Fijo (también conocido como iteración de punto fijo), es otro

método para hallar los ceros de Para resolver , se reordena en una

forma equivalente:

Page 15: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

es un punto fijo de g por cumplir la anterior relación.

Los puntos fijos de son las “intersecciones” de la gráfica de con la recta

.

Ejemplos

1) La ecuación se puede transformar en .

2) La ecuación se puede transformar en .

Teorema

Supongamos que

g es continua [a,b]

g(x) [a,b] para toda x [a,b], entonces g tiene un punto fijo en [a,b].

Si además g’(x) existe en (a, b) y existe una constante positiva K < 1 con

|g'(x)| K, para todo x (a,b), entonces el punto fijo en [a,b] es único.

Demostración

Si g(a)=a o si g(b)=b, entonces g tendrá un punto fijo en un extremo del intervalo [a,b].

Si se supone que g(a) a y g(b) b entonces se debe tener que: g(a) > a y g(b) < b (porque g(x) [a,b] para todo x [a,b])

g(a) - a > 0 y g(b) - b < 0.

Si se define t(x) = g(x) - x, t es continua en [a,b] y

t(a) = g(a) - a > 0

t(b) = g(b) - b < 0

Por el teorema del valor intermedio existe un c (a,b) tal que t(c)=0, es decir g(c) – c = 0, g(c) = c, luego c es un punto fijo de g.

Si se supone además que |g'(x)| K <1 y que c1 y c2 son dos puntos fijos de g en [a,b] con c1 c2, por el teorema del valor medio, existe un número z entre c1 y c2 tal

Page 16: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

que o |g(c2) – g(c1)| = |g’(z)| |c2 - c1|.

Como c1 y c2 son puntos fijos de g, g(c2) = c2 y g(c1) = c1, entonces |c2 - c1| = |g(c2) - g(c1)| = |g(c2)| |c2 - c1| k|c2 - c1| < 1|c2 - c1| (porque |g’(x)| k <1).

Luego, |c2 - c1|<|c2 - c1|, lo cual es una contradicción, por lo tanto el punto fijo de g en [a,b] es único.

Ejemplo:

Hallar la raíz para la ecuación f(x)=cos(x)-cos(3.1*x)

Se observa que en el método de punto fijo al darle una tolerancia tan pequeña (0.1*10^-5)

no puede encontrar una solución en 1000 iteraciones; esto se debe a que aunque es un

Page 17: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

método que por lo general encuentra la raíz, no lo hace rápidamente. Al darle una mayor

tolerancia (1), el método converge en pocas iteraciones pero con un error elevado

(0.805843).

Código en Octave:

clc

clear

clear all

format long

inputfuncion = input('Ingrese la funcion f(x) : ', 's'); %El usuario debe ingresar la función a

la cual va a calcularle la raiz

funcion = inline(inputfuncion); %Aqui se convierte la funcion en una serie de caracteres

para poder evaluar valores

inputfunciongx = input('Ingrese la funcion g(x) : ', 's'); %El usuario debe ingresar la derivada

de la funcion

funciongx = inline(inputfunciongx); %Aqui se convierte la derivada en una serie de

caracteres para poder evaluar valores

x0=input ('Ingrese el primer valor a evaluar en la funcion : ');%Aqui se debe ingresar el

valor inicial a evaluar

tol=input ('Ingrese la tolerancia deseada : ');%Se pide ingresar la tolerancia

iter=input ('Ingrese el número maximo de iteraciones permitidas : ');%Aqui se ingresa el

numero e iteraciones permitidas

fx=funcion(x0) %Aqui se evalua fx en x0

i=1; %Se inicia el contador de iteraciones

error=tol+1; %Se le da un valor inicial error

while fx~=0 && error>tol && i<iter %Mientras no se haya encontrado la raiz y el error sea

mayor que la tolerancia y el contador menor que iter comenzara a iterar el metodo

x1=funciongx(x0) %Evalua la funcion gx en x0 encontrando x1

fx=funcion(x1) %Evalua fx en x1

error=abs(x1-x0); %Calcula el error

x0=x1; %Se repite la iteracion haciendo x0=x1

i=i+1; %Incrementa el numero de iteraciones

tabla(i,1)=i; %En la columna 1 se muestra el numero de iteraciones

tabla(i,2)=x0; %En la columna 2 se muestra el valor de x0

tabla(i,3)=fx; %En la columna 3 se muestra el valor de fx

tabla(i,4)=error; %En la columna 4 se muestra el error absoluto

end

Page 18: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

disp(tabla); %Muestra la tabla

if fx==0 %Si encontro la raiz muestra el valor de p donde esta la raiz

fprintf('La raiz es : %g \n',x0);

else

if error<tol %No se encontro la raiz pero se llego a una aproximacion a esta con un

error menor a la tolerancia

fprintf('La aproximacion a la raiz es : %g con un error de: %g \n',x0,error);

else %No se encontro la raiz con el numero de iteraciones ingresadas

fprintf('El numero de iteraciones ingresadas no fue suficiente \n');

end

end

4. Método de Newton-Raphson

También conocido como el método de las tangentes, pues utiliza rectas tangentes

para acercarse a la raíz. Es un método iterativo que permite aproximar la solución

de una ecuación f(x)=0, partiendo de una estimación inicial. Es uno de los métodos

más utilizados debido a su rapidez y efectividad.

Nota:

El método Newton-Rapson puede divergir en los siguientes casos:

P

f ’(P0)=0

(P0,f(P0)

)

P P0

(P1,f(P1)

)

P1

Ilustración 5 - Método Newton-Raphson

Page 19: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Teorema

Sea (existe y y son continuas) si es tal que

para y entonces el método de Newton dado por la iteración:

Genera una sucesión tal que , para lo suficientemente

cercano a .

P

(P0

PP

(P1

PP

f ’(Pn)=0

P

P

El método puede entrar en un

ciclo infinito.

f ’(P)=0

Ilustración 6 - Caso 1

Ilustración 7 - caso 2

Ilustración 8 - caso 3

Ilustración 9 caso 4

Page 20: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Método Newton y Punto fijo

Sean f y g dos funciones, g es una una función de punto fijo asociada a f, si solo si:

Ejemplo:

Hallar la raíz para la ecuación f(x)=cos(x)-cos(3.1*x)

La raíz es: 3.06497

El error es: 6.88*10^-6

Este método encontró la raíz en 8 iteraciones. La raíz que encontró no es la más cercana al

valor inicial ingresado ya que al realizar la primera iteración, la recta tangente al punto

inicial (x0=1), el intercepto con el eje x esta en 3.1604, lo cual al hace que en las siguientes

iteraciones encuentre más rápidamente la raíz que está en X=3.06497

Código en Octave:

clc

clear

clear all

Page 21: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

format long

inputfuncion = input('Ingrese la función a la que le quiere calcular la raiz: ', 's'); %El usuario

debe ingresar la función a la cual va a calcularle la raiz

funcion = inline(inputfuncion); %Aqui se convierte la funcion en una serie de caracteres

para poder evaluar valores

inputderivada = input('Ingrese la derivada de la funcion', 's'); %Aqui el usuario ingresa la

derivada de f(x)

derivada = inline(inputderivada); %Aqui se convierte la derivada en una serie de caracteres

para poder evaluar valores

x0 = input('Ingrese el valor inicial inicial: '); %Aqui se debe ingresar el valor inicial a evaluar

tol = input('Ingrese el valor de tolerancia deseada: '); %Se pide ingresar la tolerancia

iter = input('Ingrese el número máximo de iteraciones: '); %Ingresar numero maximo de

iteraciones a realizar

fx = funcion(x0); %Aqui se evalua fx en el punto inicial ingresado

dx = derivada(x0); %Aqui se evalua dx en el punto inicial ingresado

i=1; %Se inicia el contador de iteraciones

error=tol+1; %Se le da un valor inicial error

while fx~=0 && dx~=0 && error>tol && i<iter %Mientras no se haya encontrado la raiz y el

error sea mayor que la tolerancia y el contador menor que iter comenzara a iterar el

metodo

x1=x0-(fx/dx); %Se halla el valor de x1 por medio de x0

fx=funcion(x1); %Evalua fx en x1

dx=derivada(x1); %Evalua dx en x1

error=abs(x1-x0); %Calcula el error

x0=x1; %Se repite la iteracion haciendo x0=x1

Page 22: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

i=i+1; %Incrementa el numero de iteraciones

tabla(i,1)=i; %En la columna 1 se muestra el numero de iteraciones

tabla(i,2)=x0; %En la columna 2 se muestra

tabla(i,3)=fx; %En la columna 3 se muestra

tabla(i,4)=error; %En la columna 4 se muestra el error absoluto

end

disp(tabla); %Muestra la tabla

if fx==0 %Si encontro la raiz muestra el valor de x donde esta la raiz

fprintf('La raiz es : %g \n',x0);

else

if error<tol %No se encontro la raiz pero se llego a una aproximacion a esta con un error

menor a la tolerancia

fprintf('La aproximacion a la raiz es : %g con un error de: %g ',x0,error);

else

if dx==0

fprintf('no se puede ejecutar el metodo porque p0 (%g) es una

posible raiz multiple',x0)

else %No se encontro la raiz con el numero de iteraciones ingresadas

fprintf('El numero de iteraciones ingresadas no fue suficiente');

end

end

end

5. Método de la Secante

El método de la secante se define como una variante del Método de Newton. A

Page 23: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

partir de la ecuación iterativa del método de Newton, se sustituye la derivada por

una expresión próxima.

El método de Newton está dado por:

Y la derivada evaluada en está dada por:

Al aproximar el valor del límite evaluado en , tenemos que:

Al sustituir este valor en la ecuación que define la iteración del método de Newton,

se obtiene el método de la secante:

Paso a paso:

a) Se seleccionan dos valores como punto de partida y (dentro del

intervalo de interés), y se obtiene mediante la ecuación iterativa.

b) Se genera una sucesión de valores que se espera

converja a la raíz de la ecuación .

c) Se suspende el proceso cuando se llegue al valor de la raíz o a la

aproximación de ésta tomando en cuenta la precisión deseada.

Page 24: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Ilustración 10 - Método de la Secante

Ejemplo:

Encontrar la raíz de la ecuación f(x)=cos(x)-cos(3.1*x)

Límite izquierdo del intervalo: 1

Límite derecho del intervalo: 2

Tolerancia: 0.000001

Número de iteraciones: 1000

La aproximación a la raíz es 1.53248 con un error de 2.23894x10-10.

Este método es bastante rápido puesto que encontró la aproximación a la raíz en

seis (6) iteraciones. Además es bastante preciso ya que el error es del orden de 10

a la menos 10.

Código en Octave:

clc

clear

clear all

format long

Page 25: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

inputfuncion = input('Ingrese la función : ', 's'); %Aqui el usuario debe ingresar la

funcion para calcularle la raiz

funcion = inline(inputfuncion);%Aqui se convierte a funcion una serie de caracteres

para poder evaluar valores

x0 = input ('Ingrese el límite izquierdo del intervalo: '); %Aqui se debe ingresar la

primera aproximacion para evaluar en f(x)

x1 = input ('Ingrese el límite derecho del intervalo: '); %Aqui se debe ingresar la

segunda aproximacion para evaluar en f(x)

tol = input ('Ingrese la tolerancia deseada : '); %Se pide ingresar la tolerancia

iter = input ('Ingrese el número de iteraciones máximas : '); %Ingresar el numero

maximo de iteraciones a realizar

fx0=funcion(x0); %Aqui se evalua x0 en la funcion

if fx0==0 %Si encontro la raiz muestra el valor de x donde esta la raiz

fprintf('La raiz es : %g \n',x0);

else

fx1=funcion(x1); %Se evalua la funcion en el punto x1

i=1; %Se inicia el contador de iteraciones

error=tol+1; %Se le da un valor inicial error

denominador=fx1-fx0; %Se calcula el denominador

while error>tol && fx1~=0 && denominador~=0 && i<iter

x2=x1-((fx1*(x1-x0))/denominador); %Se halla el valor de x2

error=abs(x2-x1); %Calcula el error

x0=x1; %Se hace x0=x1

fx0=fx1; %Se hace fx0=fx1

x1=x2; %sS hace x1=x2

fx1=funcion(x1); %Se evalua la funcion en el punto x1

denominador=fx1-fx0; %Se calcula el denominador

i=i+1; %Incrementa el numero de iteraciones

tabla(i,1)=i; %En la columna 1 se muestra el numero de

iteraciones

tabla(i,2)=x1; %En la columna 2 se muestra

tabla(i,3)=fx1; %En la columna 3 se muestra

tabla(i,4)=error; %En la columna 4 se muestra el error

absoluto

end

disp(tabla); %Muestra la tabla

if fx1==0 %Si encontro la raiz muestra el valor de x donde

Page 26: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

esta la raiz

fprintf('La raiz es : %g \n',x1);

else

if error<tol %No se encontro la raiz pero se

llego a una aproximacion a esta con un error menor a la tolerancia

fprintf('La aproximacion a la raiz es : %g

con un error de: %g ',x1,error);

else

if denominador==0 %Si el

denominador es 0 no se puede ejecutar el metodo

fprintf('no se puede

ejecutar el metodo porque x1 (%g) es una posible raiz multiple',x1);

else %No se encontro la

raiz con el numero de iteraciones ingresadas

fprintf('El numero

de iteraciones ingresadas no fue suficiente');

end

end

end

end

6. Método de la Regla Falsa

Es un método que conserva las características y condiciones del método de la

bisección, su diferencia se encuentra al calcular los puntos para nuevos intervalos.

Requiere dos puntos iniciales, se construye una recta secante a estos puntos y se

evalúa donde cruza al eje x, de esta forma se aproximara más rápido a la raíz

P

P3 P2

P1

Ilustración 11 - Método de la Regla falsa

Page 27: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Paso a paso

a) Se seleccionan dos valores arbitrarios P0 y P1 (dentro del intervalo de interés), se traza una recta secante a estos dos puntos.

b) Se evalúa f(P0) f(P1)<0 para garantizar que tienen signos opuestos.

c) Se observa el intercepto de la recta secante con el eje x, para hallar P2.

d) Se evalúa f(P2):

Si f(P2)=0 P2 es la raíz

Si f(P1)f(P2)<0 se usa P1 y P2 para la siguiente iteración.

Si f(P1)f(P2)>0 se usa P0 y P2 para la siguiente iteración.

Ejemplo:

Encontrar la raíz de f(x)=cos(x)-cos(3.1*x)

Primer valor inicial: 1

Segundo valor inicial: 2

Tolerancia: 0.000001

Número de iteraciones: 1000

La aproximación a la raíz es 1.53248 con un error de 3.80929x10-10.

Código en Octave

clc

clear

clear all

format long

ingresefuncion=input('ingrese la funcion: ', 's'); %Aqui el usuario debe ingresar la

Page 28: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

funcion para calcularle la raiz

x0=input('ingrese el primer valor inicial: '); %Se debe ingresar la primera

aproximacion

x1=input('ingrese el segundo valor inicial: '); %Se debe ingresar la segunda

aproximacion

tol=input('ingrese la tolerancia deseada: '); %Se debe ingresar la tolerancia

deseada por el usuario

iter=input('ingrese el numero de iteraciones: '); %Se debe ingresar el maximo

numero de iteraciones a realizar

funcion=inline(ingresefuncion); %Aqui se convierte la funcion en una serie de

caracteres para poder evaluar valores

fx0=funcion(x0); %Aqui se evalua la funcion en x0

fx1=funcion(x1); %Aqui se evalua la funcion en x1

if fx1==0 %Si al evaluar la funcion en x1 da 0 entonces indica que la raiz es x1

fprintf('La raiz es : %g \n',x1);

else

if fx0==0

fprintf('La raiz es : %g \n',x0); %Si al evaluar la funcion en x0 da 0

entonces indica que la raiz es x0

else

if fx0*fx1<0 %Si la funcion en x0 y x1 tiene cambio de signo entonces

se utiliza este intervalo

x2= x0-((fx0*(x1-x0))/(fx1-fx0)); %Encuentra el valor del

punto medio

fx2=funcion(x2); %Evalua la funcion en el punto medio

encontrado

i=1; %Se inicia el contador

error=tol+1; %Se inicia el error

while error>tol && fx2~=0 && i<=iter %Mientras el error sea

mayor a la tolerancia, fxm diferente de 0 y la iteracion actual sea menor o igual a

iter, evalue las siguientes condiciones

if fx0*fx2<0 %Si la funcion evaluada en a y xm cambia

de signo entonces hacer limite superior xm y evalue la funcion

x1=x2; %Se iguala x1 con x2

fx1=fx2; %Como las variables son iguales. Las

respectivas funciones también lo seran

else %Sino esto quiere decir que la raiz se

Page 29: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

encuentra en el otro intervalo

x0=x2; %Igualo x0 a x2

fx0=fx2; %Como las variables son iguales. Las

respectivas funcions también lo seran

end

xaux=x2;

x2=x0-((fx0*(x1-x0))/(fx1-fx0)); %Encuentra el valor

medio del intervalo

fx2=funcion(x2); %Evalua la funcion en el punto

medio encontrado

error=abs(x2-xaux); %Se compara el error con la

tolerancia

i=i+1; %Incrementa el numero de iteraciones

tabla(i,1)=i; %En la columna 1 se muestra el numero

de iteraciones

tabla(i,2)=x2; %En la columna 2 se muestra

tabla(i,3)=fx2; %En la columna 3 se muestra

tabla(i,4)=error; %En la columna 4 se muestra el error

absoluto

end

if fx2==0

fprintf('La raiz es : %g \n',x2); %Si al evaluar la funcion

en xm da 0 entonces indica que la raiz es xm

else

if error<tol %N se encontro la raiz pero se llego a una

aproximacion a esta con un error menor a la tolerancia

fprintf('La aproximacion a la raiz es : %g con un

error de: %g \n ',x2,error);

else %El numero maximo de iteraciones que

ingreso el usuario, no son suficientes para encontrar la raiz

fprintf('El numero de iteraciones ingresadas no

fue suficiente: \n ');

end

end

else %Ls valores ingresados estan errados, vuelva a dar un

nuevo intervalo

fprintf('El intervalo ingresado es indaecuado: \n ');

Page 30: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

end

end

disp(tabla); %Muestra la tabla

end

7. Método de las Raíces Múltiples

Es conocido como el método de Newton-Raphson modificado.

Una de las condiciones para garantizar la convergencia del método de Newton-

Raphson es que , donde P es la raíz de la ecuación . Si al

momento de ejecutar el método de Newton-Raphson se observa que se

aproxima a 0 (cero), se nota que la rapidez de convergencia del método disminuye.

Del mismo modo se entiende que si en un valor de P se presenta simultáneamente

que y que , entonces P es un valor crítico.x

Se dice que P es una raíz de multiplicidad m de f si puede escribirse:

, donde . Si , se llama raíz simple.

El criterio de multiplicidad de una raíz se determina con el siguiente teorema:

Sea [ ]. La función f tiene una raíz de multiplicidad m en P si y sólo si

pero .

Paso a paso:

a) Elegir un punto inicial cualquiera x1 como aproximación de la raíz.

b) Obtener los valores de la función, de su primera y de su segunda

derivada en ese punto.

c) Establecer la función

y obtener el valor de la misma en el

punto inicial.

d) Trazar una recta tangente a la función por ese punto.

e) El punto de intersección de esta recta con el eje de las abscisas (x2, 0),

constituye una segunda aproximación de la raíz.

f) El proceso se repite n veces hasta que el punto de intersección xn

coincide prácticamente con el valor exacto de la raíz.

Page 31: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

Se utiliza la siguiente ecuación para hallar el intercepto con el eje x:

Ejemplo:

Encontrar la raíz de la ecuación f(x)=cos(X)-COS(3.1*X)

La raíz es: 1.53248

Error: 0.80007*10^-13

Se puede observar que el método converge rápidamente y con gran precisión ya que

encontró la raíz en 7 iteraciones.

Código en Octave:

clc

clear

clear all

format long

inputfuncion = input('Ingrese la función : ', 's'); %El usuario debe ingresar la función

Page 32: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

a la cual va a calcularle la raiz

funcion = inline(inputfuncion); %Aqui se convierte la funcion en una serie de

caracteres para poder evaluar valores

inputderivada = input('Ingrese la derivada : ', 's'); %Aqui el usuario ingresa la

primera derivada de f(x)

derivada = inline(inputderivada); %Aqui se convierte la primera derivada en una

serie de caracteres para poder evaluar valores

input2daderivada = input('Ingrese la segunda derivada : ', 's'); %Aqui el usuario

ingresa la segunda derivada de f(x)

derivada2 = inline(input2daderivada); %Aqui se convierte la segunda derivada en

una serie de caracteres para poder evaluar valores

x0 = input('Ingrese un valor aproximado a la raíz : '); %Aqui se debe ingresar el

valor inicial a evaluar

tol = input('Ingrese la tolerancia permitida : '); %Se pide ingresar la tolerancia

iter = input('Ingrese el número de iteraciones máximas : ');%Ingresar numero

maximo de iteraciones a realizar

fx = funcion(x0); %Aqui se evalua fx en el punto inicial ingresado

dx = derivada(x0); %Aqui se evalua la primera derivada en el punto x0

d2x = derivada2(x0); %Aqui se evalua la segunda derivada en el punto x0

denominador=(dx^2-(fx*d2x)); %Aqui se calcula el valor del denominador

i=1; %Se inicia el contador de iteraciones

error=tol+1; %Se le da un valor inicial error

while fx~=0 && dx~=0 && error>tol && i<iter && denominador~=0 %Mientras no

se haya encontrado la raiz y el error sea mayor que la tolerancia y el contador

menor que iter comenzara a iterar el metodo

Page 33: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

x1=x0-((fx*dx)/denominador); %Se halla el valor de x1

fx=funcion(x1); %Evalua fx en x1

dx=derivada(x1); %Evalua la primera derivada en x1

d2x=derivada2(x1); %Evalua la segunda derivada en x1

denominador=(dx^2-(fx*d2x)); %Se reevalua el denominador

error=abs(x1-x0); %Calcula el error

x0=x1; %Se repite la iteracion haciendo x0=x1

i=i+1; %Incrementa el numero de iteraciones

tabla(i,1)=i; %En la columna 1 se muestra el numero de iteraciones

tabla(i,2)=x0; %En la columna 2 se muestra el valor de x1

tabla(i,3)=fx; %En la columna 3 se muestra el valor de fx1

tabla(i,4)=error; %En la columna 4 se muestra el error absoluto

end

disp(tabla); %Muestra la tabla

if fx==0 %Si encontro la raiz muestra el valor de x donde esta la raiz

fprintf('La raiz es : %g \n',x0);

else

if error<tol %No se encontro la raiz pero se llego a una aproximacion a esta

con un error menor a la tolerancia

fprintf('La aproximacion a la raiz es : %g con un error de: %g

',x0,error);

else

if denominador==0 %Si el denominador es 0 no se puede ejecutar el

metodo

fprintf('no se puede ejecutar el metodo porque el

Page 34: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

denominador (%g) es igual a ',denominador)

else %No se encontro la raiz con el numero de iteraciones

ingresadas

fprintf('El numero de iteraciones ingresadas no fue suficiente');

end

end

end

Page 35: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

CONCLUSIONES

El método de Newton-Raphson es el que tiene más precisión al encontrar las

raíces, además converge más rápido que otros métodos como bisección, regla falsa

y punto fijo. Sin embargo el método de la secante también presenta alto rapidez

de convergencia, pues encuentra la raíz en pocas iteraciones.

Para garantizar la convergencia de los métodos es necesario que la función sea

continua al menos en el intervalo a evaluar. Sin embargo bajo ciertas condiciones

especiales, los métodos como el de Newton, punto fijo, secante y raíces múltiples

pueden llegar a divergir, en tales casos resultan más efectivos los métodos de

búsquedas incrementales y bisección, ya que aunque requieran de más iteraciones

siempre convergen.

Para el método de búsquedas incrementales, no es estrictamente necesario que al

evaluar la función en los extremos del intervalo, exista un cambio de signo.

Para realizar las demostraciones de los métodos es necesario tener conceptos

claros sobre algunos teoremas (Teorema de valor intermedio, teorema del valor

medio y el teorema de rolle).

Page 36: Solución numérica de ecuaciones no lineales de una variable · 2013-09-17 · Método de la secante 6. Método de la regla falsa ... (a,b). Si (a,b) en donde entonces existe un

BIBLIOGRAFÍA

Capitulo 5: Ceros de Funciones. (s.f.). Recuperado el 12 de Septiembre de 2013, de

http://portales.puj.edu.co/objetosdeaprendizaje/Online/OA10/AnimacionesFlash/i

ndicecap5.html

Mario Cesca, M. C. (2012). Procesos Industriales. Recuperado el 12 de Septiembre

de 2013, de Métodos Numéricos:

http://www1.herrera.unt.edu.ar/faceyt/procesosindustriales/files/2011/04/MN20

12.pdf

Métodos Numéricos. (s.f.). Recuperado el 12 de Septiembre de 2013, de

http://noosfera.indivia.net/metodos/puntoFijo.html

Resolución de Ecuaciones no Lineales. (s.f.). Recuperado el 12 de Septiembre de

2013, de

http://www.docentes.unal.edu.co/afedosova/docs/Metodo%20de%20punto%20fij

o.pdf

Romero, L. N. (s.f.). SlideShare. Recuperado el 12 de Septiembre de 2013, de

MéTodo De IteracióN De Punto Fijo:

http://www.slideshare.net/lisset_1534/mtodo-de-iteracin-de-punto-fijo

Zabala, F. J. (2010). Métodos Numéricos. Medellín: Fondo Editorial Universidad

EAFIT.