Matlab - Metodo de punto fijo

 
Vista:

Metodo de punto fijo

Publicado por Gonzalo (17 intervenciones) el 05/10/2018 21:43:48
Hola, hice un programa en Matlab que recibe una funcion g(x) , esta funcion no es la funcion original sino que es la funcion f(x) manipulada algebraicamente. El programa debe encontrar las raices de una funcion a partir de un punto inicial que entra como argumento. Ejemplo, si tengo f(x) = x^2-x-2 , manipulandola encuentro g(x) = sqrt(x+2). El problema es que esta funcion me devuelve la raiz que corresponde al punto 2, pero no me da la raiz igual a -1 , que seria la otra raiz. He cambiado el punto de inicio pero igual devuelve solo la raiz = 2.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function PuntoFijo(g,tol,N,x)
i=1;
fprintf('1 \t x     \t       \t error \n')
fprintf('0 \t %f \n',x)
while i<=N
    a=x;
    x=g(a);
    error=abs(x-a);
    fprintf('%d \t %1.7f \t \t %f  \n', i ,x,error)
     if error<=tol
        i=N+1;
        break
     end
    i=i+1;
end
fprintf('La aproximacion es: %f con un error de: %f \n',x , error)
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Metodo de punto fijo

Publicado por Gonzalo (17 intervenciones) el 06/10/2018 03:50:02
Entonces tendría que estar cambiando la función g(x) por otra que me permita encontrar la raíz -1? Dicha g(x) estimo que podría ser x^2 - 2 si no me equivoco..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Metodo de punto fijo

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/10/2018 04:27:07
teorema-de-punto-fijo

La función g(x) que menciona no cumple el teorema de punto fijo.
Por lo tanto cuando apliques el programa de punto fijo, no vas a llegar a llegar a un resultado esperado.
Por lo tanto tendrías que buscar otro g(x) que cumpla el teorema de punto fijo, para que haya convergencia cuando uses el programa de punto fijo.

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Asesoría online Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Metodo de punto fijo

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/10/2018 05:04:48
1
g(x)=x^2-2,   tol=0.0000001;  N=500;    x=-2;

1
2
3
4
5
6
>> PuntoFijo5
  i 			 x 	 			 error
  0 	   -2.0000000
  1 	    2.0000000 	 	 4.000000
  2 	    2.0000000 	 	 0.000000
La aproximacion es: 2.000000 con un error de: 0.000000



1
g(x)=2/(x-1),   tol=0.0000001;  N=500;    x=-2;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
>> PuntoFijo5
  i 			 x 	 			 error
  0 	   -2.0000000
  1 	   -0.6666667 	 	 1.333333
  2 	   -1.2000000 	 	 0.533333
  3 	   -0.9090909 	 	 0.290909
  4 	   -1.0476190 	 	 0.138528
  5 	   -0.9767442 	 	 0.070875
  6 	   -1.0117647 	 	 0.035021
  7 	   -0.9941520 	 	 0.017613
  8 	   -1.0029326 	 	 0.008781
  9 	   -0.9985359 	 	 0.004397
 10 	   -1.0007326 	 	 0.002197
 11 	   -0.9996338 	 	 0.001099
 12 	   -1.0001831 	 	 0.000549
 13 	   -0.9999085 	 	 0.000275
 14 	   -1.0000458 	 	 0.000137
 15 	   -0.9999771 	 	 0.000069
 16 	   -1.0000114 	 	 0.000034
 17 	   -0.9999943 	 	 0.000017
 18 	   -1.0000029 	 	 0.000009
 19 	   -0.9999986 	 	 0.000004
 20 	   -1.0000007 	 	 0.000002
 21 	   -0.9999996 	 	 0.000001
 22 	   -1.0000002 	 	 0.000001
 23 	   -0.9999999 	 	 0.000000
 24 	   -1.0000000 	 	 0.000000
 25 	   -1.0000000 	 	 0.000000
La aproximacion es: -1.000000 con un error de: 0.000000


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Asesoría online Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Metodo de punto fijo

Publicado por Gonzalo (17 intervenciones) el 06/10/2018 05:19:30
Genial! Muchas gracias! El tema estaba en elegir correctamente la función g(x) !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Metodo de punto fijo

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 06/10/2018 15:25:13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
% Hola, hice un programa en Matlab que recibe una función g(x) ,
% esta función no es la función original sino que es la función 
% f(x) manipulada algebraica mente. 
% El programa debe encontrar las raíces de una función a 
% partir de un punto inicial que entra como argumento. 
% Ejemplo, si tengo f(x) = x^2-x-2 , manipulándola 
% encuentro g(x) = sqrt(x+2). El problema es que 
% esta función me devuelve la raíz que corresponde
% al punto 2, pero no me da la raíz igual a -1 , que 
% seria la otra raíz. He cambiado el punto de inicio
% pero igual devuelve solo la raíz = 2. 
 
 
 
function PuntoFijo5(g,tol,N,x)
%f(x)=x^2-x-2
% syms x,   g(x)=sqrt(x+2);  tol=0.0000001;  N=500;  x=-2;  PuntoFijo5(g,tol,N,x)
% syms x,    g(x)=2/(x-1);  tol=0.0000001;  N=500;   x=-2;  PuntoFijo5(g,tol,N,x)
i=1;
fprintf('  i \t\t\t x \t \t\t\t error \n')
fprintf('%3d \t %12.7f \t \t \n',i-1,x)
while i<=N
    a=x;
    x=double(g(a));
    error=abs(x-a);
    fprintf('%3d \t %12.7f \t \t %f \n', i ,x,error)
    if error<=tol
        break
    end
    i=i+1;
end
fprintf('La aproximacion es: %f con un error de: %f \n',x , error)
end

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
>> syms x,   g(x)=sqrt(x+2);  tol=0.0000001;  N=500;  x=-2;PuntoFijo5(g,tol,N,x)
  i 			 x 	 			 error
  0 	   -2.0000000
  1 	    0.0000000 	 	 2.000000
  2 	    1.4142136 	 	 1.414214
  3 	    1.8477591 	 	 0.433546
  4 	    1.9615706 	 	 0.113811
  5 	    1.9903695 	 	 0.028799
  6 	    1.9975909 	 	 0.007221
  7 	    1.9993976 	 	 0.001807
  8 	    1.9998494 	 	 0.000452
  9 	    1.9999624 	 	 0.000113
 10 	    1.9999906 	 	 0.000028
 11 	    1.9999976 	 	 0.000007
 12 	    1.9999994 	 	 0.000002
 13 	    1.9999999 	 	 0.000000
 14 	    2.0000000 	 	 0.000000
 15 	    2.0000000 	 	 0.000000
La aproximacion es: 2.000000 con un error de: 0.000000
 
 
 
 
>> syms x,    g(x)=2/(x-1);  tol=0.0000001;  N=500;   x=-2;  PuntoFijo5(g,tol,N,x)
  i 			 x 	 			 error
  0 	   -2.0000000
  1 	   -0.6666667 	 	 1.333333
  2 	   -1.2000000 	 	 0.533333
  3 	   -0.9090909 	 	 0.290909
  4 	   -1.0476190 	 	 0.138528
  5 	   -0.9767442 	 	 0.070875
  6 	   -1.0117647 	 	 0.035021
  7 	   -0.9941520 	 	 0.017613
  8 	   -1.0029326 	 	 0.008781
  9 	   -0.9985359 	 	 0.004397
 10 	   -1.0007326 	 	 0.002197
 11 	   -0.9996338 	 	 0.001099
 12 	   -1.0001831 	 	 0.000549
 13 	   -0.9999085 	 	 0.000275
 14 	   -1.0000458 	 	 0.000137
 15 	   -0.9999771 	 	 0.000069
 16 	   -1.0000114 	 	 0.000034
 17 	   -0.9999943 	 	 0.000017
 18 	   -1.0000029 	 	 0.000009
 19 	   -0.9999986 	 	 0.000004
 20 	   -1.0000007 	 	 0.000002
 21 	   -0.9999996 	 	 0.000001
 22 	   -1.0000002 	 	 0.000001
 23 	   -0.9999999 	 	 0.000000
 24 	   -1.0000000 	 	 0.000000
 25 	   -1.0000000 	 	 0.000000
La aproximacion es: -1.000000 con un error de: 0.000000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar