Matlab - Ayuda con Metodo Jacobi Octave

 
Vista:
Imágen de perfil de Geraldine
Val: 4
Ha aumentado su posición en 7 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con Metodo Jacobi Octave

Publicado por Geraldine (2 intervenciones) el 26/09/2019 17:42:24
Buenas tardes, Tengo un problema con 2 codigos que no se quieren ejecutar en octave:

https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxwbjIwMTExfGd4OmE3NjhmZDc0Y2VmOGIyOQ

https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxwbjIwMTExfGd4OmU5OWU3ZGQ0OGQ3MDEyYQ

Por algun motivo me da el siguiente error:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
METODO DE JACOBI
 
Ingrese la matriz de coeficiente a:12
Ingrese la matriz de coeficiente b:2
Ingrese el vector con las aproximacimaciones Iniciales:15
Ingrese el número máximo de iteraciones:3
Ingrese la tolerancia:2
condicional=
 1
La matriz de transicion de jacobi:
0
El vector constante es:   1.666666666666667e-01
error: x(2): out of bound 1
error: called from
    metodo_jacobi at line 47 column 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
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
57
58
59
60
61
62
63
64
65
66
clear all
clc
format long
 
fprintf('METODO DE JACOBI\n\n');
 
%Ingresamos las variables a calcular:
a=input('Ingrese la matriz de coeficiente a:');
b=input('Ingrese la matriz de coeficiente b:');
x=input('Ingrese el vector con las aproximacimaciones Iniciales:');
iter=input('Ingrese el número máximo de iteraciones:');
total=input('Ingrese la tolerancia:');
 
%Se calcula el condicional de la matriz de coeficientes
cond=norm(a)*norm(a^-1);
disp('condicional=');
disp(cond);
 
%Se calcula el determinante de la matriz de coeficientes
determinante=det(a);
if determinante==0;
disp('El determinante es cero, el problema no tiene solución única')
return
end
 
n=length(b);%numero de elementos del vector b
d=diag(diag(a)); %obtencion de la matriz diagonal
l=d-tril(a); %obtencion de la matriz diagonal superior L
u=d-triu(a);%obtencion de la matriz diagonal inferior u
 
fprintf('La matriz de transicion de jacobi:\n');
T=d^-1*(l+u); % matriz de transicion de jacobi
disp(T);
re=max(abs(eig(T))); %calculo del radio espectral
 
if re>1
disp('Radio Espectral mayor que 1');
disp('el método no converge');
return
end
 
fprintf('El vector constante es:');
C=d^-1*b; %vector constante C, para el metodo
disp(C);
i=0;
err=total+1;
z=[i,x(1),x(2),x(3),err]; %vector que me permite graficar la tabla
 
while err>total & i<iter
xi=T*x+C;
%disp(xi)
 
err=norm(xi-x); %norma 2
%err=max(abs(xi-x)); %norma 1
%err=norm(xi-x)/norm(xi); %norma relativa
x=xi;
i=i+1;
z(i,1)=i;
z(i,2)=x(1);
z(i,3)=x(2);
z(i,4)=x(3);
z(i,5)=err;
end
 
fprintf('TABLA:\n\n n x1 x2 x3 Error\n\n ');
disp(z)%impresión de la tabla.

SI ueden ayudarme a conseguir el error seria maravilloso.
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda con Metodo Jacobi Octave

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/09/2019 18:12:56
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
57
58
59
60
61
62
63
clear
clc
format long
fprintf('METODO DE JACOBI\n\n');
 %Ingresamos las variables a calcular:
a=input('Ingrese la matriz de coeficiente a:');
b=input('Ingrese la matriz de coeficiente b:');
x=input('Ingrese el vector con las aproximacimaciones Iniciales:');
iter=input('Ingrese el número máximo de iteraciones:');
total=input('Ingrese la tolerancia:');
 
%Se calcula el condicional de la matriz de coeficientes
cond=norm(a)*norm(a^-1);
disp('condicional=');
disp(cond);
 
%Se calcula el determinante de la matriz de coeficientes
determinante=det(a);
if determinante==0
disp('El determinante es cero, el problema no tiene solución única')
return
end
 
n=length(b);%numero de elementos del vector b
d=diag(diag(a)); %obtencion de la matriz diagonal
l=d-tril(a); %obtencion de la matriz diagonal superior L
u=d-triu(a);%obtencion de la matriz diagonal inferior u
 
fprintf('La matriz de transicion de jacobi:\n');
T=d^-1*(l+u); % matriz de transicion de jacobi
disp(T);
re=max(abs(eig(T))); %calculo del radio espectral
 
if re>1
disp('Radio Espectral mayor que 1');
disp('el método no converge');
return
end
 
fprintf('El vector constante es:');
C=d^-1*b; %vector constante C, para el metodo
disp(C);
i=0;
err=total+1;
z=[i,x' ,err]; %vector que me permite graficar la tabla
 
while err>total & i<iter
xi=T*x+C;
%disp(xi)
 
err=norm(xi-x); %norma 2
%err=max(abs(xi-x)); %norma 1
%err=norm(xi-x)/norm(xi); %norma relativa
x=xi;
i=i+1;
z(i,1)=i;
for u=1:length(x)
    z(i,u+1)=x(u);
end
z(i,u+2)=err;
end
dips(z)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
METODO DE JACOBI
 
Ingrese la matriz de coeficiente a:12
Ingrese la matriz de coeficiente b:2
Ingrese el vector con las aproximacimaciones Iniciales:15
Ingrese el número máximo de iteraciones:2
Ingrese la tolerancia:2
condicional=
     1
 
La matriz de transicion de jacobi:
     0
 
El vector constante es:   0.166666666666667
z=
   1.000000000000000   0.166666666666667  14.833333333333334
   2.000000000000000   0.166666666666667                   0

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en 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