Matlab 创建要在ode45中使用的函数

Matlab 创建要在ode45中使用的函数,matlab,Matlab,所以这是一个更大项目的一部分,但我被困在这一部分的第二位。我重写了系统,使其符合要求的格式: 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)

所以这是一个更大项目的一部分,但我被困在这一部分的第二位。我重写了系统,使其符合要求的格式:

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
实现为另一种状态。这是可能的,因为你知道导数,它甚至不依赖于其他状态。更准确地说,您应该在这里再添加两个状态。一个用于
theta
和一个用于
theta\u 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);

这只是一个提示,因为您正在使用微分方程函数。

谢谢您的帮助:)但我如何绘制θ(t)与时间的关系?u(t)=0本质上意味着忽略系统的u部分吗?我知道如何绘制x(t)与时间的关系,但如果你把这些状态加起来,我怎么能只绘制θ(t)与时间的关系?@Chloe Carmichael,是的,你完全忽略了
u(t)
。虽然我猜在你的项目的后面部分它将不再被忽略。你将如何处理它取决于你是如何被给予的。如果它是一个外部函数,你只需在微分方程中使用它,并将时间作为参数传递:
u=funct_(t)
,然后在微分方程中使用
u
。此外,你现在应该已经定义了
u
,并简单地将其设置为零。你现在建立方程的方法完全不存在了,从数学上看这是正确的,但从代码上看是正确的
u
在那里,它只是
0
。至于绘制θ(t)vs t,θ对应于X矩阵的第五列。X和T由你的ode45返回,都已经存在了。如果您仍然看不到它,请发布您的完整代码,我们可以查看。@potAito使用上述函数绘制x(t)
>tspan=[05];init=[.01-.12];[tf]=ode45(@fun,tspan,init);绘图(t,f(:,1),“-”,t,f(:,2),“-”,t,f(:,3),“,”,t,f(:,4),“:”)
如果我尝试实现您的函数,我会得到超出范围的索引。