Can someone please help me stop "Index exceeds array bounds." in iteration? Any help is highly appreciated.

1 visualización (últimos 30 días)
clc
A = [4 -1 -3;-2 6 1;-1 1 7];
b=[3;9;-6];
D=diag(diag(A))
[L,U]=lu(A)
Mj = D\(U+L)
Mj(:,3)=[];
Mj(:,2)=[];
Vj =D\b
x1=zeros;
x=zeros;
for n = 2:8
x = Mj*('the previous x value')+ Vj;
end
x

Respuesta aceptada

Clayton Gotberg
Clayton Gotberg el 18 de Abr. de 2021
Editada: Clayton Gotberg el 18 de Abr. de 2021
You're asking for elements in x1 that don't exist. If we look only at the last loop n == 8 and you are asking for x1(7), but x1 is defined just before as being a 3x1 matrix of zeros.
I also want to point out that x1 is always zero in the code you posted here, so x will always equal Vj. Additionally, x is being overwritten on every loop instead of the value in each loop being saved.
  2 comentarios
Yunusah Abdulai
Yunusah Abdulai el 18 de Abr. de 2021
Editada: Yunusah Abdulai el 18 de Abr. de 2021
Thank you. I had noticed. I still have a problem in the iteration. please help me
clc
A = [4 -1 -3;-2 6 1;-1 1 7];
b=[3;9;-6];
D=diag(diag(A))
[L,U]=lu(A)
Mj = D\(U+L)
Mj(:,3)=[];
Mj(:,2)=[];
Vj =D\b
x=zeros;
for n = 2:8
x = Mj*('the previous x value')+ Vj;
end
x
Clayton Gotberg
Clayton Gotberg el 18 de Abr. de 2021
The previous value of x is just x. When programming, you are allowed to change the value of a variable using a reference to itself:
x = 5; % Define an initial value for x
x = x+5: % Define a new value for x: x = x (which we defined as 5) + 5
% Now, x == 10

Iniciar sesión para comentar.

Más respuestas (1)

the cyclist
the cyclist el 18 de Abr. de 2021
In your for loop, when n==5, your code tries to execute
x1(n-1)
which is
x1(4)
But your vector x1 is length 3, so there is no 4th element to access. That's why you get that error.
  1 comentario
Yunusah Abdulai
Yunusah Abdulai el 18 de Abr. de 2021
Editada: Yunusah Abdulai el 18 de Abr. de 2021
I edited the the code and i have this but i still have a problem with the iteration
clc
A = [4 -1 -3;-2 6 1;-1 1 7];
b=[3;9;-6];
D=diag(diag(A))
[L,U]=lu(A)
Mj = D\(U+L)
Mj(:,3)=[];
Mj(:,2)=[];
Vj =D\b
x1=zeros;
x=zeros;
for n = 2:8
x = Mj*('the previous x value')+ Vj;
end
x

Iniciar sesión para comentar.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by