MATLAB. Almacenar vectores en bucle while/Jacobi amortiguado
Publicado por Jonatan (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)
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
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.
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


0