如何为 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 .. 1
、x0 = 6
、a = 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/dt
和 dx
(第二个增益块)之间切换的时间步长。
最后,我们必须为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
方框图中的反馈回路几乎完全实现了解函数的定点方程。
所以不需要复杂的构造和额外的积木。
我有一个微分方程: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 .. 1
、x0 = 6
、a = 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/dt
和 dx
(第二个增益块)之间切换的时间步长。
最后,我们必须为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
方框图中的反馈回路几乎完全实现了解函数的定点方程。
所以不需要复杂的构造和额外的积木。