Matlab - Guardar datos de un ciclo while

 
Vista:
Imágen de perfil de Natus
Val: 14
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Guardar datos de un ciclo while

Publicado por Natus (3 intervenciones) el 24/02/2018 17:44:47
Buenos Dias compañeros, me encuentro en un problema, se trata del metodo Gauss-Seidel, como veran el codigo si compila y encuentra la solucion mi problema va en que yo deseo guardar los datos de cada iteracion y no solo la solucion, espero puedan ayudarme
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
%Datos:
A=[4 3 0; 3 4 -1; 0 -1 4];
b=[24;30;-24];
w=1.25;
tol=0.00001;
it=20;
 
%PROGRAMA 
 
function [x, error, iter,Navi] = GNavi(A,b,w,tol,c)
% Resolución por SOR (compacto)
if nargin<5, tol=sqrt(eps);
end
n=size(A,1);
x=zeros(n,1);
r = b - A*x;
error = norm(r);
iter=0;
if error<tol, return, end
b = w * b;
M = w * tril(A,-1) + diag(diag(A));
N = -w * triu(A,1) + (1.0 - w) * diag(diag(A));
k=0;
while error>=tol && k<c
x_1 = x;
x = M \ ( N*x + b );
error = norm(x - x_1)/norm(x);
iter = iter+1;
Navi=[iter x_1'];
disp(Navi)
end
end

NAVI1
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
Imágen de perfil de Natus
Val: 14
Ha disminuido 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Guardar datos de un ciclo while

Publicado por Natus (3 intervenciones) el 25/02/2018 00:33:19
Buenas Noches, la matriz Navi, solo da la respuesta, no todas las iteraciones
Navi=[10.0000 3.0000 4.0000 -5.0000] :( es un dilema que no eh podido resolver el como guardar todas las iteraciones, gracias
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

Guardar datos de un ciclo while

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/02/2018 00:50:01
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
function [x, error, iter,Navi] = GNavi(A,b,w,tol,it)
if nargin==0
A=[4 3 0; 3 4 -1; 0 -1 4];
b=[24;30;-24];
w=1.25;
tol=0.00001;
it=20;
end
% Resolución por SOR (compacto)
if nargin<5, tol=sqrt(eps);
end
 
n=size(A,1);
x=zeros(n,1);
r = b - A*x;
error = norm(r);
iter=0;
Navi=[];
if error<tol, return, end
b = w * b;
M = w * tril(A,-1) + diag(diag(A));
N = -w * triu(A,1) + (1.0 - w) * diag(diag(A));
k=0;
while error>=tol && k<it
x_1 = x;
x = M \ ( N*x + b );
error = norm(x - x_1)/norm(x);
iter = iter+1;
Navi=[Navi;iter x_1'];
end
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
>> [x, error, iter,Navi] = GNavi
 
x =
 
    3.0000
    4.0000
   -5.0000
 
 
error =
 
   1.4007e-08
 
 
iter =
 
    15
 
 
Navi =
 
    1.0000         0         0         0
    2.0000    7.5000    2.3438   -6.7676
    3.0000    3.4277    3.4607   -4.7266
    4.0000    3.3987    3.8465   -5.1163
    5.0000    3.0442    3.9606   -4.9832
    6.0000    3.0259    3.9908   -5.0071
    7.0000    3.0021    3.9981   -4.9988
    8.0000    3.0013    3.9997   -5.0004
    9.0000    3.0000    4.0000   -4.9999
   10.0000    3.0000    4.0000   -5.0000
   11.0000    3.0000    4.0000   -5.0000
   12.0000    3.0000    4.0000   -5.0000
   13.0000    3.0000    4.0000   -5.0000
   14.0000    3.0000    4.0000   -5.0000
   15.0000    3.0000    4.0000   -5.0000



Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con 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
1
Comentar