如何为 Simulink 积分器循环设置初始条件 t=0

How to set initial condition t=0 for Simulink integrator loop

我有一个微分方程:dx/dt = a * x。使用 Matlab Simulink,我需要求解这个方程并使用 Scope 块输出它。

问题是,我不知道如何指定初始条件值t = 0

到目前为止,我已经设法创建了一个如下所示的解决方案:

我知道在积分器内部,可以设置 "Initial condition" 但我不知道这对最终结果有何影响。我怎样才能简单地将 x 的值设置为 t = 0; e.i。 x(0) = 6?

让我们先通过分析来解决这个问题,以便我们知道模型是否正确。

   dx/dt = a*x       % Seperable differential equation
=> (1/x) dx = a dt   % Now we can integrate
=> ln(x)  = a*t + c  % We can determine c using the initial condition x(0)
=> ln(x0) = a*0 + c
=> ln(x0) = c 
=> x = exp(a*t + ln(x0)) % Subbing into 3rd line and taking exp of both sides
=> x = x0 * exp(a*t)

现在我们有了一个想法。让我们看看 t = 0 .. 1x0 = 6a = 5:

% Plot x vs t using plain MATLAB
x0 = 6; a = 5; 
t = 0:1e-2:1; x = x0*exp(a*t);
plot(t,x)


现在让我们制作一个充当数值积分器的 Simulink 模型。我们实际上不需要此应用程序的 Integrator 块,我们只是想在每个时间步添加更改!

为了运行这个,我们必须先设置一些东西。在 Simulation > Model Configuration Parameters 中,我们必须设置时间步长以匹配我们用于在 dx/dtdx(第二个增益块)之间切换的时间步长。

最后,我们必须为x0设置初始条件,这可以在内存块

中完成

将结束时间设置为 1 秒并 运行 启用模型,我们在 Scope 中看到了预期的结果。因为它符合我们的解析解,所以我们知道它是正确的。


现在我们明白是怎么回事了,我们可以重新引入集成块,让模型更加灵活。使用积分器意味着 dt 是自动计算的,我们不需要对 Gain 块进行微观管理,实际上我们可以摆脱它。不过,我们仍然需要一个内存块。我们现在还需要积分器和内存块中的初始条件。将范围放在不同的位置,只需完成前几个时间步骤即可找出原因!

请注意,使用积分块时初始条件不太清楚。

考虑积分器模块的方式要么完全在拉普拉斯图中,要么代表 IVP 的等效积分方程

y'(t)=f(t,y(t)),  y(0) = y_0

is equivalent to

y(t) = y_0 + int(s=0 to t) f(s,y(s)) ds

方框图中的反馈回路几乎完全实现了解函数的定点方程。

所以不需要复杂的构造和额外的积木。