Reputation: 863
I am extremely new to MATLAB (as in just picked it up today) and trying to create basic Position, Velocity, and Acceleration plots.
I have this so far:
theta = (0:1:pi);
beta = asin((h+ b*cos(theta))/d);
x = b*cos(theta) + d*cos(beta);
plot(radtodeg(theta), x*1000);
b, d, and h are constants, and I'm trying to plot Position (x), Velocity (x_dot), and Acceleration (x_dd) versus the angle theta. This first part works fine and spits out a plot for x.
Is there a way to get the Velocity and Acceleration plots without me having to find the derivative of my function by hand and plotting that? I'm not sure what MATLAB's capabilities are. I don't need the actual derivatives, just the plot, so if I can avoid doing the derivations by hand I would like to. I looked into diff
but it looked as though it required syms
which I'd also like to try to avoid.
Any help is appreciated. Thanks.
Upvotes: 0
Views: 2413
Reputation: 772
You could use diff
in another way, i.e., when you do diff(x) it will return a vector with length 1 less than the original one. Here is the modified version of your code:
h = 5; b = 2; d = 4;
theta = (0:0.1:pi);
beta = asin((h+ b*cos(theta))/d);
% Position
x = b*cos(theta) + d*cos(beta);
plot(radtodeg(theta(1:end-2)), x(1:end-2));
% Velocity
hold on;
v = diff(x);
plot(radtodeg(theta(1:end-2)), v(1:end-1));
% Acceleration
a = diff(v);
plot(radtodeg(theta(1:end-2)), a);
legend('Position', 'Velocity', 'Acceleration');
hold off;
Here, I assumed some random numbers for h, b, and d. Also, beta has imaginary numbers. You have to take care of that.
Upvotes: 1