创建在ode45中使用的函数

时间:2015-06-11 05:28:46

标签: matlab

This is part of a larger project

所以这是一个更大的项目的一部分,但我被困在本节的第二部分。我重写了系统以获得所需的形式:

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函数感到困惑。

任何帮助,即使它只是指向我正确的方向将是惊人的。提前谢谢你:)

1 个答案:

答案 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