# Why do I get "Array indices must be positive integers or logical values"?

3 views (last 30 days)
Mims Hillis on 6 Mar 2023
Commented: Mims Hillis on 7 Mar 2023
I am trying to graph Thrust vs Mach number. I took posted all the parts that are related to the error message
clc
clear
close all
Ta = 504;
y = 1.4;
Ra = 1716;
for M = .1:.1:5
u(M) = M.* sqrt(y.*Ra.*Ta);
disp(u)
end
The error I get is "Array indices must be positive integers or logical values. Error in test (line 10) u(M) = M.* sqrt(y.*Ra.*Ta);" Can someone shine some light on what I am doing wrong?

Cris LaPierre on 6 Mar 2023
Edited: Cris LaPierre on 6 Mar 2023
Your values of M are not valid indices for u. Your indices must be integer values >=1.
A=1:5;
% This works because the index is a positive integer
A(2)
ans = 2
% This does not work because the index is a decimal number
A(0.2)
Array indices must be positive integers or logical values.
The most robust solution would be to create a vector M, and then have your for loop loop through each element of M, with the loop counter being used assign the result to u.
M = .1:.1:5;
for v = 1:length(M)
u(v) = M(v).* sqrt(y.*Ra.*Ta);
disp(u)
end
Even better would be to get rid of the loop altogether.
M = .1:.1:5;
u = M.* sqrt(y.*Ra.*Ta)
Mims Hillis on 7 Mar 2023
Thank you I should have mentioned that the posted code was apart of a larger loop

Torsten on 6 Mar 2023
Ta = 504;
y = 1.4;
Ra = 1716;
M = .1:.1:5;
for i = 1:numel(M)
u(i) = M(i)*sqrt(y*Ra*Ta);
end
plot(M,u) or simply
Ta = 504;
y = 1.4;
Ra = 1716;
M = .1:.1:5;
u = M*sqrt(y*Ra*Ta);
plot(M,u) ### Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

R2019a

### Community Treasure Hunt

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

Start Hunting!