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

3 views (last 30 days)
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?

Accepted Answer

Cris LaPierre
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)

More Answers (1)

Torsten
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

Tags

Products


Release

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by