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函数中积分程序更改的更多相关文章

  1. 重新认识Java中的程序入口即主函数各组成部分

    主函数各组成部分深入理解 public static void main(String[] agrs) 主函数:是一个特殊的函数,作为程序的入口,可以被JVM调用 主函数的定义: public:代表着 ...

  2. linux中应用程序main函数中没有开辟进程的,它应该在那个进程中运行呢?

    1.main函数是一个进程还是一个线程? 不知道你是用c创建的,还是用java创建的. 因为它们都是以main()做为入口开始运行的. 是一个线程,同时还是一个进程. 在现在的操作系统中,都是多线程的 ...

  3. C语言中的程序终止函数

    在C语言的标准库<stdlib.h>中提供了一些与正常或者不正常的程序终止有关的函数,下面分别对其进行简单介绍. 参考文献: [1] C和指针,P298,342 [2] C程序设计语言现代 ...

  4. (转)Java程序利用main函数中args参数实现参数的传递

    Java程序利用main函数中args参数实现参数的传递 1.运行Java程序的同时,可以通过输入参数给main函数中的接收参数数组args[],供程序内部使用!即当你在Java命令行后面带上参数,J ...

  5. 从Win32程序中的主函数中获取命令行参数

    在标准C或者Win32控制台程序的main函数中,它们都有两个参数:"argc" 和 "argv",如下所示: int main(int argc, char ...

  6. 问题:C#控制台程序参数;结果:设置与读取C#控制台应用程序Main函数中的参数args

    设置与读取C#控制台应用程序Main函数中的参数args 在项目属性面版->调试->命令行参数设置.空格分隔.读取:string[] str = Environment.GetComman ...

  7. 学习旧岛小程序 (5) observer 函数中修改属性的值

    不要在一个属性的 observer  函数中修改属性的值 不然会造成内存泄露 错误代码: properties: { /* 期刊号 */ index: { type: String, observer ...

  8. C指针(2)——指针在函数中的应用(程序讲解)

    3-1.c指针用作函数参数 #include<stdio.h> typedef unsigned char uint8_t; //类型自定义,通过typedef语句重新把unsigned ...

  9. 【spring 后台跳转前台】使用ajax访问的后台,后台正常执行,返回数据,但是不能进入前台的ajax回调函数中

    问题: 使用ajax访问的后台,后台正常执行,并且正常返回数据,但是不能进入前台的ajax回调函数中 问题展示:  问题解决: 最后发现是因为后台的方法并未加注解:@ResponseBody,导致方法 ...

随机推荐

  1. Qt:QList、QStringList

    QList 0.说明 QList<T> 一个QList是存储相同类型一组数据的列表. QStringList是从QList<String>继承而来,并添加了一些好用的方法,如j ...

  2. bower install 报错fatal: unable to access 'https://github.com/angular/bower-angular-touch.git/'类错误解决方法

    bower install时出现很多unable to access 'https://github.com/angular/bower-angular-touch.git/'类似的错误, 方法一:( ...

  3. Centos部署Loki日志聚合系统

    关于一些日志聚合由来及原理科普见我的另外一篇 <编程入门之日志聚合系统> https://www.cnblogs.com/uncleguo/p/15948763.html Loki日志聚合 ...

  4. 解决矩池云GPU显存未释放问题

    很多用户反馈说终止程序之后,显存依然被占用,这里我们提供了两种解决方案,帮助用户解决这个问题. nvidia-smi查看 我们可以先用如下命令 nvidia-smi 查看一下当前GPU进程情况. _ ...

  5. elasticsearch的安装与使用

    1:官网进行下载 https://www.elastic.co/cn/elasticsearch/ 2:这里我用的是7.15.2 3:进行下载解压至d 盘 4:接下来我们cmd 切换目录进行运行 5: ...

  6. 分页PHP

    <?php//1.连接数据库$link = mysqli_connect('127.0.0.1','root','root','1906');//2.设置字符集mysqli_set_charse ...

  7. Kubernetes系列(一)Pod

    作者: LemonNan 原文地址: https://juejin.im/post/6862733649272537102 简单介绍 Pod 在 kubernetes 中是一个非常重要的基本概念, 别 ...

  8. 【一】工程配置与电机控制part1

    前言 学校发的无刷电机: 我们准备的有刷电机: 带霍尔编码器! 电机参数: 名称:驰名电机(直流减速电机) 型号:JGA25-370 电压:12V 转数:1360r/min 做云台,核心是使用PID控 ...

  9. ROS第一次课作业分享

    ROS第一次课作业分享 2021年夏季学期学院开设了ROS的相关课程,最近在复习相关知识,正好做一下整理.下面是第一次作业的要求: 编写一个ROS节点,具备以下功能: 读取小海龟仿真器的/turtle ...

  10. JDBC快速入门(附Java通过jar包连接MySQL数据库)

    •通过jar包连接mysql数据库 •下载jar包 Java 连接 MySQL 需要驱动包,官网下载地址为MySQL驱动包官网下载,选择适合的jar包版本进行安装 (记得安装的地址,下面导入包时会用到 ...