Matlab - MATLAB. Almacenar vectores en bucle while/Jacobi amortiguado

   
Vista:

MATLAB. Almacenar vectores en bucle while/Jacobi amortiguado

Publicado por Jonatan fresquitos_fc@hotmail.com (1 intervención) el 04/09/2015 04:54:21
Hola,estoy realizando un método para resolver ecuaciones lineales por el método de Jacobi amortiguado por Matlab de manera que en vez de sacarme al final la solución de la última iteración me saque los valores de todas las iteraciones anteriores en una matriz por filas ó vectores separados.Los dos programas que utilizo son :

1)Jacobi normal(este me sirve para el segundo programa)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function [x]=jacobi11(A,b,x0)
%
% x=jacobi1(A,b,x0). Aplica UNA iteración del método iterativo de Jacobi
% al sistema de ecuaciones A . x = b, usando x0 como valor
% de la aproximación a la solución en la iteración anterior.
% Valores de entrada: A (matriz con los coeficientes del sistema)
% b (vector COLUMNA con los términos independientes del sistema)
% x0 (vector COLUMNA con la aproximación a la solución en la iteración anterior)
% Valores de salida: x (nueva aproximación a la solución)
%
L=A-triu(A);
U=A-tril(A);
D=diag(diag(A));
x=inv(D)*(b-(L+U)*x0);
end

2)Jacobi amortiguado final con A=[2 -1 0;2 3 -1;-5 0 2] , b=[4;-1;4], x0=[0;0;0] , tol =0.01, w=0.5, maxit=400

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function [x,error]=jacobi_amor(A,b,x0,tol,w,maxit)
x=jacobi11(A,b,x0);  %me saca los valores de x con una sola aproximación
error=norm(x-x0);
it=0; %número de iteración
format short
while error>tol
    if it<maxit
        x0=x;   %pongo como nueva aproximación inicial x0 los valores de x obtenidos en la it=0
    x=jacobi11(A,b,x0); %recurro al jacobi anterior
    x=(w*x)+(1-w)*x0;  %amortiguo la x del jacobi anterior
    error=norm(x-x0);  %defino el nuevo error
    it=it+1;
    fprintf('iteracion %d valor x=(%f, %f, %f) error relativo %f\n',it,x,error)
    end
end

El último programa sólo me saca la última x(que en realidad es un vector de 3 componentes) y quiero que me saque todas las iteraciones anteriores.
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

MATLAB. Almacenar vectores en bucle while/Jacobi amortiguado

Publicado por maicol (1 intervención) el 04/09/2015 07:48:35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function [x]=jacobi11(A,b,x0)
%
% x=jacobi1(A,b,x0). Aplica UNA iteración del método iterativo de Jacobi
% al sistema de ecuaciones A . x = b, usando x0 como valor
% de la aproximación a la solución en la iteración anterior.
% Valores de entrada: A (matriz con los coeficientes del sistema)
% b (vector COLUMNA con los términos independientes del sistema)
% x0 (vector COLUMNA con la aproximación a la solución en la iteración anterior)
% Valores de salida: x (nueva aproximación a la solución)
%
L=A-triu(A);
U=A-tril(A);
D=diag(diag(A));
x=inv(D)*(b-(L+U)*x0);
end
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