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 ...
随机推荐
- (五)目标检测算法之Faster R-CNN
系列博客链接: (一)目标检测概述 https://www.cnblogs.com/kongweisi/p/10894415.html (二)目标检测算法之R-CNN https://www.cnbl ...
- HarmonyOS方舟开发框架容器类API的介绍与使用
作者:liuxin,华为高级工程师 容器类,顾名思义就是存储的类,用于存储各种数据类型的元素,并具备一系列处理数据元素的方法.在方舟开发框架中,容器类采用了类似静态的语言来实现,并通过NAPI框架对外 ...
- C/C++ 大型工程工具链搭建
一.配置环境要求 C/C++ 编译器 此项有系统区别,如果是 Windows 平台,那么可以下载 VS2022 社区版,它自带 MSVC 编译器.如果嫌它太笨重,也可以直接下载 MSVC 再发行组件. ...
- php 23种设计模型 - 代理模式
代理模式(Proxy) 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 介 ...
- gitee中项目到运行操作,包括:打包、热部署、数据库操作
使用的工具:window10.IDEA 2018.2.3 .navicat110_premium.Git-2.23 1.idea导入gitee代码 复制项目地址 选择git工具 粘贴地址,点击clon ...
- ArcMap操作随记(12)
1.[取色器]工具 [自定义]|[自定义模式]|[命令] 2.批量修改符号 [符号系统]→右键,[所有符号的属性] 3.将地图元素转换为图形 转换工具 4.好看的地图边框 [布局视图]→数据框上右键→ ...
- 不带头结点的单链表(基于c语言)
本篇文章的代码大多使用无头结点的单链表: 相关定义: #include <stdio.h> #include <stdlib.h> #include <assert.h& ...
- SpringBoot 中实现跨域的几种方式
一.为什么会出现跨域问题 出于浏览器的同源策略限制.同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响. ...
- ubuntu20 源码安装nginx以及常用命令
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 ubuntu下安装nginx 个人建议还是不要自己apt-get安装,反正最后加模块还是得用源码编译安装那一套流程 下的慢的该换源换源,该换网换网 ...
- 在 Ubuntu 上使用源码安装 OpenResty
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 本文将介绍如何在 Ubuntu 上使用源码安装 OpenResty. 目标 Ubuntu 18.04 OpenResty 1.19.3.2 安装依 ...