使用MATLAB创建位置、速度和加速度图

使用MATLAB创建位置、速度和加速度图,matlab,calculus,Matlab,Calculus,我对MATLAB非常陌生,因为我今天刚刚学习了它,并试图创建基本的位置、速度和加速度图 到目前为止,我有: 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和h是常数,我试着画出位置x,速度x_点,加速度x_dd和角度θ。第一部分很好,为x绘制了一个图 有没有一种方法可以得到速度和加速度的曲线图,而不用我

我对MATLAB非常陌生,因为我今天刚刚学习了它,并试图创建基本的位置、速度和加速度图

到目前为止,我有:

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和h是常数,我试着画出位置x,速度x_点,加速度x_dd和角度θ。第一部分很好,为x绘制了一个图

有没有一种方法可以得到速度和加速度的曲线图,而不用我手工求函数的导数并绘制它?我不确定MATLAB的功能是什么。我不需要实际的导数,只需要情节,所以如果我能避免手工进行导数,我愿意。我研究了diff,但它似乎需要syms,我也想尽量避免

感谢您的帮助。谢谢。

您可以用另一种方式使用diff,即,当您使用diffx时,它将返回一个长度小于原始长度1的向量。以下是代码的修改版本:

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;

这里,我假设h、b和d的一些随机数。而且,beta有虚数。你必须注意这一点。

diff Base MATLAB有多个版本。MATLAB不需要符号数学。我在x上使用了diff:xdot=diffx,但在绘图时,我得到的误差向量必须是相同的长度。谢谢你。为什么diff返回的向量长度比原来的少1?@Sunden:它计算后续元素之间的差值。请注意,这不是导数,需要适当缩放。此外,它估计元素之间的导数,我将v的图移动半个θ步,a的图移动一个步,即θ2:end-1。@CrisLuengo,我在考虑比例,但不知怎的跳过了它,并假设它是1。希望Sunden能明白这一点。@Nakini你说的比例是什么意思?我确实注意到每个绘图的Y轴似乎很小。我需要对速度和加速度向量应用一些因子吗?好的,我想我现在明白了,我只需要除以我的步长,对吗?