
If/ElseIf Statement Inequality Not Resolving Correctly
    2 views (last 30 days)
  
       Show older comments
    
    Sarah Ten Eyck
 on 2 Apr 2019
  
    
    
    
    
    Commented: Sarah Ten Eyck
 on 3 Apr 2019
            I'm trying to plot the angular position of a robotic arm whose equation of motion changes over time. Ideally the plot of the position should have this shape: 

but instead looks like this:

I have an if/elseif/else statement to handle the change in equation. The problem is that "else" part is being tripped for all values of t, which is why the plot is linear. I cannot seem to figure out why this is, but I can only assume it's because I've made some mistake with my if conditions. Below is a copy of my code. Any help would be appreciated. Thank you!
vm1 = 0.41415;
theta01 = -0.57982;
thetaf1 = 0.57982;
hold on
t = linspace(0,3);
    if (t < 0.5)
        theta1 = theta01 + (vm1 .* (t .^ 2));  
    elseif (t > 2.5)
        theta1 = thetaf1 - (vm1 .* (9 - (6 .* t) + (t .^ 2)));  
    else
        theta1 = vm1 .* (t - 1.5);  
    end
plot(t, theta1)
0 Comments
Accepted Answer
  Cris LaPierre
    
      
 on 3 Apr 2019
        If statements only work on one value at a time. You can't have it check the entire vector all at the same time. You can put the if statement inside a for loop and loop through each value of t one by one:
for i = 1:length(t)
    if (t(i) < 0.5)
        theta1(i) = theta01 + (vm1 .* (t(i) .^ 2));  
    elseif (t(i) > 2.5)
        theta1(i) = thetaf1 - (vm1 .* (9 - (6 .* t(i)) + (t(i) .^ 2)));  
    else
        theta1(i) = vm1 .* (t(i) - 1.5);  
    end
end
or create a piecewise function:
theta1 = (theta01 + (vm1 .* (t .^ 2))).*(t<0.5) + ...
    (thetaf1 - (vm1 .* (9 - (6 .* t) + (t .^ 2)))).*(t>2.5) + ...
    (vm1 .* (t - 1.5)).*(t>=0.5).*(t<=2.5);
The actual functions may not be quite right yet, but at least now you can visualize it.

7 Comments
  Cris LaPierre
    
      
 on 3 Apr 2019
				Nice! Love when the math works!
I must have been writing my last comment the same time you were writing yours. What I said was in reference to decreasing the point interval spacing.
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!