【问题标题】:Inverted pendelum matrix derivative approximation倒立摆矩阵导数逼近
【发布时间】:2019-01-09 19:34:54
【问题描述】:

这里我写了一个动态函数:

function dAx = dynamic(t,x)
global u;

g = 9.8;
l = 0.5;
m = 0.5;
h = 2;

dx(1,1) = x(2);
dx(2,1) = g/l*sin(x(1))-h/(m*l^2)*x(2)+1/(m*l)*cos(x(1))*u(1,1);
dx(3,1) = g*lcos(x(3))-u(2,1);


A = [x(1)*x(2)+10*x(1);10*x(2)-5*x(1);x(3)] 

dx = 1e-3
dAx = [(((x(1)+dx)+(x(1)-dx))*((x(2)+dx)+(x(2)-dx)))/(2*dx)+(10*(x(1)+dx)+(x(1)-dx))/(2*dx);
       ((10*(x(2)+dx)+(x(2)-dx))-5*((x(1)+dx)+(x(1)-dx)))/(2*dx);
       ((x(3)+dx)+(x(3)-dx))/(2*dx)]; % dA/dx using central derivative method computation

这里有一个矩阵A (3*1),函数输出是与系统状态相关的derivative of matrix A

我尝试使用中心差分法。我的导数矩阵计算是否正确?

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为这是与数学相关的问题。
  • @lahidj 您希望我们校对您的 MATLAB 代码或数学?
  • 如果可能的话,两个都可以。

标签: matlab math differential-equations


【解决方案1】:

@Lahidj dAx/dx 是一个大小为nA 乘以nx 的矩阵。您逐列计算此列。取第一个状态(例如x(1))。将其递增和递减一个小值(dx),如 1e-3。获取增加和减少 alpha 值的 A 向量。计算这两个向量之间的差并将其除以dx 的两倍。 (A_plus - A_minus)/(2*dx)。对其余的状态/列重复此操作,您将获得 dAx/dx

【讨论】:

  • 是的,我已经这样做了,但对我来说有些模糊。最后一部分:“对其余的状态/列重复此操作,您将得到 dAx/dx。”如何?另外,我怎样才能得到 (x(1)) 或 ... 的增加和减少的值?
猜你喜欢
  • 1970-01-01
  • 2021-03-21
  • 2010-12-25
  • 2018-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多