0% encontró este documento útil (0 votos)
57 vistas4 páginas

MNP02

El documento describe un método para resolver ecuaciones mediante el método de punto fijo. Explica cómo implementar una función en Python llamada PuntoFijo que resuelve ecuaciones iterativamente usando este método. También muestra un ejemplo numérico de aplicar esta función para determinar los puntos de intersección de dos gráficas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
57 vistas4 páginas

MNP02

El documento describe un método para resolver ecuaciones mediante el método de punto fijo. Explica cómo implementar una función en Python llamada PuntoFijo que resuelve ecuaciones iterativamente usando este método. También muestra un ejemplo numérico de aplicar esta función para determinar los puntos de intersección de dos gráficas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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

También podría gustarte