Matlab, Mtodo de Biseccin para
Raices de Ecuaciones
10 ABRIL, 2013 / JULIO CSAR
[RECUERDA, EN ESTA PGINA EL CDIGO SE ENCUENTRA AL
FINAL PARA SU DESCARGA]
Una de los usos mas importares en la aplicacin de los mtodos
numricos
es
el
de
hallar
las races de
ecuaciones
o tambin llamados ceros de las funciones, ya sean funciones
lineales o no lineales, como siempre, los mtodos numricos son
usados en las ocasiones donde lo que necesitamos no requiere
de la precisin exacta como cuando se hallan dichos valores
analticamente, es decir con papel y lpiz y hacer ciertos
despejes, en algunos casos esto resulta trivial, pero en otros, no
resulta tan fcil, y si se hicieran de forma simblica, el costo
computacional no permitira que fuera para nada optimo, es
aqu donde entran nuestros mtodos numricos a salvar
nuestros diseos o cualquier trabajo que con base a esos datos
estemos desarrollando.
Existe gran variedad de mtodos para hallar dichas races de
ecuaciones,
algunos
son
originales,
otros
tantos
son
derivaciones de estos, o corrigen falencias presentadas por los
originales, hacindolos mas ptimos tanto computacionalmente
hablando como ms precisos en sus resultados.
En esta vez ser de nuestro inters el desarrollo de un tipo
de mtodos,
partiendo
conocidos
del
como
mtodos
hecho
de
que
intervalo
un
intervalo, matemticamente hablando
es
el
conjunto
que
esta comprendido entre dos valores.
Los mtodos de intervalo, sacan ventaja del hecho que
una funcin normalmente cambia de signo en la vecindad de
una raz como se ve en la figura 1.
cambio de signo en la vecindad de una raz.
En la figura 1 se puede apreciar lo anteriormente dicho, donde
en un intervalo comprendido entre XL (lower) y XU (upper)
la funcin cambia de signo al cortar el eje x, es esta situacin en
particular la que aprovechan los mtodos de intervalo.
El algoritmo de la biseccin es muy bsico y consta de los
siguientes pasos:
1. Escoger las estimaciones iniciales XL y Xu es decir, el
intervalo, de tal forma que se cumpla que:
2. Realizar una divisin del intervalo que corresponder a
un estimado de la raz:
3.
Realizar las siguientes evaluaciones para determinar el
intervalo en el cual esta la raz:
Si f(XL)*f(Xr)<0 la raz se encuentra en el intervalo inferior,
entonces Xu=Xr, y se retorna al paso 2.
Si f(XL)*f(Xr)>0 la raz se encuentra en el intervalo
superior, entonces XL=Xr, y se retorna al paso 2.
Si f(XL)*f(Xr)=0 la raz es igual a Xr (muy poco probable),
se terminan las iteraciones.
Cdigo en Matlab.
En
nuestro
caso,
inicialmente
podemos
hacer
una
representacin grfica de la funcin para que se vea con mayor
claridad el intervalo apropiado para iniciar las iteraciones. (para
ver la imagen mejor, dar clic sobre ella).
Seguidamente de la visualizacin de la respectiva grfica de
la funcin, se pretende que el usuario ingrese los limites: ya sea
que la funcin reciba estos como parmetros o de la siguiente
forma dentro de la funcin:
Debido a la posibilidad que el usuario ingrese un intervalo no
apropiado, es decir un intervalo donde no se cumpla que
la funcin cambia de signo, es bueno enviar un mensaje de
advertencia, avisando que el intervalo no es valido, esto lo
hemos hecho de la siguiente forma: (para visualizar mejor la
imagen darle clic).
Finalmente se inicia el mtodo de biseccin, con un ciclo, un
umbral de error que ya hemos definido previamente de
0.000001% y con las respectivas sentencias condicionales
( if ) para cada uno de los 3 posibles casos: (dar clic en la
imagen para ver mejor).
Cabe aclarar que para el correcto llamado de la funcin, debe de
ser previamente definida una variable simblica X con el
comando SYMS de Matlab, y posteriormente escribir la funcin
Y correspondiente, para pasarla como parmetro a la funcin
biseccion(Y) como ilustra la siguiente imagen.
Finalmente, despus de
la ejecucin del cdigo
la funcin de
Matlab llamada biseccin, nos retorna una variable con el
respectivo valor aproximado de la raz, con una precisin del
0.000001% de error.
El mtodo de biseccin en particular sirve para encontrar
una raz simple en una funcin fcil de evaluar, pero debido a
que principalmente los mtodos numricos son usados para
ecuaciones que no son tan fciles de evaluar, las funciones
programadas requieren de bastantes lineas de cdigo y
se
deben evaluar muchas veces para ir cambiando los lmites para
finalmente encontrar la raz, este mtodo ya no es tan
efectivo. Debido a factores de este tipo, es muy importante que
los algoritmos numricos hagan lo ms mnimo posible el
nmero de evaluaciones de la funcin. Es por esto que el
mtodo de biseccin se hace ineficiente, ya que la funcin debe
ser evaluada en cada ciclo.
El cdigo respectivo
del
programa
mostrado
en
las imgenes anteriores, puede ser descargado aqu puedes
comentar las preguntas que tengas con respecto a este cdigo.
METODO DE BISECCION Y
NEWTON-RAPSHON
EN MATLAB
April 8, 2014 Leave a comment
En el siguiente articulo se precentaran los siguientes metodos, el
de biseccion y el de newton-rapshon, estos son metodos para
encontrar las raices de polinomios, son procesos muy largos y
repetitivos segun la complejidad del polinomio, por lo tanto se
planteara la solucion de estos metodos atraves de un programa
en matlab.
Todo lo que se vera en el articulo fue desarrolla y comprobado
en matlab 2008.
Objetivo
El usuario debe ser capaz de desarrollar un programa en matlab
el cual encuentre de manera correcta las raices de diferentes
polinomios utilizando los metodos de biseccion o de newtonrapshon.
Metodo de Biseccion
El Mtodo de Biseccion se basa en la bsqueda incremental
donde el intervalo se divide siempre en dos. Si la funcin
previamente planteada cambia de signo sobre un intervalo, se
evala el valor de la funcin en el punto medio de este intervalo.
La posicin de la raz se determina situndola en el punto medio
del subintervalo dentro del cual ocurre un cambi de signo. El
proceso se repite hasta obtener una mejor aproximacin.
Los 2 teoremas que dan origen al metodo de biseccion son los
siguientes;
-Teorema de Bolzano: Sea f : [a; b] C IR > IR una funcin
continua en [a; b] tal que f(a) f(b)< 0, esdecir, que tiene
distinto signo en a y en b. Entonces, existe c 2 (a; b) tal que f(c)
= 0.
-Teorema de valor intermedio: Sea f : [a; b] C IR > IR
continua en [a; b], y tal que f(a) <(b) entonces, para cualquier k
tal que f(a) < k < f(b) existe x0 2 (a; b) tal que f(x0) = k
Ejemplo;
Encontrar x con un error ms pequeo que 0.05 el punto de
corte de las funciones h(x) = sen(x) y g(x) = -x + 1.
Dado que queremos encontrar la solucion de la ecuacin senx =
-x + 1 lo que vamos a hacer es definir la funcin f(x) = sen(x) +
x 1 y encontraremos sus ceros mediante el mtodo de la
biseccin. Observamos que f(x) es continua en (-1; +1) por ser
suma de funciones elementales. Buscamos x1 y x2 tal que f(x1)
* f(x2) < 0.
x1 = 0
f(x1) = -1
x2 = 1
f(x2) = 0;8415
x3 =(x1 + x2)/2= 0;5 > < 0;5
f(x3) = -0;0206
x3 = 0;5
x2 = 1
f(x3) = -0;0206
f(x2) = 0;8415
x4 =(x3 + x2)/2= 0;75 > < 0;25
f(x4) = 0;4316
x3 = 0;5
x4 = 0;75
f(x3) = -0;0206
f(x4) = 0;4316
x5 =(x3 + x4)/2= 0;625 > < 0;125
f(x5) = 0;2101
x3 = 0;5
x5 = 0;625
f(x3) = -0;0206
f(x5) = 0;2101
x6 =(x3 + x5)/2= 0;5625 > < 0;0625
f(x6) = 0;0958
x3 = 0;5
x6 = 0;5625
f(x3) = -0;0206
f(x6) = 0;0958
x7 = (x3 + x6)/2
= 0;53125 > < 0;03125
f(x7) = 0;0379
Hemos encontrado que 0;53125 0;03125 es solucin de la
ecuacin y por tanto ser el punto de corte de las dos funciones
dadas.
Metodo de biseccion, solucion en
Matlab.
A continuacion se explicara paso a paso el como programar
matlab para dar solucion a una funcion, polinomio o ecuacion.
para comenzar abriremos matlab, como ya se mencion
anteriormente todo lo realizado en este articulo se lleva acabo
en matlab version 7.6.0 2008.
nuestra zona de trabajo sera la Ventana de comandos
(command windows)
Todo nuestro trabajo se llevara acabo en nuestra ventada de
comando, en esta introduciremos el siguiente codigo como se
muestra en la imagen; (codigo)
Una ves finalizada la introduccion de los datos en la ventana de
comando daremos un enter para que comience a correr el
programa;
Una ves iniciado el programa procederemos a introducir los
datos que se nos solicitan;
Una ves introducidos estos datos daremos un enter para obtener
los resultados, la solucion de esta funcion segun los parametros
indicado atraves del metodo de biseccion s la siguiente;
Utilizaremos el siguiente comando para graficar la solucion y
comprobar la respuesta.
x= [-5 : 0.1 : 10]
y = -0.4.*X.^2 + 2.2.*X + 4.7
plot (x,y)
El siguiente ejemplo se realizara de forma que el programa nos
indique que no existe raiz dentro de este intervalo.
Algoritmo del metodo de Biseccion.
1- Iniciar programa.
2-Introducir la funcion (polinomio).
3-Introducir limite inferior.
4- Introducir limite Superior.
5- Introducir porcentaje de error.
6- El programa multiplica los limites y espera que sean menores
a cero.
7- El programa calcula la primera aproximacion de la raiz.
8- Se determina en que sub-intervalo se encuentra la raiz.
9- Si el producto de los limites es menor que cero volver al paso
7.
10- Si el producto de los limites es mayor que cero volver al
paso 3.
11- Si el producto de los limites es igual a cero la raiz se a
encontrado.
12- Imprimir resultados.
13-Fin.
Diagrama de flujo, Metodo de biseccion
Metodo de Newton-Rapshon
El mtodo de Newton-Raphson es un mtodo iterativo que nos
permite las raices de una ecuacin, funcion o polinomio. Se con
estimacin inicial de la solucin x0 y construimos una sucesin
de aproximaciones siguiendo la formula del metodo;
xj+1 = xj (f(xj)/f(xj))
Ejemplo;
-El polinomo de ejemplo es el siguiente; f(x) = (e^x) (1/x).
Expresamos la ecuacin, funcion o polinomio en la forma f(x)=0,
e identificamos f.
Calculamos la derivada: f0(x) = (e^x) +(1/x^2)
Utilizamos la formula del metodo: xj+1 = xj [{ (e^xj) (1/xj)}/
{(e^xj) + (1/x^2)}]
Tomamos una estimacin inicial de la solucin. En este caso
podemos tomar por ejemplo x0 = 1.0, y calculamos las
siguientes aproximaciones. Desde el punto de vista prctico, si
deseamos aproximar la solucin con 6 decimales, podemos
detener los clculos cuando dos aproximaciones consecutivas
coincidan hasta el decimal 8. En nuestro caso, obtendramos:
x0 = 1.0.
x1 = 1 [{ (e^1) (1/1)}/{(e^1) + (1/1^2)}]= 0.53788284.
x2 = x1 [{ (e^x1) (1/x1)}/{(e^x1) + (1/x1^2)}]0.56627701
x3 = 0.56714 258.
x4 = 0.56714 329.
x5 = 0.56714 329.
Podemos, entonces, tomar como solucin x = 0.567143.
Metodo de Newton-Rapshon, solucion
en Matlab.
A continuacion se mostrara como resolver una funcion,
polinomio o ecuacion por el metodo de newton-rapshon
utilizando matlab;
Ubicamos la ventana de comando;
una ves que ubicamos la ventana de comando introduciremos el
siguiente codigo como se muestra en la imagen; (codigo)
Una ves introducido el codigo daremos un enter para que
comience a correr el programa, y comensaremos a introducir los
datos que se nos van pidiendo;
Una ves obtenidos los resultados procederemos a graficar al
igual que con el metododo de biseccion con los siguientes
comendos;
x= [0 : 0.1 : 5]
y = -0.9.*X.^2 + 1.7.*X + 2.5
plot (x,y)
Algoritmo del metodo de NewtonRapshon.
1- Iniciar.
2- Introducir la funcion, ecuacion o polinomio.
3- Introducir la derivada de la funcion.
4- Introducir el valor de X0.
5-introducir el error limite.
6- Analizar si el error aprox. es mayor que el error limite.
7- Calcular raiz mejorada.
8- Calcular error aprox.
9- Si el error aprox. es mayor regresar al paso 6, sino continuar.
10- Imprimir resultados.
11- Fin.
Diagrama de flujo del metodo de
Newton-Rapshon.
[Link]
[Link]
Programacion en Matlabd: Mtodo de la biseccin
Publicado por Oier (3 intervenciones) el 15/02/2012 22:01:54
Buenas, he creado un script para aplicar el mtodo de la biseccin. El cdigo que he creado slo
sirve para la funcin almacenada en la function f. Lo que quiero hacer es que el usuario pueda
introducir cualquier funcin f y el programa lo calcule, pero no s como hacer este paso. El
cdigo que he creado es ste:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
clear
format short;
a=input('Introduzca el valor de a');
b=input('Introduzca el valor de b');
cont=input('Introduzca el nmero de iteraciones');
for k=1:1:cont
c=(a+b)/2;
e=abs((b-a)/2);
A(k,:)=[k a b c f(c) e];
METODO BISECCION EN MATLAB
2/07/2011 CODIGOS TAZ 18 COMENTARIOS
Este es el codigo del Metodo de Biseccion en Matlab para hallar raices de una funcion
Aqui les va el codigo:
%Metodo de Biseccion - Metodos Numericos Matlab
clc;
Fx=input('Ingrese la funcion: ','s');
a=input('Ingrese a : ');
c=input('Ingrese c : ');
e=input('Ingrese el error : ');
x=a;
Fa=eval(Fx);
x=c;
Fc=eval(Fx);
fprintf('\n %6s %7s %8s %10s %8s %8s %8s \n
','A','B','C','F(a)','F(b)','F(c)','|c-a|');
while abs(c-a)>e
b=(a+c)/2;
x=b;
Fb=eval(Fx);
fprintf('\n %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f
\n',a,b,c,Fa,Fb,Fc,abs(c-a));
if Fa*Fb<=0
c=b;
Fc=Fb;
else
a=b;
Fa=Fb;
end
end
fprintf('\nEl resultado sera %.4f\n',b);
ezplot(Fx);%graficamos la funcion
grid on;
Matlab, Mtodo de la Posicin Falsa.
12 ABRIL, 2013 / JULIO CSAR
[RECUERDA, EN ESTA PGINA EL CDIGO SE ENCUENTRA AL
FINAL PARA SU DESCARGA]
El mtodo de la posicin falsa, es uno de los mtodos de
intervalo
que habamos explicado
anteriormente
en esta
entrada, este, al ser un mtodo de intervalo, sabemos que
requiere del ingreso de dos estimados iniciales, es decir un XL
(low) y un Xu (up), es por esta razn que podemos deducir que
tambin requiere un conocimiento previo del comportamiento
de la ecuacin ingresada, para as poder dar unas buenas
estimaciones para los intervalos, este, al igual que los dems
mtodos vistos hasta el momento, sirve para halla una sola raz
de determinada ecuacin, tambin, tiene ciertas limitaciones
con su convergencia pero es bastante eficaz, es muy usado para
ecuaciones NO lineales.
Se sabe que el mtodo de la posicin falsa es un mtodo
alternativo al mtodo de biseccin, basndose tambin en un
conocimiento grfico previo,
pero
un
aspecto
clave
en
la
ejecucin de este mtodo es que en la divisin del intervalo XL
Xu no se tienen en cuenta las magnitudes F(XL) y F(Xu). Por
ejemplo, si F(XL) esta ms cerca de 0 (cero) que
F(Xu) se
puede entonces suponer que la raz se encuentra mas prxima a
XL que a Xu.
Una
forma
de
explotar
el
conocimiento
grfico
de
la
funcin f(x) es unir con una linea recta los puntos dados por
F(XL) y F(Xu). La interseccin entre el eje de la variable
independiente (en este caso x) nos representa un estimado de la
raz. El hecho de aproximar la raz mediante una linea recta, nos
brinda una posicin falsa de la raz, lo cual le da origen al
nombre del mtodo.
Ilustracin del mtodo de la posicin falsa, mediante la
interseccin de una recta con el eje independiente
El mtodo de falsa posicin en cuanto a algoritmo es idntico al
de biseccin con la diferencia que en el paso #2 se aplica la
formula de la posicin falsa, que expresa la estimacin de la
[Link] punto correspondiente al valor de la raz falsa Xr dado por
la interseccin de la recta entre F(XL) y F(Xu) con el eje puede
calcularse por:
Donde, resolviendo la ecuacin para Xr se obtiene:
donde Xr es la posicin falsa , la ecuacin anterior se conoce
como la formula de la falsa posicin, el valor de Xr luego
remplaza cualquiera de los dos limites estimados sea XL o Xu,
de esta forma los valores de Xl y Xu siempre enmarcan el valor
real de la raz, como se haba dicho anteriormente, este
algoritmo, es idntico al de biseccin con excepcin de esta
nueva formula.
Cdigo En Matlab.
Inicialmente, al igual que en los programas de este tipo que
hemos hecho hasta este momento, nuestra funcin en Matlab,
solo recibir como argumento de entrada, una funcin que
depende de una sola variable (definida con anticipacin).
Llamaremos a nuestra funcin pfalse
A continuacin se realiza una representacin grfica de la
ecuacin para proporcionar un intervalo adecuado, en esta
seccin se piden un valor inferior y uno superior desde donde
grficar la ecuacin.
posteriormente se procede como tal con el desarrollo y
ejecucin
del
metodo
de
posicin
falsa,
que
es prcticamente idntico al de biseccin, solo que cambiando
el paso 2, donde aqu aplicamos la formula de posicin falsa en
la linea 18 del cdigo. (clic en la imagen para verla mejor).
En este caso, tambin es de resaltar la suma importancia del
calculo del error, ya que es este el que nos va a proporcionar
nuevamente la condicin de finalizacin para nuestro programa,
igualmente sin el correcto calculo del error relativo este mtodo
no
tendra
buen
desempeo
nivel
computacional
(prcticamente sera inservible).
El modo de uso de esta funcin es la siguiente, se define en la
ventana de comandos la variable simblica (en este caso X) y se
introduce una funcin (para este caso Y) despus de ubicar
correctamente el current folder de Matlab, se llama la funcin
pfalse
se
le
pasa
como
argumento
la
funcio
Y,
posteriormente se ingresan los limites donde queremos ver la
grfica y finalmente se introduce el intervalo donde esta la raz.
EJEMPLO: halle la raz positiva de la siguiente funcin.
procedemos a ejecutar el siguiente cdigo en Matlab.
inicialmente vemos la siguiente representacin, que es lo que
buscamos ver cada vez que realizamos el anlisis grfico.
Con esta podemos elegir los limites del intervalo coo Xl=0.5 y
Xu=1.5
Como sabemos por simple inspeccin para este cas, la raz de
la ecuacin es 1 y vemos que el programa no ha dado una
respuesta aproximada, esta precisin la podemos mejorar
variando el umbral de error, dentro del While.
Este es un mtodo bastante poderoso, lo es para ecuaciones no
lineales, que son
las que
regularmente
encontramos
en
ingeniera y para las cuales utilizamos con gran frecuencia los
mtodos numricos, es por esto que es de suma importancia
tener un buen dominio y comprensin tanto de la parte terica
de su funcionamiento, ya que todos los mtodos tienen
sus falencias
o por lo menos en algunos casos unos se
comportan mejor que otros, as, teniendo un buen conocimiento
de cada uno, sabremos elegir el ms apropiado para nuestras
necesidades.
El cdigo de este programa (archivo.m) lo puedes descargar
de este enlace, cualquier pregunta que tengas acerca de este
archivo, puedes comentar esta entrada.
Espero que este artculo haya sido de ayuda, y si lo fue puedes
ver dems mtodos y cdigos en este blog, saludos.
[Link]
Mtodo de la falsa posicin
Como mencionamos anteriormente, sera bueno considerar si la raz de una ecuacin est
localizada ms cerca de alguno de los extremos del intervalo.
Consideremos nuevamente una grfica como la anterior,
Donde hemos agregado la lnea recta que une los puntos extremos de la grfica en el intervalo
.
Es claro que si en lugar de considerar el punto medio del intervalo, tomamos el punto donde cruza
al eje esta recta, nos aproximaremos mucho ms rpido a la raz; sta es en s, la idea central del
mtodo de la regla falsa y sta es realmente la nica diferencia con el mtodo de biseccin, puesto
que en todo lo dems los dos mtodos son prcticamente idnticos.
Supongamos que tenemos una funcin
y
que es contnua en el intervalo
y adems,
tienen signos opuestos.
Calculemos la ecuacin de la lnea recta que une los puntos
que la pendiente de esta recta esta dada por:
Por lo tanto la ecuacin de la recta es:
Para obtener el cruce con el eje , hacemos
Multiplicando por
nos da:
Finalmente, de aqu despejamos :
. Sabemos
Este punto es el que toma el papel de en lugar del punto medio del mtodo de biseccin.
As pues, el mtodo de la regla falsa sigue los siguientes pasos:
Sea
contnua,
i) Encontrar valores iniciales
tales que
tienen signos opuestos, es decir,
ii) La primera aproximacin a la raz se toma igual a:
iii) Evaluar
. Forzosamente debemos caer en uno de los siguientes casos:
En este caso, tenemos que
tienen signos opuestos, y por lo tanto la raz se
tienen el mismo signo, y de aqu que
tienen signos opuestos. Por lo tanto, la raz se encuentra en el intervalo
encuentra en el intervalo
En este caso, tenemos que
En este caso se tiene que
y por lo tanto ya localizamos la raz.
El proceso se vuelve a repetir con el nuevo intervalo, hasta que:
Uso del programa
Uso del programa Mtodo de la falsa posicin en el Matlab:
1. Escribes el nombre del metodo "falsaposicion" y le damos enter.
2. El programa te muestra el nombre del metodo "METODO DE LA FALSA POSICION"y los
valores a ingresar:
o
Ingresas la Funcin.
Ingresas el valor inicial.
Ingresas el valor final.
Ingresas el Tolerancia
3. luego de ingresado los valores requieridos solo tenemos que dar un enter para que corra el
programa y obtenga la raiz que se desea y la grafica de funcin
Descarga:
Mtodo de la falsa posicin en Matlab 7.01
IMAGENES DEL PROGRAMA
1) ENTRADA DE DATOS
2) CALCULO DE DATOS
3) GRAFICA DE DATOS
4) PROGRAMA EN MATLAB
[Link]