Simulink中S-Function和MATLAB-Function的区别

问一个比较大的问题,在Simulink中,如果没有现成的模块调用,我们倾向于建S-Function模块,但是其实Simulink里面还有MATLAB Function。

前段时间做仿真,有一个复杂的计算公式,两个输入变量,一个输出变量,使用的是MATLAB Function,发现也蛮好用的。

那么问题来了,究竟MATLAB Function和S-Function有什么区别呢?本人接触MATLAB还不算很深入,不知道版里面的大神有没有自己的理解?

S函数模块是描述Simulink模块运行机制和细节动作最深刻的模块,它提供对模型运行时模块动作的所有流程定义,包括初始化多少个输入输出口,多少个状态变量;包括微分,状态变量更新计算,包括输出计算和终止时的动作定义。
Matlab -function是提供类似Matlab编程的编辑器,在有限制的情况下去编写M语言程序,每次仿真都调用Matlab解释器去翻译程序生成C代码,再编译为mex文件执行,费时费力,而且不能反映Simulink的本质。
很多Matlab熟悉的人初学Simulink都喜欢用这个,我个人到是不喜欢,因为它不锻炼Simulink整体设计和功能设计的能力,依靠的还是传统的Matlab。


  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卡尔曼滤波是一种用于估计系统状态变量的方法,它结合了系统模型和测量数据,通过递归的方式,根据上一时刻的状态估计值和当前时刻的测量值,得到当前时刻的状态估计值。在Simulink,我们可以使用S-function来实现卡尔曼滤波估计。 S-functionSimulink的一种自定义模块类型,可以用于实现用户所需的特定功能。下面是一个简单的卡尔曼滤波估计模型的S-function代码示例: ```matlab function [sys,x0,str,ts] = kalman_filter_sfun(t,x,u,flag) switch flag case 0 [sys,x0,str,ts] = init(); case 1 sys = state_update(u); case 3 sys = measurement_update(u); case {2, 4, 9} sys = []; otherwise error(['Unhandled flag = ',num2str(flag)]); end function [sys,x0,str,ts] = init() sizes = simsizes; sizes.NumContStates = 0; sizes.NumDiscStates = 0; sizes.NumOutputs = 1; sizes.NumInputs = 2; sizes.DirFeedthrough = 1; sizes.NumSampleTimes = 1; sys = simsizes(sizes); x0 = []; str = []; ts = [0 0]; function sys = state_update(u) % 获取上一时刻的状态估计值 x_k_1 = x; % 获取当前时刻的输入 u_k = u(1); % 根据系统模型进行状态预测 x_k = A * x_k_1 + B * u_k; % 将当前时刻的状态估计值输出 sys = x_k; function sys = measurement_update(u) % 获取当前时刻的测量值 y_k = u(2); % 计算卡尔曼增益 K = P_k_1 * H' / (H * P_k_1 * H' + R); % 更新状态估计值 x_k = x_k_1 + K * (y_k - H * x_k_1); % 更新状态协方差矩阵 P_k = (I - K * H) * P_k_1; % 将当前时刻的状态估计值输出 sys = x_k; ``` 上述代码实现了一个简单的一维卡尔曼滤波估计模型。其,state_update函数用于进行状态预测,measurement_update函数用于进行状态更新。具体实现过程,需要设置系统模型参数(如矩阵A、B、H)、初始状态估计值(如x0)、过程噪声协方差矩阵(如Q)和测量噪声方差(如R),以及相应的状态协方差矩阵P。有关卡尔曼滤波的详细理论和参数设置方法,请参考相关文献和教材。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值