Matlab编写S函数,实现y=ku+b

    xiaoxiao2022-07-05  244

    这是个简单的例子,注:此博客参考

    [s函数小实例](https://blog.csdn.net/qq_34317499/article/details/81044757)

    S函数代码如下:

    function [sys,x0,str,ts]=zhai(t,x,u,flag,k,b) switch flag case 0 [sys,x0,str,ts]=mdlInitializeSizes; %初始化 case 3 sys=mdlOutputs(t,x,u,k,b); %计算输出量 case {1,2,4,9} sys=[]; otherwise %出错处理 error(num2str(flag)) end function [sys,x0,str,ts]=mdlInitializeSizes() sizes=simsizes; sizes.NumContStates=0; %无连续状态 sizes.NumDiscStates=0; %无离散状态 sizes.NumOutputs=1; %有一个输出量 sizes.NumInputs=1; %有一个输入信号 sizes.DirFeedthrough=1; %输出量中含有输入量 sizes.NumSampleTimes=1; %单个采样周期 sys=simsizes(sizes); %给其他返回参数赋值 x0=[]; %设置初始状态为零状态 str=[]; %将str变量设置为空字符串 ts=[-1,0]; %假定继承输入信号的采样周期 function sys=mdlOutputs(t,x,u,k,b) sys=k*u+b;

    Simulink模型如下

    Simulink模型 S函数参数设置

    其中 :正弦波为输入,别忘了设置初始值(一开始我忘了,找了好久原因),这个是一个输入,一个输出的例子

    仿真结果

    输入为2个及以上变量时,只需修改

    sizes.NumInputs=2; %有二个输入信号 %%%%%%%% function sys=mdlOutputs(t,x,u,k,b) sys=k*u(1)+b*u(2);

    效果图如下

    最新回复(0)