【问题标题】:Differential Equation transfer to Matlab ODE45 - were is my error?微分方程转移到 Matlab ODE45 - 是我的错误吗?
【发布时间】:2017-10-27 15:41:28
【问题描述】:

我花了几个小时思考一个我认为完全容易解决的问题。我就是不明白。 在 Coursera(空中机器人)的作业中,我要求使用 matlab 中的 ODE45 函数对 PD 控制器进行编程。目标是(仅!)物体沿 z 轴的垂直稳定。

二阶微分方程为

u(t) = m*(zd'' + Kp*(zd-z)+Kv(zd'-z')+g)

这里d代表想要的位置,z单独代表实际位置,'或''代表第一个o。二阶导数。 而 u 是合力,需要将对象保持或获取到它应该在的位置。

现在我试图将其简化为如下的一阶 euqations 系统:

zd = z1

dz1/dt = z2

dz2/dt= u(t)/m - (Kp*(zd-z)+Kv(zd'-z')+g)

z=z3

dz3/dt=z4

u=z5

dz5/dt=z6

我认为我有 5 个起始变量,分别是 zd(0)、zd'(0)=z2(0)、z(0)=z3(0)、z'(0)=z4(0) 和 u (0)。目标是得到 u(t)。

现在我尝试了这段代码,不幸的是总是报错:

z0 = [s_des(1), s_des(2), s(1), s(2), u];
tlim=[t, t+.01];
[t,z]=ode45(@flight, tlim, z0);

function dzdt=flight(t,z)
    dzdt_1 = z(2);
    dzdt_2 = z(5)/m+kv*z(4)-kv*z(2)-kp*z(1)+kp*z(3)-g;
    dzdt_3 = z(4);
    dzdt_5 = z(6);
    dzdt=[dzdt_1; dzdt_2; dzdt_3; dzdt_5];
end

这里的 s_des, s 变量包含起始值或实际值。

错误是:

索引超出矩阵维度。 控制器/飞行错误(第 42 行) dzdt_2 = z(5)/m+kvz(4)-kvz(2)-kpz(1)+kpz(3)-g;

谁能帮帮我。我尝试了较少的方程式,但大多数情况下我得到相同的错误或错误: CONTROLLER/FLIGHT 返回一个长度为 5 的向量,但初始条件向量的长度为 6。返回的向量由 CONTROLLER/FLIGHT 和初始条件向量必须有相同数量的元素。

编辑: 如果我按如下方式更改中心功能,我不会收到任何错误,但它也不起作用,因为我的对象只是掉到地上;-)

[t,z]=ode45(@flight, tlim, z0);

function dzdt=flight(t,z)
    dzdt_1 = z(2);
    dzdt_2 = z(5)/m+kv*z(4)-kv*z(2)-kp*z(1)+kp*z(3)-g;
    dzdt_3 = z(4);

    dzdt=[dzdt_1; dzdt_2; dzdt_3; 0; 0];
end

谢谢。

【问题讨论】:

  • 我不清楚zd 和z 代表什么?当dz 和z 也在浮动时,如果你不使用zd 作为变量名,也许会更清楚
  • 是的。这可能是个好主意。但问题是:带有 zd 的所有内容都代表所需的垂直位置,没有 'd' 的所有内容都代表当前位置好吗?
  • 什么是z(6)?根据您的初始条件,您似乎只有五个状态。积分函数的输入和输出需要与初始条件具有相同的维度。
  • z(6) 是我尝试将 u = z5 纳入等式的有益尝试。

标签: matlab ode differential-equations feedback


【解决方案1】:

经过一段时间的思考和尝试,我想出了这个解决方案:

tlim=[tinit, tinit+.01];

iniCond=[s_des(1)-s(1),s_des(2)-s(2), s_des(1), s_des(2)];

[tSol, eSol]=ode45(@control, tlim, iniCond);

u=kv*m*eSol(end, 2) + m*kp*eSol(end,1) + m*g 

   function derror = control(time, error)
        A=[0 1 0 0;-kp  -kv 0 0;0 0 0 1;-kp -kv 0 0];
        b=[0 0 0 u/m-g]';
        derror=A*error+b;
    end

这完成了模拟四轴飞行器垂直运动的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多