Index exceeds the number of array elements (1)

%When I try to perform a row interchange for 'b' vector It tells me it exceeds the no of array elements. This is an attempt to perform partial pivoting for matrix A and vector b separately.
Thanks
A = [1 2 3;4 2 -1; 3 2 3];
b = [1; 3; 2];
k = 1;
A = pivoting(A,k)
function [A, b, flag] = pivoting(A, b, k)
n = size(A,1);
flag = 0;
for k=1:n-1
[big, i]=max(abs(A(k:n,k)))
ipr=i+k-1
if ipr~=k
A([k,ipr],:)=A([ipr,k],:)
b([k,ipr])=b([ipr,k])
end
end
end

 Respuesta aceptada

Kojiro Saito
Kojiro Saito el 9 de Sept. de 2020
It's because you're trying to manipulate b in line,
b([k,ipr])=b([ipr,k])
but, you're inputting as follows.
k = 1;
A = pivoting(A,k)
so, in function pivoting, b (second input variable) is scalar (1).
You just need to input three variables.
% A = pivoting(A,k)
A = pivoting(A,b,k)

9 comentarios

Jonas Freiheit
Jonas Freiheit el 9 de Sept. de 2020
Editada: Jonas Freiheit el 9 de Sept. de 2020
That worked for me but, Is there another way to solve this program successfully without changing the pivoting function and only the code in the for loop?
Thanks for the help Kojiro!
Kojiro Saito
Kojiro Saito el 9 de Sept. de 2020
Editada: Kojiro Saito el 9 de Sept. de 2020
It didn't mean changing pivoting function. You're calling pivoting with two inputs (A and k),
A = [1 2 3;4 2 -1; 3 2 3];
b = [1; 3; 2];
k = 1;
A = pivoting(A,k)
but I suggested that you would call pivoting with three inputs (A, b and k)
A = [1 2 3;4 2 -1; 3 2 3];
b = [1; 3; 2];
k = 1;
A = pivoting(A,b,k)
Jonas Freiheit
Jonas Freiheit el 10 de Sept. de 2020
Sorry what I meant was is it possible to do it with only calling pivoting with two inputs (A and k)?
I see. Actually, k is initialized in pivoting function, so you don't need to input it.
The following would work.
A = [1 2 3;4 2 -1; 3 2 3];
b = [1; 3; 2];
%k = 1;
A = pivoting(A)
function [A, flag] = pivoting(A)
n = size(A,1);
flag = 0;
for k=1:n-1
[big, i]=max(abs(A(k:n,k)))
ipr=i+k-1
if ipr~=k
A([k,ipr],:)=A([ipr,k],:)
%b([k,ipr])=b([ipr,k])
end
end
end
Jonas Freiheit
Jonas Freiheit el 10 de Sept. de 2020
Editada: Jonas Freiheit el 10 de Sept. de 2020
Sorry sorry, I mean only by changing this code:
for k=1:n-1
[big, i]=max(abs(A(k:n,k)))
ipr=i+k-1
if ipr~=k
A([k,ipr],:)=A([ipr,k],:)
b([k,ipr])=b([ipr,k])
end
end
end
Thanks, don't mean to annoy you, I'm trying to learn how to change the source code without changing the pivoting function.
The following is what you want to do?
A = [1 2 3;4 2 -1; 3 2 3];
b = [1; 3; 2];
%k = 1;
n = size(A,1);
for k=1:n-1
[big, i]=max(abs(A(k:n,k )))
ipr=i+k-1
if ipr~=k
A([k,ipr],:)=A([ipr,k ],:)
b([k,ipr])=b([ipr,k ])
end
end
Jonas Freiheit
Jonas Freiheit el 10 de Sept. de 2020
Yeah, including this code with only changing from the bold text code.
A = [1 2 3;4 2 -1; 3 2 3];
b = [1; 3; 2];
k = 1;
A = pivoting(A,k)
function [A, b, flag] = pivoting(A, b, k)
n = size(A,1);
flag = 0;
for k=1:n-1 %Here
[big, i]=max(abs(A(k:n,k)))
ipr=i+k-1
if ipr~=k
A([k,ipr],:)=A([ipr,k],:)
b([k,ipr])=b([ipr,k])
end
end
end %End
Thanks, Kojiro
Kojiro Saito
Kojiro Saito el 10 de Sept. de 2020
It's not possible only changing the bold text code because the funtion pivoting requires three inputs, so you need to modify input variables so that it allows two inputs.
Jonas Freiheit
Jonas Freiheit el 10 de Sept. de 2020
Alright that makes sense,
Thanks for the help Kojiro!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2020a

Preguntada:

el 9 de Sept. de 2020

Comentada:

el 10 de Sept. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by