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

Passing constant parameter to simulink s-function (mdlderivatives)

我已经在 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 值来检查灵敏度。

您应该使用 2 级 m 代码 S 函数编写任何新代码。 1 级功能仅用于向后兼容。

尽管如此,要将参数传递到 1 级 S-Function,您需要执行以下操作:

在 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
...