Simulink仿真中使用可变上下限定积分

最近在做Simulink仿真,但是simulink中的定积分模块的上下限是在仿真中只能使用常数值,而自己需要不同时刻定积分的上下限都是在变换的,发现网络上找到的都较为复杂,记录一下自己的解决过程

解决思路: matlab的m文件可以使用定积分函数integral,因而通过simulink调用m文件而解决变上下限定积分的问题

中间遇到的问题:Simulink中的定积分模块上下限为常数值输入,因而无法满足需求,网络上有教程可以设置几个模块从而实现变边界,由于没太懂,因而pass;Simulink中的function模块中有MATLAB Function,其本质也是使用m文件调用,但在里面无法使用integral函数,因而pass

解决方法:使用S-Function函数嵌入Simulink仿真中实现变上下限定积分

具体过程:在simulink中创建s函数图标

1.在命令行输入以下命令,先调用s函数模板,确定自己的s函数文件

>> edit sfuntmpl.m

复制模板内容后,粘贴到新的m文件,修改为自己的函数名称。

2.找到模板中以下内容:

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 4;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

修改NumInputs为定积分中需要输入的参数数目,NumOutpus为定积分输出值的数目

3.找到模板中function sys=mdlOutputs(t,x,u)函数

% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u)

sys = [];

其中u为上一步中修改的输入参数。

将该模板函数修改为所需要的定积分表达式,sys值即为输出值。

例如:需要计算的表达式如下

该表达式中E、L、 alpha_2为常数,alpha_1为变换量,因而每次的定积分上下限都不同,但在某个时间点的定积分中,alpha_1为确定量。

故对于该定积分一共有四个输入值,输出值为kb1。修改模板函数如下所示:

function sys=mdlOutputs(t,x,u)

E=u(1);
L=u(2);
alpha_2=u(3);
alpha_1 = u(4);

f = @(m)(3.*((1+cos(alpha_1).*((alpha_2-m).*sin(m)-cos(m))).^2).*(alpha_2-m).*cos(m))./(2.*E.*L.*(sin(m)+(alpha_2-m).*cos(m)).^3);
out = 1/integral(f,-alpha_1,alpha_2);

sys = out;

完成如上步骤,则完成了S函数的创建工作,下一步将S函数在simulink中实现输入与输出。

4. 将simulink中的S函数的响应框中函数名称改为你的S函数文件名,并置于同一路径下,从而仿真时能找到s函数文件

  

 使用Simulink中的mux部件,实现多信号输入。

其中输入可以是变换的,从而实现了上下限变换的定积分仿真计算。

不足:调用S函数会使Simulink的仿真变慢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值