You are on page 1of 12

Resolucin de ecuaciones en una variable.

Ecuaciones de la forma f(x)=0

Siendo f una funcin real dada de variable real.

Mtodo del punto fijo.

Sea : . Se dice que es punto fijo de g, si se cumple que g(x*)= x* o


sea, si x* es solucin de la ecuacin de punto fijo g(x)=x. Geomtricamente, los puntos fijos de
una funcin son los puntos de corte de la funcin y=g(x) con la recta y=x.

Se denomina mtodo del punto fijo a la construccin de una sucesin mediante el siguiente
procedimiento:

0 dado

+1 = ( ) ; datos iterados

Se espera que la sucesin xn converja a x, con x punto fijo de g

La clave del mtodo de punto fijo es transformar la ecuacin f(x)=0 en otra equivalente de
punto fijo, g(x)=x y construir la sucesin de iterados +1 = ( ) a partir de una estimacin
inicial x1 de la solucin.

Es sencillo comprobar que, si la sucesin converge y la funcin de iteracin g es continua,


entonces el lmite es un punto fijo de g y, por la equivalencia, la solucin de la ecuacin f(x)=0.
function [sol,x,incr,n]=pfijo(g,x1,tol,maxiter)
% Ejemplo: [sol,x]=puntofijo('cos',0,0.001,100)
n=1;
x=x1;
incr=tol+1;
while incr>tol & n<=maxiter
x(n+1)=feval(g,x(n));
incr=abs(x(n+1)-x(n));
n=n+1;
end
if incr>tol
sol=[];
disp('Insuficientes iteraciones')
else
sol=x(end);
end

Convergencia del mtodo de punto fijo

Sea g: [a, b] continuamente derivable tal que g(x) [, ] para todo x [, ]. Adems,
supongamos que | ()| < < 1. Entonces, la iteracin de punto fijo +1 = ( ), n=1, 2,
, converge al nico punto fijo para cualquier punto de partida 1 [, ]. Adems, podemos
acotar el error de la iteracin n-sima por

| | | 2 |
1 1
para 2.
En la prctica, si la derivada de g es continua, sucede que:

Si | ( )| > 1 los iterados no convergen a .


Si | ( )| < 1 los iterados convergen a con tasa de convergencia = | ( )|.
Si | ( )| = 0 los iterados convergen cuadrticamente a .

El mtodo de punto fijo es un mtodo iteracin abierto. Slo requiere uno o un par de valores
iniciales para empezar a iterar. Si un mtodo abierto converge a la solucin, usualmente lo hace
con mayor rapidez que los mtodos cerrados.

Procedimiento:

- Consiste en reordenar los trminos en la funcin, primero la funcin igualamos a cero para que
la variable x quede a la izquierda, de tal forma que encontremos una funcin g(x).

x=g(x) ; la forma como se realiza la iteracin es xi+1=g(xi)

Existen dos caminos para realizar este mtodo:

Primero:

() = 2 2 + 3

Debemos igualar la ecuacin a cero: () = 2 2 + 3 = 0


2 +3
ahora despejamos x de la ecuacin = 2
, este despeje no es el nico:
3
podra ser tambin = 2 3 o =
2

Segundo: funcin trigonomtrica

() = cos()

cos() = 0 , luego se aumenta x a cada lado

x = cos() +
Existe un criterio de convergencia nos dice, que el valor absoluto de la primera derivada de g
debe ser menor a 1.

(( ()) < 1 evaluada en 0 , entonces podemos continuar con el mtodo porque ser
convergente.
Ejemplo en Excel: La funcin a trabajar ser

MTODO DE PUNTO FIJO


# xi Error Si Error<tol tol 0.0001
0 0
1 1 1 0 f(x) exp(-x)-x
2 0.36787944 0.63212056 0 exp(-x)-x=0
3 0.69220063 0.32432119 0 exp(-x)=x
4 0.5004735 0.19172713 0 g(x) exp(-x)
5 0.60624354 0.10577003 0
6 0.54539579 0.06084775 0 f(x) 0.00003800394
7 0.57961234 0.03421655 0 f(x) 3.80039E-05
8 0.56011546 0.01949687 0
9 0.57114312 0.01102765 0
10 0.56487935 0.00626377 0
11 0.56842873 0.00354938 0
12 0.56641473 0.00201399 0
13 0.56755664 0.0011419 0
14 0.56690891 0.00064773 0
15 0.56727623 0.00036732 0
16 0.5670679 0.00020833 0
17 0.56718605 0.00011815 0
18 0.56711904 6.701E-05 1
0: si es falso ; 1: si es verdadero

* En # 18 para comprobar si es el valor correcto u ptimo, pues evaluamos en nuestra funcin

original f(x) de la celda I9 o la I10.

El valor encontrado es cercano a cero, por lo tanto, es correcta nuestra aproximacin.

Ejemplo en MATLAB: La funcin a trabajar ser


function []=punto_fijo(f,g,x0,tol)
% Vamos a pedir f(x), g(x), el valor inicial y la tolerancia.
global x;% Definimos x como variable global para poder usar en todo el
programa.
syms x; % permite cambiar el valor y evaluar as en cada funcin.
fprintf('La funcin que has introducido es: ');
display(f);
fprintf('La funcin para la aproximacin que escogiste es: ');
display(g);
x=x0; % se muestra la primera iteracin.
x1=eval(g); % se evala la funcin en g y se guarda en x1.
c=0; % contador de iteraciones est en cero.
fprintf(' #--------x0 --------- error\n'); % es la cabecera de cada
columna.
fprintf(' %5d--------%5d --------- \n',c,x0); % imprime la primera
iteracin.
while (tol<abs(x1-x0))% se realiza las dems iteraciones
x0=x1; % se guarda el valor actual en x0 para sustituirlo y evaluarlo
en g(x)
x=x0; % se sigue iterando
x1=eval(g); % se sigue iterando y guardamos en x1 para la siguiente
iteracin.
c=c+1; % se aumenta al contador e imprimimos.
fprintf(' %5d--------%12f --------- %5d\n',c,x0,abs(x1-x0));
% El proceso termina cuando la tolerancia ya no sea menor al valor
absoluto del
% error.
end
x=x1;
fx=eval(f); % Una vez terminado se confirma que la solucin que
tenemos sea
% prximo a cero en f(x); para eso evaluamos eval(f) e imprimimos fx.
fprintf('f se aproxime a 0 %12f\n',fx);
ezplot(f); % se grafica
grid on;
end

Ahora vamos a empezar en Command Window:


>> syms x % Para calcular en forma simblica
>> f=exp(-x)-x
f =
exp(-x) - x
>> g=exp(-x)
g =
exp(-x)
>> punto_fijo(f,g,0,0.0001)% Se llama a la funcin.

En la grfica ampliando podemos ver el valor de f:


Efectivamente se ha hallado la mayor aproximacin

Por ejemplo, con otra funcin:


>> h=x^3+4*x^2-10;
>> k=sqrt(10/(x+4));
>> punto_fijo(h,k,2,0.0001)

Ha sacado el resultado en 5 iteraciones que el valor ptimo es 1.365210 , es el mejor punto


que nos lleva a la raz de la ecuacin.
Programacin en MATLAB:
function met_puntofijo(g,x0,tol)
g=inline(g);
fprintf('\n it. x g(x) \n')
i=0;
fprintf('%3.0f %10.10f %10.10f \n',i,x0,g(x0))
x1=g(x0);
while abs(x0-x1)>tol
i=i+1;
fprintf('%3.0f %10.10f %10.10f \n',i,x1,g(x1))
x0=x1;
x1=g(x0);
end
fprintf('\n La aproximacin del punto fijo es %4.10f \n\n',x1)

Verifiquemos la representacin de g(x) grficamente.

Para graficar utilizamos las siguientes instrucciones:

Ahora en Command Window:

Caso a)

>> fplot('1.14-2*log10*(0.0025/0.1+9.35/3.1167*10^(-4))',[-2 2 -2 2])


>> grid on
>> hold on
>> fplot('1*x',[-2 2 -2 2])

% Se utilizar punto inicial =1,% tolerancia=0.000001


>> met_puntofijo('1.14-2*log10*((0.0025/0.1)+(9.35/3.1167*10^(-
4)))',1,0.000001)

it. x g(x)
0 1.0000000000 1.0894000064
1 1.0894000064 1.0848763667
2 1.0848763667 1.0851052628
3 1.0851052628 1.0850936807
4 1.0850936807 1.0850942667

La aproximacin del punto fijo es 1.0850942667


1
Luego el valor para f lo obtenemos de: = 1.0850942667

>> f=sqrt(1.0850942667)^-2
f =
0.9216
Lo mismo hacemos para resolver el caso b).

Mtodo del Punto Fijo


Ejemplo
Usar el mtodo de iteracin del punto fijo para aproximar la raz de () = 2 5 , comenzando
con 0 = 0.
Solucin
2
Si despejamos la x del trmino lineal, vemos que la ecuacin equivale a =
5
2
de donde, () =
5
2
En este caso, tenemos que () = . Un vistazo a la grfica, nos convence que | ()| < 1, para
5
[1,1], lo que es suficiente para deducir que el mtodo s converge a la raz buscada.
Aplicando la frmula iterativa, tenemos:1 = (0 ) = 0.2 con un error aproximado del 100%.
Aplicando nuevamente la frmula iterativa, tenemos: 2 = (1 ) = 0.155746 con un error
aproximado igual al 28.41%.
En este ejemplo, el mtodo solo necesita de 5 iteraciones para reducir el error menor al 1%.
De donde vemos que la aproximacin buscada es: 5 = 0.164410.

Mtodo del Punto Fijo en MATLAB:


- Escribe el nombre del mtodo "puntofijo" y le damos enter.
- El programa te muestra el nombre del mtodo "Mtodo del Punto Fijo y los valores a ingresar:
Ingresas la funcin.
Ingresas el punto inicial.
Numero de iteraciones
- Luego de ingresado los valores requeridos solo tenemos que dar un enter para que corra el
programa y obtenga la raz que se desea y la grfica de funcin.

function puntofij
global fun
fprintf('Mtod de Punto Fijo:\n');
fun=input('Ingrese a la funcin:\n','s');
x0=input('Ingrese el punto inicial:\n');
n=input('Ingrese el nmero de iteraciones:\n');
it=0;
fprintf(' it x0 x1 |x0-x1|');
while(it<n)
it=it+1;
x=x0;
x1=eval(fun);
fprintf('\n%3.0f%15.10f%15.10f%15.10f\n',it,x0,x1,abs(x1-x0));
x0=x1;
end
fprintf('\n El punto fijo aproximado es=%10.6f\n',x1);
clf
hold on
ezplot(fun)
legend('y=x','fun')
hold off
grid on

En Command Window:
>>puntofij
Mtod de Punto Fijo:
Ingrese a la funcin:
>> (x^2-exp(x))/5
Ingrese el punto inicial:
0
Ingrese el nmero de iteraciones:
10

El punto fijo aproximado es= -0.164299


Otro ejemplo en el mismo programa puntofij.

>> puntofij
Mtodo del Punto Fijo:
Ingrese a la funcin:
cos(x)/3
Ingrese el punto inicial:
pi/8
Ingrese el nmero de iteraciones:
5
En Command Window, contol de ejes de la grfica:
x=-4:0.1:4;
y=cos(x);
z=3*x;
t=zeros(size(x));
plot(x,y)
axis([-4 4 -2 2])
hold on
plot(x,z)
plot(x,t)
grid on

Una forma breve de clculo con la funcin solve:


>> solve(cos(x)-3*x)
o con el marcador @:
>> x=@(x)cos(x)-3*x;
>> fzero(x,pi/8)
ans =
0.3168

MTODO DE NEWTON-RAPSON
El mtodo de Newton-Rapson se debe inicializar en un valor de x cercano a una raz. El mtodo
asume que la funcin es aproximadamente lineal en ese valor y, por lo tanto, toma como una
mejor aproximacin a la raz en la interseccin de la lnea tangente a f(x) y su interseccin con
el eje x, como se muestra en la figura siguiente:

(())
De la figura podemos ver que: tan() = (()) =
()(+1)
(())
De donde tenemos la regla recursiva: ( + 1) = () (())
()
O lo que es lo mismo: ()
Tomando la idea de la condicin de convergencia de iteracin simple, la condicin para Newton-
()
Rapson es la siguiente:| ( )| <1
()
() ()
Que es equivalente a: | [ ()]2 | < 1

Solucin:
Programacin en MATLAB:
disp('Newton-Raphson')

syms x
a=input('Introduzca la funcin: ');
%xd=input('Introduzca la derivada de la funcin: ','s');
xi=input('Introduzca el valor de xi: ');
Es=input('Introduzca el valor del error lmite: ');
xd=diff(a);
derivada=inline(xd);
formula=inline(a);
Ea(1)=100;
i=1;
fxi=feval(formula,xi);
fdxi=feval(derivada,xi);
xi1=xi-(fxi/fdxi);
fprintf(' It xi Funcin de xi Derivada de xi Error
aproximada\n');
fprintf('%2d\t %11.6f\t %11.6f\t %11.6f\t %11.6f\n',i,xi,fxi,fdxi,Ea);
xi=xi1;
i=i+1;
while (Ea>Es)
fxi=feval(formula,xi);
fdxi=feval(derivada,xi);
xi1=xi-(fxi/fdxi);
Ea=abs(((xi1-xi)/xi1)*100);
fprintf('%2d\t %11.6f\t %11.6f\t %11.6f\t %11.6f\n',i,xi,fxi,fdxi,Ea);
xi=xi1;
i=i+1;
end
fprintf('\nRaiz= %f\n\n',xi)

Ahora en Command Window:

Aplicando el script anterior Newton-Raphson.m, obtenemos lo siguiente:


f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)
x= 3.5
Tolerancia= 0.0001
>> fplot('pi*sin(2*x)+exp(-x/2)*cos(x)',[-5 5 -5 5])
>> grid on

Los resultados son:


k= F(X)= X= dF(X)=
1 1.901253 3.500000 4.879230
2 -0.407304 3.110338 6.369840
3 0.000835 3.174280 6.378647

Raiz= 3.174280

Bibliografa:
Chapra. Mtodos numricos para ingenieros - 5ed. Pg. 142-148.

You might also like