Error found: Index in position 1 is invalid. Array indices must be positive integers or logical values. Error in MyCost (line 25) z=z+w(i,j)*d(p(i),p(j)); Error

1 Ansicht (letzte 30 Tage)
function z=MyCost(p,model)
n=model.n;
w=model.w;
d=model.d;
z=0;
for i=1:n-1
for j=i+1:n
z=z+w(i,j)*d(p(i),p(j));
end
end
end
  1 Kommentar
Walter Roberson
Walter Roberson am 5 Jan. 2022
We do not know what data type p is. It could be a function, so p(i) an p(j) could be almost anything.
We do not know what data type model.d is.
But... if p is a vector and it does not happen to be positive integers, and if model.d is an array, then d(p(i), p(j)) could easily be an attempt to index d at something that is not an integer.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Image Analyst
Image Analyst am 5 Jan. 2022
See the FAQ for a thorough explanation.
You'll find out that your p are either zero, negative, or some fractional number, not integers.
p(i) and p(j) need to be integers and they aren't.
They are the row and column index of d so they must be integers like 1,2,3,4, etc. Not -37, not 0, not 3.1415. There is no -37th row of any matrix.
Maybe you can just round them, but who knows -- you'll have to figure that out. Why did you expect them to be integers greater than 1? But for some reason, they are not that.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by