If/ElseIf Statement Inequality Not Resolving Correctly

4 次查看(过去 30 天)
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)

采纳的回答

Cris LaPierre
Cris LaPierre 2019-4-3
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.
piecewiseFxn.png
  7 个评论
Cris LaPierre
Cris LaPierre 2019-4-3
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.
Sarah Ten Eyck
Sarah Ten Eyck 2019-4-3
You were right on that front, there was still the weird discontinuity when I decreased the interval. Cheers!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by