所以这是一个更大的项目的一部分,但我被困在本节的第二部分。我重写了系统以获得所需的形式:
dx(1)/ dt = x(2)
dx(2)/ dt =( - (M + m)/ mL))x(4)+ 1 /(mL)u
dx(3)/ dt = x(4)
dx(4)/ dt = - (mg / M)x(1)+(1 / M)u
在替换问题中给出的变量后,我编写了函数:
function dx = fun(t,x)
dx = zeros(4,1);
dx(1) = x(2);
dx(2) = -((2+.1)/(.1*.5)).*x(4);
dx(3) = x(4);
dx(4) = -((.1*9.81)/2).*x(1);
end
我对如何实现u(t)= 0以及如何创建theta函数感到困惑。
任何帮助,即使它只是指向我正确的方向将是惊人的。提前谢谢你:)
答案 0 :(得分:0)
这很容易。您将theta
实现为另一个州。这是可能的,因为你知道衍生物,它甚至不依赖于其他状态。更确切地说,您应该在此添加两个状态。一个用于theta
,一个用于theta_dot
。
dx(5) = x(6) % Theta'
dx(6) = -0.1 % Theta''
顺便说一下,您还可以将其他变量传递给微分方程。你只需要添加更多参数
function dx = diffeq(t,x,parameters)
...
end
并创建一个新的函数句柄,您可以在其中执行ODE求解器
[T,X] = ode45(@(t,x)diffeq(t,x,parameters),t_span,X0, ode_options);
这只是一个提示,因为您在微分方程函数中使用magic numbers。