Looping over a vector with non-integer values

I'm trying to loop through each element of the vector 'N' but it keeps giving me back the 'attempting to access; index must be a positive integer or logical.' Is there a way I can do this without having to do each of them separately?
N = [15.66 9.27 6.72 4.84 4.1 3.4];
km_factors = zeros(size(N));
r = (616/2)/1000;
m = 1140;
vh = 1.999;
for i = N
x(i) = (0.3*i)/r;
z = m/vh;
km_factors = (2.73e-02*(x(i)))+(9.85e-04*(x(i)^2))-(5.71e-05*(z)) ...
+(8.22e-08*(z^2))-(2.87e-05*(x(i)*z));
end
disp(km_factors);

2 Comments

"do each of them separately?" &nbsp What do you mean? Do what separately?
I guess I should have worded that a little better. I mean loop through each individual number in 'N' 'by hand', if you will.

Sign in to comment.

 Accepted Answer

I don’t know exactly what you want, but one solution is to set the for loop index to go from 1 to the length of ‘N’. I substituted ‘N(i)’ for ‘i’ in the ‘x’ assignment, and subscripted ‘km_factors’. It works. Check to be certain it calculates what you want:
N = [15.66 9.27 6.72 4.84 4.1 3.4];
km_factors = zeros(size(N));
r = (616/2)/1000;
m = 1140;
vh = 1.999;
for i = 1:length(N)
x(i) = (0.3*N(i))/r;
z = m/vh;
km_factors(i) = (2.73e-02*(x(i)))+(9.85e-04*(x(i)^2))-(5.71e-05*(z))+(8.22e-08*(z^2))-(2.87e-05*(x(i)*z));
end
Note that it’s generally not a good idea to use ‘i’ and ‘j’ as variables, including loop counters, because MATLAB uses those for its imaginary operators. Not using them as variables avoids confusion.

2 Comments

It works. Thank you very much, I've been struggling with this for quite some time.
My pleasure!
I remember encountering the same problem when I was learning MATLAB.

Sign in to comment.

More Answers (0)

Categories

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

Community Treasure Hunt

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

Start Hunting!