Index in position 2 exceeds array bounds. Index must not exceed 5

147 vues (au cours des 30 derniers jours)
hello evreyone I need some help :)
here is my code. the error is in this line, line 16%maksimum=max(abs(U(i:end,i))); I used this matrix to test the code [1 2 3 4 1;2 4 6 8 2;3 6 9 12 3;4 8 12 16 4;8 6 4 2 8;4 3 2 1 4], the code works for some matrices but not for all. I want it to work like matlab's lu() function :) but it gave me some errors like "Index in position 2 exceeds array bounds. Index must not exceed 5."
% This code decomposes matrix A into upper and lower triangular matrices.
clear;
clc;
disp('Matlab code for LU decomposition of a matrix using ''gaussian elimination''and ''partial pivoting''')
disp('Click Enter to continue.')
pause
clc;
A = input("enter a matrix: ");
tic
[n,m]=size(A);
U=A;%upper triangular matrix
L=eye(n);%lower triangular matrix
P=eye(n);%permutation matrix
for i = 1:n
if true %partial pivoting
maksimum=max(abs(U(i:end,i)));
for k=1:n
if maksimum == abs(U(k,i))
U([i k],:) = U([k i],:);
P([i k],:) = P([k i],:);
end
end
end
for j = i+1:n
L(j,i)=U(j,i)/U(i,i);
U(j,:) = U(j,:)-U(j,i)*U(i,:)/U(i,i);
end
end
disp('permutation matris(P):')
disp(P)
disp("A'in ust ucgen matris(U):")
disp(U)
disp("A'in alt ucgen matris(L):")
disp(L)
toc

Réponse acceptée

Adam Danz
Adam Danz le 27 Mar 2022
Modifié(e) : Adam Danz le 30 Mar 2022
Let's look at the line that's reported to be causing the problem and the error message.
maksimum=max(abs(U(i:end,i)));
Index in position 2 exceeds array bounds. Index must not exceed 5
  1. "Index in position 2" means the 2nd index value in u(i:end, i) which is the last i. That i is causing a problem.
  2. "Index in position 2 exceeds array bounds" means that the last i is larger than the array size. Position 2 indexes the columns of an array. So at some point i becomes larger than the number of columns in U.
  3. "Index must not exceed 5" : Matlab tells us that U has 5 columns so the error happens when i==6.
Now that we understand the error message, how do we fix it? This is where your expertise comes in as the owner of the code. Here are some possible problems:
  • Maybe U isn't the size it should be. Maybe it should contain more than 5 columns.
  • Maybe U is the right size but the indexing is the problem. Maybe i shouldn't ever be >5, or, greater than the number of columns in U.
  • The problem might be caused at this line where n is the number of rows, not columns [n,m]=size(A);
  • But this part also looks fishy: U(i:end,i); is that really what you want to do (I don't know), to index rows i:end of column i?
  1 commentaire
Mohammed Izedin Mohammed
Mohammed Izedin Mohammed le 27 Mar 2022
you are right I solved it by changing the index n to min(n,m) in the first for loop :) thnaks a lot
% This code decomposes matrix A into upper and lower triangular matrices.
clear;
clc;
disp('Matlab code for LU decomposition of a matrix using ''gaussian elimination''and ''partial pivoting''')
disp('Click Enter to continue.')
pause
clc;
A = input("enter a matrix: ");
tic
[n,m]=size(A);
U=A;%upper triangular matrix
L=eye(n);%lower triangular matrix
P=eye(n);%permutation matrix
for i = 1:min(n,m)
if true %partial pivoting
maksimum=max(abs(U(i:end,i)));
for k=1:n
if maksimum == abs(U(k,i))
U([i k],:) = U([k i],:);
P([i k],:) = P([k i],:);
end
end
end
for j = i+1:n
L(j,i)=U(j,i)/U(i,i);
U(j,:) = U(j,:)-U(j,i)*U(i,:)/U(i,i);
end
end
disp('permutation matris(P):')
disp(P)
disp("A'in ust ucgen matris(U):")
disp(U)
disp("A'in alt ucgen matris(L):")
disp(L)
toc

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by