For Loop range error

I am running the following for-loop to evaluate over a range of time, over 0.5s steps. But when I run the function it gives me a result I cant comprehend. The result is evaluated over steps of 0.0005s, I have no clue why it is this way. Can someone please help?
Tab=[];
for t= -5.0:0.5:50.0 %s
if t>=0 & t<=10
v=(11*(t^2))-(5*t)
elseif t>=10 & t<=20
v=1100-(5*t)
elseif t>=20 & t<=30
v=(50*t)+2*((t-20)^2)
elseif t>30
v=1520* exp(-0.2*(t-30))
else
v=0
end
Tab=[Tab; t v]
end
Tab
Result:
Tab =
1.0e+03 *
-0.0050 0
-0.0045 0
-0.0040 0
-0.0035 0
-0.0030 0
-0.0025 0
-0.0020 0
-0.0015 0
-0.0010 0
-0.0005 0
0 0
0.0005 0.0003
0.0010 0.0060
0.0015 0.0173
0.0020 0.0340
0.0025 0.0563
0.0030 0.0840
0.0035 0.1172
0.0040 0.1560
0.0045 0.2003
0.0050 0.2500
0.0055 0.3053
0.0060 0.3660
0.0065 0.4323
0.0070 0.5040
0.0075 0.5813
0.0080 0.6640
0.0085 0.7522
0.0090 0.8460
0.0095 0.9453
0.0100 1.0500
0.0105 1.0475
0.0110 1.0450
0.0115 1.0425
0.0120 1.0400
0.0125 1.0375
0.0130 1.0350
0.0135 1.0325
0.0140 1.0300
0.0145 1.0275
0.0150 1.0250
0.0155 1.0225
0.0160 1.0200
0.0165 1.0175
0.0170 1.0150
0.0175 1.0125
0.0180 1.0100
0.0185 1.0075
0.0190 1.0050
0.0195 1.0025
0.0200 1.0000
0.0205 1.0255
0.0210 1.0520
0.0215 1.0795
0.0220 1.1080
0.0225 1.1375
0.0230 1.1680
0.0235 1.1995
0.0240 1.2320
0.0245 1.2655
0.0250 1.3000
0.0255 1.3355
0.0260 1.3720
0.0265 1.4095
0.0270 1.4480
0.0275 1.4875
0.0280 1.5280
0.0285 1.5695
0.0290 1.6120
0.0295 1.6555
0.0300 1.7000
0.0305 1.3754
0.0310 1.2445
0.0315 1.1260
0.0320 1.0189
0.0325 0.9219
0.0330 0.8342
0.0335 0.7548
0.0340 0.6830
0.0345 0.6180
0.0350 0.5592
0.0355 0.5060
0.0360 0.4578
0.0365 0.4142
0.0370 0.3748
0.0375 0.3392
0.0380 0.3069
0.0385 0.2777
0.0390 0.2513
0.0395 0.2273
0.0400 0.2057
0.0405 0.1861
0.0410 0.1684
0.0415 0.1524
0.0420 0.1379
0.0425 0.1248
0.0430 0.1129
0.0435 0.1022
0.0440 0.0924
0.0445 0.0836
0.0450 0.0757
0.0455 0.0685
0.0460 0.0620
0.0465 0.0561
0.0470 0.0507
0.0475 0.0459
0.0480 0.0415
0.0485 0.0376
0.0490 0.0340
0.0495 0.0308
0.0500 0.0278

4 Commenti

I do not see anything wrong at the moment?
I suggest that you command
format long g
and look at the output again.
Shantanu Chatterji
Shantanu Chatterji il 25 Gen 2021
Wow that worked!
Can you PLEASE explain what happened here? what and how does adding the line format long g help???
THANKS!!!
format long g does not change the calculation, only the way the output is displayed. You overlooked the early lines of the output
Tab =
1.0e+03 *
That means that you have to mentally multiply all of the displayed results by 1E3 (that is, 1000) to get the stored value, and that the portion of values less than 0.001*1E3 have been discarded for display purposes.
I personally wish that Mathworks would stop making format short the default. I have seen too many people caught by it.
Shantanu Chatterji
Shantanu Chatterji il 25 Gen 2021
Thanks Walter, you are awesome!

Accedi per commentare.

Risposte (1)

KSSV
KSSV il 25 Gen 2021
t0 = -0.5 ; % initial time
t1 = 50 ; % final time
dt = 0.5 ; % time step
T = t0:dt:t1 ; % create time vector
N = length(T) ; % length of time steps
Tab = zeros(N,1) ; % initialize velocity
for i = 1:N
t = T(i) ;
if t>=0 && t<=10
v=(11*(t^2))-(5*t) ;
elseif t>=10 && t<=20
v=1100-(5*t) ;
elseif t>=20 && t<=30
v=(50*t)+2*((t-20)^2) ;
elseif t>30
v=1520* exp(-0.2*(t-30)) ;
else
v=0 ;
end
Tab(i,:) = v ;
end

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by