Matlab - Graficar (plotear) los resultados de cada iteración

   
Vista:

Graficar (plotear) los resultados de cada iteración

Publicado por Toni (2 intervenciones) el 09/12/2014 23:18:46
¡Hola! Tengo este código de Jacobi que me calcula por ese método las soluciones de una ecuación lineal. Y me gustaría poder graficar (plotear) las soluciones del sistema en cada iteración que hace.

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
53
54
55
56
function [xs1]=jacobicompleto(A,b,x0,tol)
n=size(A,1);
xs1=zeros(n,1);
 
D=diag(diag(A));
U=A-tril(A);
L=A-triu(A);
f=D^-1*b;
H=-D^-1*(L+U);
 
%calculamos la primera iteración
xs1=f+H*x0;
it=1;
disp('      x1        x2        x3     ||xs+1-xs||       it')
fprintf('%10.5f',xs1)
fprintf('%11.5f %10.1i\n',norm(xs1-x0),it)
while norm(xs1-x0)>tol
    it=it+1;
    x0=xs1;
    xs1=f+H*xs1;
fprintf('%10.5f',xs1)
fprintf('%11.5f %10.1i\n',norm(xs1-x0),it)
end
 
Y lo mismo con gauss seidel:
function [xs1]=gseidel(A,b,xs,tol)
n=size(A,1);
xs1=zeros(n,1);
 
D=diag(diag(A));
U=A-tril(A);
L=A-triu(A);
f=(D+L)^(-1)*b;
H=-(D+L)^(-1)*U;
%calculamos la primera iteración
xs1=f+H*xs;
it=1;
disp('       x1        x2        x3      |xs+1-xs|       it')
fprintf('%10.5f',xs1)
fprintf('%11.5f %10.1i\n',norm(xs1-xs),it)
while norm(xs1-xs)>tol
    it=it+1;
    xs=xs1;
    xs1=b;
    for i=1:n
        for j=1:i-1
            xs1(i)=xs1(i)-A(i,j)*xs1(j);
        end
        for j=i+1:n
            xs1(i)=xs1(i)-A(i,j)*xs(j);
        end
        xs1(i)=xs1(i)/A(i,i);
    end
fprintf('%10.5f',xs1)
fprintf('%11.5f %10.1i\n',norm(xs1-xs),it)
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