如何为Simulink积分器循环

时间:2017-11-03 13:43:43

标签: matlab simulink differential-equations

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

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

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

Model

我知道内部集成商,有可能设置"初始条件"但我无法弄清楚这会对最终结果产生什么影响。如何在x处设置t = 0的值; E.I. x(0) = 6

2 个答案:

答案 0 :(得分:1)

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

   dx/dt = a*x       % Seperable differential equation
=> (1/x) dt = 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)

figure

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

model

要运行此功能,我们必须首先设置一些内容。在模拟中>模型配置参数,我们必须设置时间步长以匹配我们用于在dx/dtdx(第二增益块)之间切换的时间步长。

config

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

initial

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

scope

现在我们了解发生了什么,我们可以重新引入集成块以使模型更加灵活。使用积分器意味着dt被自动计算,我们不需要微观管理增益块,事实上我们可以摆脱它。我们仍然需要一个Memory块。我们现在还需要积分器和存储器块中的初始条件。将范围放在不同的位置,只需完成前几个步骤即可找出原因!

simple

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

答案 1 :(得分:0)

考虑积分器块的方式要么完全在拉普拉斯图中,要么表示为 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

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

因此不需要复杂的结构和额外的块。