Subscript indices problem with a for loop

1 view (last 30 days)
Camran Purewal
Camran Purewal on 15 Mar 2017
Edited: Jan on 15 Mar 2017
Hello, I am having problems creating a for loop to calculate and store temperatures in the various sections of the atmosphere, with the following code I get the error "Subscript indices must either be real positive integer or logicals":
Altitude = 0:1:100000; Temperature 1 = 288.15; L0 = -0.0065;
for i = 1:11001 Altitude = i -1; Temperature(Altitude) = Temperature1 + (L0*Altitude); end
Thank you.

Answers (2)

Jan on 15 Mar 2017
Edited: Jan on 15 Mar 2017
With your code in the first iteration tis happens:
Temperature(0) = Temperature1 + (L0 * Altitude);
but 0 is not a valid index. USe this instead:
Temperature1 = 288.15;
L0 = -0.0065;
Temperature = zeros(1, 11001); % Pre-allocate!!!
for k = 1:11001
Temperature(i) = Temperature1 + (L0 * (i-1));
Or shorter without the loop:
Temperature = Temperature1 + L0 * (0:11000);

Alexandra Harkai
Alexandra Harkai on 15 Mar 2017
Altitude is 0 in the first loop, which is not a valid index in this case.
It is suspicious though that you assign a numerical array to Altitude, then later it gets overwritten by i-1.
This also doesn't look OK, you should get an error:
Temperature 1 = 288.15;
Overall it seems you are using a loop for something that doesn't require a loop: multiplying a vector with a scalar and then adding another scalar to it. You can just write it like so:
Temperature = Temperature1 + (L0 * 0:11000);


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!