s函数中积分程序更改
- function [sys,x0,str,ts,simStateCompliance] = int_hyo(t,x,u,flag)
- switch flag,
- case 0,
- [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
- case 1,
- sys=mdlDerivatives(t,x,u);
- case 2,
- sys=mdlUpdate(t,x,u);
- case 3,
- sys=mdlOutputs(t,x,u);
- 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 = 1;
- sizes.NumDiscStates = 0;
- sizes.NumOutputs = 1;
- sizes.NumInputs = 1;
- sizes.DirFeedthrough = 0;
- sizes.NumSampleTimes = 1; % at least one sample time is needed
- sys = simsizes(sizes);
- x0 = [-1]; %之前这里是0,改为1,应为x0代表-cos(t)在0初始时刻应该为-1
- str = [];
- ts = [0 0];
- simStateCompliance = 'UnknownSimState';
- function sys=mdlDerivatives(t,x,u)
- sys = u;
- function sys=mdlUpdate(t,x,u)
- sys=[];
- function sys=mdlOutputs(t,x,u)
- sys=x ;
- function sys=mdlGetTimeOfNextVarHit(t,x,u)
- sampleTime = 1; % Example, set the next hit to be one second later.
- sys = t + sampleTime;
- function sys=mdlTerminate(t,x,u)
- sys = [];
simulink模型为
图像为
上面的x0 = [-1]; %之前这里是0,改为1,应为x0代表-cos(t)在0初始时刻应该为-1为什么这么改?
这是关于状态变量是什么的问题(x0表示状态变量,赋值是表示初始时刻状态变量的值),如果状态变量表示x = sin(t)时,这里为0,但是根据程序来看这里的状态变量选择的并不是x = sin(t),而是x = -cos(t),为什么这么说呢?
因为程序中调用了
- function sys=mdlDerivatives(t,x,u)
- sys = u;
- function sys=mdlOutputs(t,x,u)
- sys=x ;
输入(即sint(t))积分结果通过sys间接给了x状态变量,x是一个表示sin(t)积分后的变量,你想想这个状态变量到底是什么,不就是x = -cos(t)吗?如果不明白为什么积分后间接给x状态变量这句话,不要着急下面一篇文章能够让你清楚mdlDerivatives函数内部的原理
之前看到s函数那篇文章中积分这一节程序时,看到最后的图像感觉有问题,但是不知道程序中哪个地方出错了,主要还是不是很理解function sys=mdlDerivatives(t,x,u)的用法。看了一个博主的文章瞬间对这个子函数理解了,在这里将此博主的文章搬运过来便于阅读
原文链接:https://blog.csdn.net/qq_43159983/article/details/104644017
Matlab S函数 function sys=mdlDerivatives(t,x,u)
设函数为 h’’ = 1/J*(ut+dt)
1 s函数里 的x状态含义:
状态1: x(1) —表示状态值h
状态2: x(2) —表示状态值的导数(或称速度)h’
2 function sys=mdlDerivatives(t,x,u)
在控制系统中,该函数可用于描述微分方程,例如描述被控对象和自适应率等,并采用数值分析方法(如ODE方法)实现模型的自动求解。如下:
- function sys=mdlDerivatives(t,x,u)
- J=2;
- dt=sin(t);
- ut=u(1);
- sys(1)=x(2);
- sys(2)=1/J*(ut+dt); //注: 1/J*(ut+dt)为一个二阶导函数
- function sys=mdlOutputs(t,x,u)
- sys(1)=x(1);
- sys(2)=x(2);
sys(1)根据x(2) 解出 函数里变量值 h ——状态1,即x(2)积分后赋给sys(1)。
sys(2)根据二阶导函数’1/J*(ut+dt)‘解出一阶导数 h’ ——状态2,即1/J*(ut+dt)积分后赋给sys(2)。
最后,sys通过中间变量x传输到Output的x里面。
这里和simulink中的积分模块做下对比
simulink中的模型
这里1/s模块内需要设置初始状态为-1(也是表示的-cos(t)初始时刻的值)
图像结果
s函数中积分程序更改的更多相关文章
- 重新认识Java中的程序入口即主函数各组成部分
主函数各组成部分深入理解 public static void main(String[] agrs) 主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用 主函数的定义: public:代表着 ...
- linux中应用程序main函数中没有开辟进程的,它应该在那个进程中运行呢?
1.main函数是一个进程还是一个线程? 不知道你是用c创建的,还是用java创建的. 因为它们都是以main()做为入口开始运行的. 是一个线程,同时还是一个进程. 在现在的操作系统中,都是多线程的 ...
- C语言中的程序终止函数
在C语言的标准库<stdlib.h>中提供了一些与正常或者不正常的程序终止有关的函数,下面分别对其进行简单介绍. 参考文献: [1] C和指针,P298,342 [2] C程序设计语言现代 ...
- (转)Java程序利用main函数中args参数实现参数的传递
Java程序利用main函数中args参数实现参数的传递 1.运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,J ...
- 从Win32程序中的主函数中获取命令行参数
在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...
- 问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args
设置与读取C#控制台应用程序Main函数中的参数args 在项目属性面版->调试->命令行参数设置.空格分隔.读取:string[] str = Environment.GetComman ...
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: { /* 期刊号 */ index: { type: String, observer ...
- C指针(2)——指针在函数中的应用(程序讲解)
3-1.c指针用作函数参数 #include<stdio.h> typedef unsigned char uint8_t; //类型自定义,通过typedef语句重新把unsigned ...
- 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中
问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示: 问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...
随机推荐
- linux光盘使用、rpm软件包、yum软件仓库安装使用
转至:https://blog.51cto.com/zpeng/1532520 一.光盘文件使用 1,RHEL5(x86_64)光盘结构 Cluster //集群二进制包 C ...
- Qt:QDir
0.说明 QDir提供了访问目录及目录下内容的类. QDir既可以用于访问文件系统,也可以用于访问Qt 资源系统(Qt's resource system.). Qt用 "/" 作 ...
- PhpStudy代码执行后门
0x00 概述 只需要两个参数 Accept-Encoding: gzip,deflate Accept-Charset: Base64编码(PHP代码) 0x01 利用代码 加群可以下载:87369 ...
- List、Set、Map有什么异同(详解)
引言:Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 Java集合框架(常用接口): Collection 接口存储一组不唯一,无序的对象(父类接口 ...
- 字符集编码(四):UTF
在前面文章<字符集编码(中):Unicode>中我们聊了 Unicode 标准并提到其有三种实现形式:UTF-16.UTF-8 和 UTF-32,本篇我们就具体聊聊这三种 UTF 是怎么实 ...
- CVE-2021-3129:Laravel远程代码漏洞复现分析
摘要:本文主要为大家带来CVE-2021-3129漏洞复现分析,为大家在日常工作中提供帮助. 本文分享自华为云社区<CVE-2021-3129 分析>,作者:Xuuuu . CVE-202 ...
- OpenSSL CVE-2022-0778漏洞问题复现与非法证书构造
本文介绍CVE-2022 0778漏洞及其复现方法,并精心构造了具有一个非法椭圆曲线参数的证书可以触发该漏洞. 本博客已迁移至CatBro's Blog,那是我自己搭建的个人博客,欢迎关注.本文链接 ...
- java 知识点梳理
1.ArrayList与linkedList 区别 ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦; 优点是查找比较快. Lin ...
- JavaWeb 03_创建servlet项目(详细)
一.创建web项目 1. File--New--Project 2. 设置项目相关信息 3. 设置项目名称及工作空间 4. web项目目录结构如下 二.Servlet的实现 1. 新建包---类 ...
- 【公告】淘宝 npm 域名即将切换 && npmmirror 重构升级
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 前言 本文将包括两部分内容: 淘宝 npm 域名即将停止解析 npmmirror 镜像站大重构升级 原淘宝 npm 域名即将停止解析 正如在< ...