【问题标题】:Using MATLAB to create Position, Velocity, and Acceleration plots使用 MATLAB 创建位置、速度和加速度图
【发布时间】:2018-05-08 17:03:31
【问题描述】:

我对 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_dot) 和加速度 (x_dd) 与角度 theta 的关系。第一部分工作正常,并为 x 吐出一个情节。

有没有一种方法可以得到速度和加速度图,而我不必手动找到函数的导数并绘制它?我不确定 MATLAB 的功能是什么。我不需要实际的导数,只需要情节,所以如果我可以避免手动进行推导,我想这样做。我查看了diff,但它看起来好像需要syms,我也想尽量避免。

感谢任何帮助。谢谢。

【问题讨论】:

  • diff 有多个版本。基本 MATLAB 的 diff 不需要符号数学。
  • 我在 x 上使用了 diffxdot = diff(x),但在绘图时我收到错误消息“向量必须是相同的长度。”

标签: matlab calculus


【解决方案1】:

您可以以另一种方式使用diff,即,当您执行 diff(x) 时,它将返回一个长度小于原始向量 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;

在这里,我为 hbd 假设了一些随机数。此外,beta 有虚数。你必须照顾好它。

【讨论】:

  • 谢谢你。为什么 diff 返回一个长度比原来的少 1 的向量?
  • @Sunden:它计算后续元素之间的差异。请注意,这不是导数,它需要适当地缩放。此外,它估计元素之间的导数,我会将v 的图移动半个 theta 步,将a 的图移动一步(即theta(2:end-1)
  • @CrisLuengo,我正在考虑规模,但不知何故跳过它并假设它是 1。希望 Sunden 能解决这个问题。
  • @Nakini 你所说的比例是什么意思?我确实注意到每个图的 Y 轴似乎很小。我只需要对速度和加速度向量应用一些因素吗?
  • 啊,好吧,我想我现在明白了,我只需要除以我的步长对吗?
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 1970-01-01
相关资源
最近更新 更多