【问题标题】:Passing constant parameter to simulink s-function (mdlderivatives)将常量参数传递给 simulink s-function (mdlderivatives)
【发布时间】:2017-03-31 05:40:11
【问题描述】:

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

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    您应该使用 2 级 m-code S-Function 编写任何新代码。 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
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多