将常量参数传递给simulink s-function(mdlderivatives)

时间:2017-03-30 15:21:56

标签: matlab simulink

我在MATLAB中构建了一个模型,我使用SIMULINK来解决微分方程。

function sys=mdlDerivatives(t,x,u)
% Constant block
n    = 10; % fixed switch exponent
k1   = u(2);% input rate constant (1/min)
k2   = u(3);% output rate constant (1/min)
Td   = 70; % time delay (min)
Alfa = 0.7;% ug per 100 ml
Beta = 1;% ug per 100 ml
f    = 250; % phase (min)

a=Alfa*cos((t-f)*2*pi()/1440) + Beta;
Sigmoid = a^n*u(4)/(a^n + u(4)^n);
dxdt(1) = k1*Sigmoid -k2*x(1);
sys = [dxdt];

我想从基础工作区发送Alfa的值。

tspan=[0:0.05:1400]'; 
x0=1.7;              
PARAMETERS=simset('InitialState',x0,'Solver','ode15s','MaxStep',0.05,'OutputPoints','specified','RelTol',1E-6);
[tdata,y]=sim('cortisol_model_2',tspan,PARAMETERS);

我尝试在simulink块中使用From Workspace,但我只能从中插入一个向量。那么是否有更好的方法将常量参数传递给mdlfunction。我实际上想要传递不同的alpha值以检查灵敏度。

1 个答案:

答案 0 :(得分:0)

您应该使用2级m代码S函数编写任何新代码。仅存在一级功能以实现向后兼容。

尽管如此,要将参数传递到1级S函数,请执行以下操作:

在Primary / main / first函数中

function [sys,x0,str,ts,simStateCompliance] = sfuntmpl(t,x,u,flag,p1,p2,p3)
...
switch flag,
...
  case 1,
    sys=mdlDerivatives(t,x,u,p1,p2,p3);

...

使用mdlDerivatives

function sys=mdlDerivatives(t,x,u,p1,p2,p3)
...
% use p1, p2 and/or p3 here
...