Sei sulla pagina 1di 4

2/7/2019

function y = PuntoFijo(G,x0,tol,n)
% function PuntoFijo(G,x0,tol,n): Metodo de iteracion de punto fijo.
% Resuelve la ecuacion f(x)=0, pero primero es necesario transformarla a la
% forma x = G(x), donde G(x) satisface las condiciones del teorema de punto
fijo.
% DATOS
% G : funcion definida en linea o mediante un archivo function. Si G se
% define en linea se invoca como G, si esta definida como un archivo
% function se invoca como 'G'.
% x0 : aproximacion inicial.
% tol : tolerancia propuesta.
% n : numero maximo de iteraciones propuesto.
% RESULTADO
% y : aproximacion a la raiz segun la tolerancia propuesta.
iter = 0;
u = feval(G,x0);
err = abs(u - x0);
disp('_______________________________________________________')
disp(' ')
disp('iter x G(x) |xn+1-xn|')
disp('_______________________________________________________')
fprintf('%2.0f %12.6f %12.6f\n',iter,x0,u)

while (err > tol) & (iter <= n)


iter = iter +1;
x0 = u;
u = feval(G,x0);
err = abs(u - x0);
fprintf('%2.0f %12.6f %12.6f %12.8f\n',iter,x0,u,err)
end
if (iter > n)
disp(' ')
disp('¡Fallo el metodo!.')
disp(' ')
disp('Pruebe con un numero mayor de iteraciones.')
disp(' ')
disp('Si |xn+1-xn| no tiende a cero, pruebe otra funcion G(x)')
return;
else
y = x0;
end
Guardar el archivo con el nombre PuntoFijo en la carpeta de su elección.

1
2/7/2019

Determinar los puntos de intersección de las gráficas de y  e x 1 y y  ln x  2 .


>> fplot('exp(x-1)',[0.1 2.1])
>> grid on
>> hold on
>> fplot('log(x)+2',[0.1 2.1])
Solución. Para la intersección se requiere que e x1  ln x  2 ;
es decir, resolver la ecuación e x1  ln x  2  0 .
Podemos intentar las siguientes opciones para la iteración de
punto fijo:
e x 1  ln x  2  x  x  G1  x   e x 1  ln x  2  x
x  ln  e ln x  2  =1+ln  ln x  2   G2  x   1+ln  ln x  2 
x 1 x 1
x  ee 2
 G3  x   ee 2

Probamos con G1  x  definiéndola en línea:


>> G1=inline('x+exp(x-1)-log(x)-2')

G1 =
Inline function:
G1(x) = x+exp(x-1)-log(x)-2

>> r1 = PuntoFijo(G1,0.1,0.000001,100)
76 -513.487785 -521.729022 8.81813628
____________________________________________ 36 -200.575748 -207.877001 7.94410783 77 -521.729022 -529.986171 8.83402371
37 -207.877001 -215.213957 7.97951558 78 -529.986171 -538.259031 8.84774601
iter x G(x) |xn+1-xn| 38 -215.213957 -222.585643 8.00917013 79 -538.259031 -546.547373 8.86320466
____________________________________________ 39 -222.585643 -229.990963 8.04254407 80 -546.547373 -554.851002 8.87656761
0 0.100000 0.809155 40 -229.990963 -237.429050 8.07057386 81 -554.851002 -563.169703 8.89161984
1 0.809155 -0.152820 0.96197446 41 -237.429050 -244.898926 8.10213288 82 -563.169703 -571.503293 8.90464177
2 -0.152820 0.041422 3.14759181 42 -244.898926 -252.399813 8.12870637 83 -571.503293 -579.851564 8.91930825
3 0.041422 -3.486833 3.85677784 43 -252.399813 -259.930834 8.15863595 84 -579.851564 -588.214344 8.93200610
4 -3.486833 -6.829781 4.29960035 44 -259.930834 -267.491286 8.18389671 85 -588.214344 -596.591436 8.94630598
5 -6.829781 -10.764167 4.93477997 45 -267.491286 -275.080379 8.21235541 86 -596.591436 -604.982676 8.95869548
6 -10.764167 -15.155084 5.30137368 46 -275.080379 -282.697475 8.23642680 87 -604.982676 -613.387877 8.97264649
7 -15.155084 -19.876104 5.63052908 47 -282.697475 -290.341857 8.26355120 88 -613.387877 -621.806882 8.98474225
8 -19.876104 -24.870443 5.84860308 48 -290.341857 -298.012946 8.28654000 89 -621.806882 -630.239512 8.99836090
9 -24.870443 -30.085077 6.06543411 49 -298.012946 -305.710088 8.31244856 90 -630.239512 -638.685619 9.01017650
10 -30.085077 -35.491336 6.21951192 50 -305.710088 -313.432752 8.33444780 91 -638.685619 -647.145032 9.02347814
11 -35.491336 -41.061073 6.37998362 51 -313.432752 -321.180341 8.35924394 92 -647.145032 -655.617609 9.03502626
12 -41.061073 -46.777376 6.49885501 52 -321.180341 -328.952368 8.38033515 93 -655.617609 -664.103187 9.04802522
13 -46.777376 -52.623025 6.62582060 53 -328.952368 -336.748285 8.40410969 94 -664.103187 -672.601631 9.05931768
14 -52.623025 -58.586955 6.72249747 54 -336.748285 -344.567643 8.42436475 95 -672.601631 -681.112785 9.07202733
15 -58.586955 -64.657621 6.82735459 55 -344.567643 -352.409937 8.44719786 96 -681.112785 -689.636519 9.08307519
16 -64.657621 -70.827253 6.90878359 56 -352.409937 -360.274752 8.46668043 97 -689.636519 -698.172684 9.09550804
17 -70.827253 -77.087599 6.99799733 57 -360.274752 -368.161622 8.48864323 98 -698.172684 -706.721156 9.10632168
18 -77.087599 -83.432917 7.06831386 58 -368.161622 -376.070163 8.50740998 99 -706.721156 -715.281793 9.11848944
19 -83.432917 -89.857032 7.14589217 59 -376.070163 -383.999941 8.52856585 100 -715.281793 -723.854475 9.12907857
20 -89.857032 -96.355533 7.20775409 60 -383.999941 -391.950601 8.54666746 101 -723.854475 -732.439066 9.14099223
21 -96.355533 -102.923630 7.27634819 61 -391.950601 -399.921740 8.56707313
22 -102.923630 -109.557834 7.33156368 62 -399.921740 -407.913025 8.58455505 ¡Fallo el metodo!.
23 -109.557834 -116.254327 7.39301616 63 -407.913025 -415.924081 8.60426150
24 -116.254327 -123.010279 7.44287048 64 -415.924081 -423.954598 8.62116471 Pruebe con un numero mayor de iteraciones.
25 -123.010279 -129.822578 7.49851269 65 -423.954598 -432.004227 8.64021789
26 -129.822578 -136.688886 7.54395182 66 -432.004227 -440.072676 8.65657942 Si |xn+1-xn| no tiende a cero, pruebe otra funcion
27 -136.688886 -143.606618 7.59477642 67 -440.072676 -448.159618 8.67502093 G(x)
28 -143.606618 -150.573810 7.63651668 68 -448.159618 -456.264780 8.69087437
29 -150.573810 -157.588284 7.68328315 69 -456.264780 -464.387855 8.70874196 Error in PuntoFijo (line 15)
30 -157.588284 -164.648366 7.72187989 70 -464.387855 -472.528588 8.72411789 iter = 0;
31 -164.648366 -171.752194 7.76518210 71 -472.528588 -480.686688 8.74144594
32 -171.752194 -178.898328 7.80107450 72 -480.686688 -488.861915 8.75637224 Output argument "y" (and maybe others) not assigned
33 -178.898328 -186.085160 7.84138541 73 -488.861915 -497.053996 8.77319214 during call to "PuntoFijo".
34 -186.085160 -193.311434 7.87492678 74 -497.053996 -505.262705 8.78769432
35 -193.311434 -200.575748 7.91262910 75 -505.262705 -513.487785 8.80403480

2
2/7/2019

Probemos con G2  x  : >> r2 = PuntoFijo(G2,0.2,0.000001,100)


______________________________________________
>> G2=inline('1+log(log(x)+2)')
iter x G(x) |xn+1-xn|
______________________________________________
G2 = 0 0.200000 0.059832
Inline function: 1 0.059832 0.796929 3.22690511
G2(x) = 1+log(log(x)+2 2 0.796929 2.235533 3.10094712
3 2.235533 2.038587 0.38659754
4 2.038587 1.998013 0.06492585
5 1.998013 1.990349 0.01190109
6 1.990349 1.988913 0.00221834
7 1.988913 1.988644 0.00041480
8 1.988644 1.988594 0.00007761
9 1.988594 1.988585 0.00001452
10 1.988585 1.988583 0.00000272
11 1.988583 1.988582 0.00000051

>> format long r2 =


>> r2 1.9886 + 0.0000i

r2 =
1.988582778854200 + 0.000000476263453i

Probamos la misma G2  x  para buscar la otra intersección:


>> format short
>> r2b = PuntoFijo(G2,2.0,0.000001,100)
____________________________________________

iter x G(x) |xn+1-xn|


____________________________________________
0 2.000000 1.990710
1 1.990710 1.988980 0.00173018
2 1.988980 1.988657 0.00032347
3 1.988657 1.988596 0.00006052
4 1.988596 1.988585 0.00001132
5 1.988585 1.988583 0.00000212
6 1.988583 1.988582 0.00000040

r2b =
1.9886

Probamos la tercera función G3  x  para determinar la raíz faltante, pero ahora definámosla en un archivo
function:

3
2/7/2019

Abrir nueva pestaña en el editor para crear el archivo y guardar con el nombre G3 en la misma carpeta donde se
guardó PuntoFijo.
function G = G3(x)
G = exp(exp(x-1)-2);
Ahora ejecutamos el programa:
>> r2c = PuntoFijo('G3',0.2,0.000001,100)
_____________________________________________

iter x G(x) |xn+1-xn|


_____________________________________________
0 0.200000 0.212106
1 0.212106 0.213270 0.00116392
2 0.213270 0.213383 0.00011299
3 0.213383 0.213393 0.00001098
4 0.213393 0.213395 0.00000107
5 0.213395 0.213395 0.00000010

r2c =
0.2134 >> format long
>> r2c

r2c =
0.213394551275038

Potrebbero piacerti anche