simulink的fcn怎么用_利用Simulink的Interpreted MATLAB Fcn求解常微分方程组

为什么使用Simulink的Interpreted MATLAB Fcn相比M-file形式,Simulink的图形化界面可以方便改变边界条件,例如Step,TimeTable等。

Simulink中的Interpreted MATLAB Fcn模块,可以导入包含常微分方程组的function,形成黑箱。仅需要用户提供输入,即可得到输出。这样避免常规Simulink求解常微分方程组的模式,即通过搭建各种数学运算模块,确定各模块之间的运算关系,最终求解常微分方程组。

例1:求解单个常微分方程[1]

编写一个function,代码如下所示:

functiondydt=first_order(x)% Interpreted MATLAB Fcn的输入包括u,y

u=x(1);

y=x(2);

tau=5;

K=2;

dydt=(-y+K*u)/tau;

end

Simulink的框图如下所示:

要值得注意的是,Integrator模块可以求得的积分,即 。然后 ​ 反馈给Interpreted MATLAB Fcn,作为该模块的输入。

除此之外,模块Interpreted MATLAB Fcn中要填写导入function的名字,以及模块的输出数量,如下图红色框图所示:

最终Simulink的仿真结果可见下图:

例2:求解常微分方程组[2]:

其中:

,仿真时间为86400s

编写function如下:

function dTdt=demand(x)

% MATLAB Fcn的输入包括Q, Tamb,四个温度

Q=x(1);

Tamb=x(2);

T(1)=x(3);

T(2)=x(4);

T(3)=x(5);

T(4)=x(6);

Cws=1.19e5;

Cwr=5.36e6;

Cf=4.55e7;

Cb=2.25e8;

mw=0.266;

kwf=1160;

kfz=6155;

kb=260;

cw=4200;

dTdt(1)=(mw*cw*(T(2)-T(1))+Q)/Cws;

dTdt(2)=(mw*cw*(T(1)-T(2))+kwf*(T(3)-T(2)))/Cwr;

dTdt(3)=(kwf*(T(2)-T(3))+kfz*(T(4)-T(3)))/Cf;

dTdt(4)=(kfz*(T(3)-T(4))+kb*(Tamb-T(4)))/Cb;

dTdt=dTdt(:);

end

Simulink的框图如下:

对于常微分方程组,Interpreted MATLAB Fcn的四个输出经过积分后,重新反馈作为输入。

在设置中要更改Ouput dimensions,如下所示:

最终计算结果如下所示:

参考资料

[1] https://www.youtube.com/watch?v=QKhy1JsdiUo&t=595s, Solve Differential Equations in MATLAB and Simulink

[2] Clara Verhelst, Study of the optimal control problem formulation for modulating air-to-water heat pumps connected to a residential floor heating system, Energy and Buildings 45 (2012) 43–53


版权声明:本文为weixin_39862871原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。