如果滑膜控制中涉及位置偏差三阶导,一般在matlab的s函数中是如何处理的呢?

如果滑膜控制中涉及位置偏差三阶导,一般在matlab的s函数中是如何处理的呢?
尝试过:1.将运算后的实际位置输出经过微分模块后再输入回去进行计算,但这似乎会出现时间差,导致运算值是一种叠加;2.在s-function中对加速度用diff函数求导得到位置偏差三阶导,但得到的是一个空值。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/376952
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:matlab function
  • 除此之外, 这篇博客: Matlab学习篇之s-function中的 S函数的应用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    采用S函数实现y=kx+b

    (1)定义S函数

    1. 主函数
    function[sys.x0,str,ts]=timekb(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
    2. 初始化子函数
    function(sys.xO0,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]; %假定继承输入信号的采样周期
    3.输出子函数
    function sys=mdlOutputs(t,x,u,k,b) %k,b为自定义参数
    sys=k*u+b;

    (2)在Simulink模型中使用S函数

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^