s函数中第一个程序修改(介绍function sys = mlupdate(t, x, u)用法)
示例:
dx1/dt=-0.5572x1-0.7814x2+u1-u2;
dx2/dt=0.7814x1+2u2;
y=1.9691x1+6.4493x2;
simulink模型的建立

s函数程序
A=[-0.5572,-0.7814;0.7814,0];
B=[1,-1;0,2];
C=[1.9691,6.4493];
程序与之前修改的部分使用红色标出
function [sys,x0,str,ts,simStateCompliance] = sfun_state01(t,x,u,flag,A,B,C)
switch flag,
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 2,
sys=mdlUpdate(t,x,u,A,B);
case 3,
sys=mdlOutputs(t,x,u,C);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
sys=mdlTerminate(t,x,u);
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 2;
sizes.NumOutputs = 1;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0 0]';
str = [];
ts = [0.02,0];
simStateCompliance = 'UnknownSimState';
function sys=mdlDerivatives(t,x,u) sys = [];
function sys=mdlUpdate(t,x,u,A,B)
% update state variable
Ts = 0.02;
sys = x + (A * x + B * u) *Ts; function sys=mdlOutputs(t,x,u,C)
% update output
sys = C * x; function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1;
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u) sys = [];
图像结果

function sys = mlupdate(t, x, u)的功能是对离散状态量的跟新,即更新下一采样时刻的状态变量,并在之后的mdloutputs中处理;这是s函数文章中程序错误的原因,但为什么会写成上面的形式呢?离散变量的跟新是什么意思,在这里给大家推导一遍帮助大家的理解

这个式子就是malupdate中需要编写的式子,离散变量的更新就是更新下一个采样时刻的状态变量,在outputs函数中对下一采样时刻处理得到下一采样时刻的输出结果。
有同学会问程序中写的式sys = x + (A * x + B * u) * Ts呢?x代表的x(k)应该好理解,但是左边为什么是sys而不是x(k + 1),首先malupdate函数的输出只有一个sys,其次sys会通过中间变量x传输到Output的x里面,所以这里的sys可以代表x(k + 1)。
到这里小伙伴们应该都清楚了,但是我是怎么验证我写的s-function函数是对s函数这一文章中写的式错的呢?很好办直接对状态方程建立simulink模型看图像和自己写的s-function模型的图像是否一致不就完了。
simulink中的模型

为了便于观看左边是状态变量x建立的模型,右边是表示输出y的模型,它们之间是使用goto和from模块结合的和直接连线是一样的
图像结果是

为了便于对比这里将s-function中模型的图像也放在这里左边的是状态方程搭建模型的图像,右边是s-function模型的图像,是不是一模一样,显然s函数这篇文章中的图像是有问题的。
s函数中第一个程序修改(介绍function sys = mlupdate(t, x, u)用法)的更多相关文章
- PHP函数中默认参数的的写法
函数可以定义 C++ 风格的标量参数默认值,如下所示: Example #3 在函数中使用默认参数 <?php function makecoffee($type = "cappucc ...
- (转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用
http://blog.csdn.net/linjf520/article/details/8746064 大家在使用Function.apply或是call时,是否发现,第一个参数不知道怎么用,赋值 ...
- php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组)
php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组) 一.总结 牛客网和洛谷一样,是真的好用 二.php重建二叉树 输入某二 ...
- javascript中,一个js中的函数,第一句var _this = this;为什么要这样做?
javascript中,一个js中的函数,第一句var _this = this;为什么要这样做? 下面是源码: 下面这段代码是常用的网站首页,自动切换span或者tabbar来变更List显示内容的 ...
- javascript函数中with的介绍
/*js函数中with函数的用法分析定义 方便用来引用某个对象中已有的属性但是不能用来给对象添加属性 要给对象创建新的属性 必须明确的引用该对象*/代码格式with(object) statement ...
- JS中的函数声明和函数表达式的区别,即function(){}和var function(){},以及变量提升、作用域和作用域链
一.前言 Uncaught TypeError: ... is not a function function max(){}表示函数声明,可以放在代码的任何位置,也可以在任何地方成功调用: var ...
- Unity 脚本中的主要函数的 执行顺序及其介绍
Awake ->OnEable-> Start -> FixedUpdate-> Update -> LateUpdate ->OnGUI ->OnDisa ...
- lua解析脚本过程中的关键数据结构介绍
在这一篇文章中我先来介绍一下lua解析一个脚本文件时要用到的一些关键的数据结构,为将来的一系列代码分析打下一个良好的基础.在整个过程中,比较重要的几个源码文件分别是:llex.h,lparse.h.l ...
- Javascript函数中的高级运用
先介绍一下js中的高阶函数,所谓的高阶函数就是,一个函数中的参数是一个函数或者返回的是一个函数,就称为高阶函数. js中已经提高了一下高阶函数,使用起来非常棒,当然我们也可以自己实现,我介绍几种ES5 ...
随机推荐
- spring 中<ref parent="">标签是什么意思;ref标签与ref属性有什么不同;子容器如何引用父容器的bean
spring的配置文件可能会有多个<property name="a" ref="b" />就是找当前配置文件里的bean 也就是id为b的 < ...
- linux 解决磁盘占用100%
df -h 查看磁盘使用情况 ll -h 查看文件的大小 使用如下命令查找大于100M的大文件,发现有几个日志文件及临时文件比较大,使用rm –rf删除即可. find / -size +10 ...
- AcWing 207. 球形空间产生器
传送门 思路: 设球心坐标为(x1,x2,...,xn),有 ,由此我们可以列出N+1个二次方程,我们可以对前后两个方程做差,来得到N个一次方程,同时可以消掉常数C,第i个方程即 那么我们就可以直接采 ...
- jvm添加jmx远程监控
调JVM监控的时候需要远程连接机器,所以服务器需要开放JMX协议,配置如下. 现在我的项目是jboot-jfinal项目,用的是undertow容器,在启动脚本里面加入 JAVA_OPTS=" ...
- 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)
前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...
- 实例化类对象及类的属性set方法使用不当
类的属性中set方法操作数据库,新建类对象并给其赋值时总会触发该set方法,而导致不期望的错乱: 库位类Storage,其中传感器状态SensorStatus和逻辑状态LogicStatus有一定的关 ...
- CDN网络科普小文(小说版)
引言 作为公司 cdn 小组的一名小码仔,我为写一篇 cdn 的科普文章准备了好一段时间(大概有一个多月没有更新我的社交账号了). 在我刚进入公司,培训完,进入小组,了解到我们做的是 cdn 相关的工 ...
- DNS服务/etc/rndc.key was found解决办法
问题: [root@localhost ~]# rndc reload rndc: neither /etc/rndc.conf nor /etc/rndc.key was found 解决办法: R ...
- 自动化安装操作系统(Centos7+PXE+Cobbler+kickstart)
一.简介 PXE称作是一种引导方式而不是安装方式似乎更加准确,PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动,但是有一个前提 ...
- linux shell编程流程控制
条件选择 单分支条件 多分支条件 选择执行if语句 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 f ...