Escolar Documentos
Profissional Documentos
Cultura Documentos
El clculo de las races de las ecuaciones es un problema que se ha tenido que enfrentar
por eso se han elaborado diversos mtodos ya que al determinar las races de una
ecuacin tambin lograremos mximos y mnimos, valores propios de matrices, resolver
sistemas de ecuaciones lineales y diferenciales, etc.
Un mtodo consiste en graficar la funcin y ubicar el punto donde la grfica intercepta al
eje de las abscisas o eje x. El punto ubicado x es el valor de la raz donde f(x)=0.
Pero el mtodo grafico no es preciso por eso de elaboro otros mtodos ms efectivos
capaces de ayudarnos en el campo de la ingeniera, pues son frecuentes en reas de
diseo, clculos para la optimizacin de recursos y otros.
DEFINICIN: La raz de una ecuacin es aquel valor de la variable independiente que
hace que el resultado de la ecuacin sea cero o por lo menos se acerque a cero con una
cierto grado de aproximacin deseado (error mximo permitido).
OBJETIVOS: El objeto del clculo de las races de una ecuacin es determinar los
valores de x para los que se cumple:
f(x) = 0
La determinacin de las races de una ecuacin es uno de los problemas ms
antiguos en matemticas y se han realizado un gran nmero de esfuerzos en este
sentido. Su importancia radica en que si podemos determinar las races de una
ecuacin tambin podemos determinar mximos y mnimos, valores propios de
matrices, resolver sistemas de ecuaciones lineales y diferenciales, etc..
2.1 MTODOS DE INTERVALOS: GRFICOS, BISECCIN Y FALSA POSICIN.
MTODO GRFICO
Mtodo simple para obtener una aproximacin a la raz de la ecuacin f(x)=0 consiste
en graficar la funcin y observar en donde cruza el eje x. Este punto que representa el
valor de X para la cual f(X)=o, proporciona una aproximacin inicial a la raz.
Las interpretaciones graficas, adems de proporcionar aproximaciones iniciales de la
raz.
Las tcnicas grficas tienen una prctica limitada, ya que no son precisas, sin
embargo se pueden usar para obtener aproximaciones de la raz. Estas
aproximaciones se pueden usar como valores iniciales para los mtodos numricos.
Por ejemplo, el software de mtodos numricos TOOLKIT que acompaa este texto
permite graficar funciones sobre un rango especfico. Esta grfica puede usarse para
seleccionar valores iniciales de un intervalo donde est contenida la raz antes de
implementar el mtodo numrico. La posibilidad de graficar aumenta
considerablemente la utilidad de los programas.
Las interpretaciones grficas, son herramientas importantes en la compresin de las
propiedades de las funciones, previendo las fallas de los mtodos numricos.
METODO DE BISECCIN
Este es uno de los mtodos ms sencillos y de fcil intuicin para resolver ecuaciones
en una variable. Se basa en el teorema del valor intermedio(TVI), el cual establece
que toda funcin continua f en un intervalo cerrado [a,b] toma todos los valores que se
hallan entre f(a) y f(b). Esto es que todo valor entre f(a) y f(b) es la imagen de al
menos un valor en el intervalo [a,b]. En caso de que f(a) y f(b) tengan signos opuestos,
el valor cero sera un valor intermedio entre f(a) y f(b), por lo que con certeza existe un
p en [a,b] que cumple f(p)=0. De esta forma, se asegura la existencia de al menos una
solucin de la ecuacin f(a)=0.
El mtodo consiste en lo siguiente:
Debe existir seguridad sobre la continuidad de la funcin f(x) en el intervalo [a,b]
A continuacin se verifica que
Se calcula el punto medio m del intervalo [a,b] y se evala f(m) si ese valor es igual
a cero, ya hemos encontrado la raz buscada
En caso de que no lo sea, verificamos si f(m) tiene signo opuesto con f(a) o con f(b)
Se redefine el intervalo [a, b] como [a, m] [m, b] segn se haya determinado en
cul de estos intervalos ocurre un cambio de signo
Con este nuevo intervalo se contina sucesivamente encerrando la solucin en un
intervalo cada vez ms pequeo, hasta alcanzar la precisin deseada
En la siguiente figura se ilustra el procedimiento descrito.
El mtodo de biseccin es menos eficiente que el mtodo de Newton, pero es mucho
ms seguro para garantizar la convergencia. Si f es una funcin continua en el
intervalo [a, b] y f(a)f(b) < 0, entonces este mtodo converge a la raz de f. De hecho,
una cota del error absoluto es:
\frac{\left|b-a\right|}{2^n}
en la n-sima iteracin. La biseccin converge linealmente, por lo cual es un poco
lento. Sin embargo, se garantiza la convergencia si f(a) y f(b) tienen distinto signo.
Si existieran ms de una raz en el intervalo entonces el mtodo sigue siendo
convergente pero no resulta tan fcil caracterizar hacia qu raz converge el mtodo.
El algoritmo
Matlab
function x = biseccion(fun,a,b,tol)
% Aproxima por el mtodo de la biseccin una raz de la ecuacin fun(x)=0
disp('Mtodo de la biseccin');
u=feval(fun,a);
v=feval(fun,b);
n=1;
if sign(u)==sign(v)
disp('Error la funcin debe cambiar de signo en (a,b)');
end
while ((b-a)*0.5>=tol)
c=(b+a)/2; w=feval(fun,c);
disp(['n=', num2str(n)]);
disp(['c=', num2str(c)]);
disp(['f(c)=', num2str(w)]);
if sign(u)==sign(w)
a = c; u=w;
else
b=c; v=w;
end
n=n+1;
end;
x=c;
Ejemplo.
Considere la funcin f(x) = x-cosx, a priori sabemos que la funcin tiene un cruce por
cero en el intervalo [0,1], as que nuestra bsqueda se concentrar en este.
iter
inicio
mitad
fin
f(ini)
f(mitad)
f(fin)
0
0.0
0.5
1.0
-1.0
-0.3775
0.4596
1
0.5
0.75
1.0
-0.3775
0.0183
0.4596
2
0.5
0.625
0.75
-0.3775
-0.1859
0.0183
3
0.625
0.6875
0.75
-0.1859
-0.0853
0.0183
4
0.6875
0.71875
0.75
-0.0853
-0.0338
0.0183
5
0.71875
0.734375
0.75
-0.0338
-0.0078
0.0183
6
0.734375
0.7421875
0.75
-0.0078
0.0051
0.0183
7
0.734375
0.73828125
0.7421875
-0.0078
-0.0013
0.0051
8
0.73828125
0.740234375
0.7421875
-0.0013
0.0019
0.0051
9
0.73828125
0.7392578125
0.740234375
-0.0013
0.0002
0.0019
La implementacin recursiva de este algoritmo es:
public static double Biseccion(double ini, double fin)
{
double mitad; mitad = (fin + ini)/2.0;
if((fin - ini) > 0.001)
{
if(funcion(ini)*funcion(mitad) < 0)
return Biseccion(ini, mitad);
else return Biseccion(mitad, fin);
}
else return (mitad);
}
public static double funcion(double x)
{
return (x - Math.cos(x));
}
Frmula
Usando tringulos semejantes, la interseccin de la lnea recta con el eje de las x se
estima mediante:
http://illuminatus.bizhat.com/metodos/index_archivos/image002.gif
Multiplicando en cruz la ecuacin anterior obtenemos:
http://illuminatus.bizhat.com/metodos/index_archivos/image004.gif
Agrupando trminos y reordenando:
http://illuminatus.bizhat.com/metodos/index_archivos/image006.gif
Dividiendo entre http://illuminatus.bizhat.com/metodos/index_archivos/image008.gif
http://illuminatus.bizhat.com/metodos/index_archivos/image010.gif
Esta es una de las formas del mtodo de la falsa posicin. Esta puede ponerse en una
forma alternativa al separa los trminos:
http://illuminatus.bizhat.com/metodos/index_archivos/image012.gif
sumando y restando xu en el lado derecho:
http://illuminatus.bizhat.com/metodos/index_archivos/image014.gif
Agrupando trminos se obtiene:
http://illuminatus.bizhat.com/metodos/index_archivos/image016.gif
o:
http://illuminatus.bizhat.com/metodos/index_archivos/image018.gif
Esta es la frmula de la falsa posicin. El valor de xr calculado con la ecuacin
reemplazar, despus, a cualquiera de los dos valores iniciales, xl o xu, y da un valor
de la funcin con el mismo signo de f(xr). De esta manera, los valores xl y xu siempre
encierran la verdadera raz. El proceso se repite hasta que la aproximacin a la raz
sea adecuada.
Algoritmo
Paso 1: Elija valores iniciales inferior, xi, y superior xu, que encierran la raz, de forma
tal que la funcin cambie de signo en el intervalo. Esto se verifica comprobando que
f(xl) f(xu) <0.
Paso 2: Una aproximacin de la raz xr se determina mediante:
http://illuminatus.bizhat.com/metodos/index_archivos/image018.gif
Paso 3: Realice las siguientes evaluaciones para determinar en qu subintervalo est
la raz:
a) Si f(xl)f(xr) < 0, entonces la raz se encuentra dentro del subintervalo inferior o
izquierdo. Por lo tanto, haga xu = xr y vuelva al paso 2.
b) Si f(xl)f(xr) > 0, entonces la raz se encuentra dentro del subintervalo superior o
derecho. Por lo tanto, haga xl = xr y vuelva al paso 2.
c) Si f(xl)f(xr) = 0, la raz es igual a xr; termina el clculo.
pseudocdigo
FUNCTION FalsaPos(xl, xu, es, imax, xr, iter, ea)
iter=0
fl=f(xl)
DO
xrold=xr
xr=xu-((f(xu)*(xl-xu))/(f(xl)-f(xu)))
fr=f(xr)
iter=iter+1
IF xr!=0 THEN
ea=ABS((xr-xold)/xr)*100
END IF
test=fl*fr
IF test<0 THEN
xu=xr
ELSE IF test>0 THEN
xl=xr
fl=fr
ELSE
ea=0
END IF
IF ea<es OR iter >= imax EXIT
END DO
FlasaPos=xr
END FalsaPos
Procedimiento
Ejemplo
Sea f(x) = x2 5x + 3 una funcin, encuentre la raz.
Ubicamos la riz analizando la grfica.
Pfijo1
Obtenemos x = g(x):
x= \sqrt{5x-3}
Despus obtenemos la derivada de la funcin:
{dg \over dx}={5 \over 2\sqrt{5x-3}}
Entonces resolvemos las desigualdades:
{5 \over 2\sqrt{5x-3}}<1
La solucin es:
({37 \over 20},\infty)
{5 \over 2\sqrt{5x-3}}>-1
La solucin es:
({3 \over 5},\infty)
O visto de otra manera, vemos que en la grafica de la derivada existen valores entre
-1 y 1:
Pfijo2
Ya que se tienen los valores del rango R, encontramos la raz haciendo la iteracin de
las operaciones:
Pfijo3
En la tabla se puede ver el valor que en este caso se uso de R, la iteracin consiste en
usar ese valor en x = g(x) para obtener los siguientes valores haciendo la misma
operacin usando el valor anterior.
Despus de un nmero considerable de iteraciones obtenemos la raz en 4.30268775.
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
04.jpg
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
06.jpg
La sucesin que nos lleva a la solucin esta dada por los puntos {p0, p1, p2, , pk}.
La pendiente de la lnea recta es
m = (0 f(p0))/(p1 p0)
Por otro lado sabemos, del clculo diferencial, que la pendiente de la lnea tangente a
una funcin es la primer derivada valuada en ese punto. As:
m = f(p0)
Ejemplo.
Para este caso nuestra funcin a resolver es f(x) = x2-A. La solucin cuando f(x)=0 es
x = A-0.5.
f(x) = x2-A
f(x) =2 x
k
pk
0
2.0000
1
2.2500
2
2.2361
3
2.2361
4
2.2361
5
2.2361
6
2.2361
7
2.2361
8
2.2361
9
2.2361
10
2.2361
Ejemplo
k
pk
0
0.0000
1
1.0000
2
0.7504
3
0.7391
4
0.7391
5
0.7391
6
0.7391
7
0.7391
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
08.gif
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
10.gif
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
12.gif
donde
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
14.gif
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
16.gif
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
18.gif
Ejemplo.
f1(x,y) = x2 2x y +0.5
f2(x,y) = x2 + 4y2 4
El jacobiano es
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
20.gif
Considerando como valores iniciales [0, 1] tenemos:
Primer iteracin
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
22.gif
cuya solucin es x= 0.25 y y =0
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
24.gif
Segunda iteracin
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
26.gif
cuya solucin es x= -0.0274 y y =0.0061
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
28.gif
k
X
y
0
0.0000
1.0000
1
-0.2500
1.0000
2
-0.2260
0.9939
3
-0.2222
0.9938
4
-0.2222
0.9938
5
-0.2222
0.9938
6
-0.2222
0.9938
7
-0.2222
0.9938
double Newton()
{
int i;
double m, b, x;
x = 0;
pausa(300);
x = x - f(x)/m;
}
return x;
}
double f(double x)
{
return (x-Math.cos(x));
}
double df(double x)
{
return(1+Math.sin(x));
}
Ejemplo.
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
30.gif
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/NewtonR_archivos/image0
32.gif
Y la solucin numrica es:
x
f(x)
df(x)
0.5000
-0.9990
0.0195
51.6500
135114904483914000.0000
26159710451871000.0000
46.4850
47111654129711500.0000
10134807815362300.0000
41.8365
16426818072478500.0000
3926432199748670.0000
37.6529
5727677301318310.0000
1521180282851980.0000
33.8876
1997117586819850.0000
589336409039672.0000
30.4988
696351844868619.0000
228320999775654.0000
27.4489
242802875029547.0000
88456233382052.8000
24.7040
84660127717097.5000
34269757191973.2000
22.2336
29519161271064.1000
13276806089225.7000
20.0103
10292695105054.7000
5143706707446.1600
18.0092
3588840873655.1100
1992777367871.5700
16.2083
1251351437592.9200
772042782329.1500
14.5875
436319267276.5290
299105192259.1190
13.1287
152135121499.2910
115879479847.7330
11.8159
53046236848.5329
44894084747.9692
10.6343
18496079117.2577
17392888266.5936
9.5708
6449184014.3077
6738361277.7304
8.6138
2248691421.7628
2610579221.6818
7.7524
784070216.9426
1011391879.0870
METODO DE LA SECANTE
Un problema en la implementacin del mtodo de Newton-Raphson es el de la
evaluacin de la derivada. Aunque esto no es un inconveniente para los polinomios y
para muchas otras funciones, existen algunas funciones cuyas derivadas pueden ser
en extremo difciles de evaluar. En estos casos, la derivada se puede aproximar
mediante una diferencia finita.
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/MSec_archivos/image004.
gif
Sustituyendo esta aproximacin en la formula de Newton, tenemos la frmula del
mtodo de la secante.
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/MSec_archivos/image006.
gif
Ejemplo.
Encontrar la solucin utilizando el mtodo de la secante para la funcin f(x) = x10 1.
http://lc.fie.umich.mx/~calderon/programacion/Mnumericos/MSec_archivos/image008.
gif
x0
x1
f(x0)
f(x1)
0.5000
0.9000
-0.9990
-0.6513
0.9000
1.6493
-0.6513
147.9235
1.6493
0.9033
147.9235
-0.6384
0.9033
0.9065
-0.6384
-0.6253
0.9065
1.0602
-0.6253
0.7945
1.0602
0.9742
0.7945
-0.2301
0.9742
0.9935
-0.2301
-0.0630
0.9935
1.0008
-0.0630
0.0080
1.0008
1.0000
0.0080
-0.0002
Note, que para este problema, el mtodo de la secante si lleva a una solucin. Este
hecho se debe a que calcula su aproximacin apoyada de dos puntos, no de uno solo.
La implementacin de este mtodo en Java es :
double Secante()
{
int i;
double m, x, x0 = 0, h = 0.5;
x
= inicio + h;
Pseudocodigo Metodo 1
Pseudo codigo raices multiples 1
Datos de entrada: funcin, derivada, punto inicio, multiplicidad, n max, error absoluto
Datos de salida: raz, numero iteraciones
Lea: f, fp, xi, n, tol, m
fx=f(xi)
fpx=fp(xi)
i=1
error=tol+1
mientras i<=n y fx~=0 y error>tol y fpx~=0
x=xi-m*(fx/fpx)
fx=f(x)
fpx=fp(x)
error=abs(x-xi)
xi=x
i=i+1
fin mientras
si fx=0
Escriba La raz es: xi
Sino si error<tol
Escriba xi es una aproximacin a la raz con un error mximo de tol
Sino si fpx=0
Escriba xi es una posible raz mltiple.'
sino
Escriba El mtodo fallo en n iteraciones
Fin si
Pseudocodigo metodo 2
Pseudocodigo raices multiples 1
Datos entrada :
mximo
denominador=(fpx^2-fx*fppx)
i=1
error=tol+1
mientras i<=n y fx~=0 y error>tol y denominador~=0
x=xi-(fx*fpx)/denominador
fx=f(x)
fpx=fp(x)
fppx=fpp(x)
denominador=(fpx^2-fx*fppx)
error=abs(x-xi)
xi=x
i=i+1
fin mientras
si fx=0
Escriba La raz es: xi
Sino si error<tol
Escriba xi es una aproximacin a la raz con un error mximo de tol
sino
Escriba El mtodo fallo en n iteraciones
fin si
Codigos Matlab/Octave
function raicesmultiplesb
f=input('ingrese la funcion: ','s');
f=inline(f);
fp=input('ingrese la dervidad de la funcion: ','s');
fp=inline(fp);
m=input('Ingrese la multiplicidad de la raiz: ');
xi=input('escriba el punto de inicio: ');
tol=input('Ingrese el error maximo admisible: ');
n=input('Ingrese el numero maximo de iteraciones permitidas: ');
fx=f(xi);
fpx=fp(xi);
i=1;
error=tol+1;
fprintf('\n n
x
f(x)
fp(x)
\n')
while i<=n && fx~=0 && error>tol && fpx~=0
x=xi-m*(fx/fpx);
fx=f(x);
fpx=fp(x);
fprintf('%1.0f %10.10f %10.10f %10.10f \n',i,x,f(x),fp(x))
error=abs(x-xi);
xi=x;
i=i+1;
end
if fx==0
fprintf('\n La raz es: %1.10f \n\n',xi)
else if error<tol
function raicesmultiples
f=input('ingrese la funcion: ','s');
f=inline(f);
fp=input('ingrese la dervidad de la funcion: ','s');
fp=inline(fp);
fpp=input('ingrese la segunda dervidad de la funcion: ','s');
fpp=inline(fpp);
xi=input('escriba el punto de inicio: ');
tol=input('Ingrese el error maximo admisible: ');
n=input('Ingrese el numero maximo de iteraciones permitidas: ');
fx=f(xi);
fpx=fp(xi);
fppx=fpp(xi);
denominador=(fpx^2-fx*fppx);
i=1;
error=tol+1;
fprintf('\n n
x
f(x)
\n')
while i<=n && fx~=0 && error>tol && denominador~=0
x=xi-(fx*fpx)/denominador;
fx=f(x);
fpx=fp(x);
fppx=fpp(x);
denominador=(fpx^2-fx*fppx);
fprintf('%1.0f %10.10f %10.10f %10.10f \n',i,x,f(x))
error=abs(x-xi);
xi=x;
i=i+1;
end
if fx==0
fprintf('\n La raz es: %1.10f \n\n',xi)
else if error<tol
fprintf('\n %1.10f es una aproximacion a la raiz con un error maximo de %1.10f
\n',xi,tol)
else
fprintf('\n El metodo fallo en %0.0f iteraciones \n\n',n)
end
end