我在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值以检查灵敏度。
答案 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
...