当前位置:文档之家› matlab-simulink中文帮助手册

matlab-simulink中文帮助手册

matlab-simulink中文帮助手册
matlab-simulink中文帮助手册

北京电子科技学院

毕业设计外文资料翻译

系别电子信息工程系

专业电子信息工程

班级0911

学生姓名崔琦

导师姓名周玉坤

起止时间 2013年2月至 2013年6月

目录

Simulink工作原理 (4)

导言 (4)

动态系统建模 (5)

框图语义 (5)

建立模型 (6)

时间 (6)

状态 (6)

用状态工作执行状态 (7)

连续时间系统 (7)

离散时间系统 (8)

混合系统建模 (8)

模块参数 (9)

可调的参数 (9)

模块采样时间 (10)

自定义模块 (11)

系统和子系统 (11)

虚拟子系统 (11)

非虚拟子系统 (11)

动态系统仿真 (14)

模型编译 (14)

链接阶段 (14)

方法执行清单 (15)

模块优先级 (15)

仿真代数回路 (15)

回路迭代 (16)

求解 (17)

固定步长的解与可变步长的解 (17)

连续与离散的解 (17)

小调时间步 (18)

形状保存....................................................................................... 错误!未定义书签。 过零点检测 (18)

过零点 (18)

执行例子:饱和度模块 (19)

说明过量过零点检测的影响 (19)

反弹球演示 (20)

双反弹球演示 (20)

如何模拟过零 (21)

防止过零点错误 (21)

过零点算法 (22)

有过零点的模块 (23)

代数回路 (24)

突出代数回路 (26)

消除代数回路 (27)

Simulink工作原理

导言

Simulink是一个软件包,它可以让您模拟和分析输出随时间而改变的系统。这些系统通常被称为动态系统。该仿真软件可用于探索范围广泛的现实世界中的动态系统,包括集成电路,减震器,制动系统,以及许多其他的电气、机械和热力系统。本节说明Simulink的工作原理。

基于Simulink的系统仿真是一个动态的过程,分为两步:首先,用户利用仿真模型编辑器创建一个框图,模型图形化地描述了系统中基于时间输入,状态和输出之间的数学关系。然后用户命令Simulink软件从指定的开始时间到指定的停止时间,模拟运行模型所代表的系统。

动态系统建模

框图语义

一个simulink结构图模型是对动态系统的绘图式的数学描述。而动态系统的数学模型是由一组方程来描述的。这些结构图可用来描述代数方程,微分方程,或者是不定方程。

一个标准的动态系统结构图由模块和线条(信号)组成。这些结构图来源于工程领域,例如,反馈控制理论(Feedback Control Theory)和信号处理理论(Signal Processing)。结构图中的模块从本质上描述了动态系统的基本特征。结构图中每个基本的连接结构图是动态系统中信号关系的图形化表示。结构图中的全部模块和线条共同描述了这个动态系统。

Simulink通过两种典型的模块:虚拟模块和非虚拟模块来扩展典型的结构图模型。

虚拟模块代表子系统。虚拟模块的存在仅是为了方便组织图形,他们并不影

响方程所描述的框图模型。您可以使用虚拟模块以改善模型的可读性。

一般情况下,模块和线可以用来描述许多“计算”的模式。典型的一个例子是一个流程图。流程图包括模块和线,但是无法使用一般动态系统流程图语言来

描述。

术语“基于时间的模块框图”是用来区分动力系统的框图与其他形式的框图,且除非文中有特别的说明,框图(或模型)一般是指一个基于时间的框图(或模型):

1.系统时间开始于一个用户指定的“开始时间”,并结束于用户指定的“停止

时间。对这些关系进行的一个评估被称为时间步长。

2.信号代表了工程量随时间的变化,其生存周期从方框图的开始时间直至结

束。

3.信号和状态变量之间的关系由模块代表的方程所决定。这些方程定义了输

入信号,输出信号和状态变量之间的关系,即建立方程所需要的系数。

建立模型

Simulink产品为您提供了一个图形编辑器,可以让您创建和连接各种类型的实例模块(见创建一个模型),通过模块库从模块类型库中选择相应的模块(见模块)。用户还可以创建自己的块并使用Simulink编辑器来创建在同一张图上的实例。用户定义的块被称为自定义模块。

时间

时间是一个模块框图固有组成部分,模块框图模拟的结果是随着时间而改变的。换句话说,模块框图代表了一个动态系统瞬间的状态。确定一个系统随着时间推移引起的行为,从而求解模型反复的时间间隔,称为模型的时间步长,即模型从开始到结束的时间。求解一个连续时间步长模型的过程被称为对该模型所代表的模拟系统进行仿真。

状态

通常情况下一些系统的当前值,输出的值都是当前的一些变量,这些变量被称为状态变量。系统从框图中计算当前时间步长下的状态的值并保存,用于计算下一个时间步长时候的状态的值。这项任务通常在仿真期间模型定义状态的时候执行。

在Simulink模型中,有两种状态:离散和连续状态。连续状态是不断变化的状态。连续状态的一个例子就是汽车的位置和速度。离散状态是一个近似的连续状态,即用有限(周期或非周期)的时间间隔来修正的连续状态。一个离散状态的例子就是汽车数字里程表上每秒显示的位置,这不是连续的。在这种限制条件下,当一个离散状态的时间间隔趋近于0的时候,这个离散状态也就趋近于连续状态。特别是,当一个模块需要部分或全部上一级的输出以计算当前的输出时,这个模块需要的是在两个时间步长之间保存的状态。:

定义连续状态系统的模块包括以下标准的Simulink模块:

1.积分模块

2.状态空间模块

3.传递函数模块

4.变量迁移延迟模块

5.零极点模块

一个模型总的状态数量是各个模块所定义的状态的总和。确定一个框图中的状态数量,要分解这个框图中所包含的各种类型的模块,然后才能根据各个模块所定义的状态来计算总的模块的数量。这项任务在模型仿真的汇编阶段执行。

用状态工具操作状态

下列的工具在仿真期间用来确定、初始化和运行模型的状态:

1.model命令展示了模型所定义的状态的一些相关信息,包括的模型定义的总的

状态数量,定义每一个状态的模块,以及各个状态的初始值等。

2.Simulink调试器显示了仿真期间状态在每一个时间步长的值。

3.模型的参数配置对话框中的数据导入/导出窗格(见导入和导出数据)可以让

您可以指定状态的初始值,并且可以在以队列或矩阵的形式记录仿真期间状态在每一个时间步长的值。

4.块参数对话框可以让您对采用连续状态的模块命名(如积分模块)。这可以简

化分析数据记录下来供状态使用,尤其是当一个模块存在多个状态的时候。

连续时间系统

计算连续状态需要知道它的变化率,或者是导数。由于连续系统的变化率代表了其自身在不断变化(即本身是一个状态),计算连续状态的当前值需要在仿真一开始的时候对导数进行积分。因此对一个连续状态的系统建模需要对在每个时间步长上计算状态的导数的过程进行说明。仿真框图使用积分模块来表示积分,以及用一连串的模块连接到积分模块的输入端以此来表示对系统状态求导的方法。连接到积分模块输入端的一连串的模块框图对应的是常微分方程(ODE)。

一般情况下,除了简单的动态系统,是没有办法对现实中的用常微分方程描述的动态系统进行积分的。Simulink软件自带有最常见的常微分方程的积分方法,同时允许用户在执行仿真时,选择哪一种方法来对状态进行积分。要计算一个连续时间系统状态的当前值,就必须对仿真开始时刻的初始值进行积分。积分结果的精确性取决于两个时间步长之间的间隔大小。一些常微分方程求解器,称为可变时间步长求解器,可以根据状态的变化率,自动改变时间步长的间隔,以在模拟进行过程中实现特定的精度。用户可以指定时间间隔。为了尽量减少计算工作量,变步长求解器通过最大限度加大状态的变化率来达到用户指定的精确度。

离散时间系统

要计算离散时间系统,需要知道系统当前时刻的值和上一时刻的值之间的关系,这种关系被描述为系统的更新功能。离散时间系统的值不仅仅取决与上一个时间步长的值,还取决于系统输入,因此,对离散系统的建模还需要对上一个时间步长的输入进行建模。Simulink框图使用被称为离散模块的特定类型的模块,来指定更新功能以及连接在离散模块端口的一连串模块,这些模块可以根据上一个时间步长的输入对系统进行建模。

和连续时间状态一样,离散时间状态对仿真的时间步长做了限制。具体来说,步长必须确保模型所有的采样时间都能够落如其中。这项任务指派一组叫离散求解器的Simulink系统来执行。Simulink提供了两个离散求解器:固定步长离散求解和可变步长离散求解。固定步长离散求解器确定一个固定的步长,该步长能够满足系统中所有离散状态的采样时间,不管在满足采样时间的时刻,状态是否发生变化。相比之下,变步长离散求解器改变步长以确保只有在离散状态发生变化的时候才满足采样时间的要求。

混合系统

混合系统是一个既有离散状态和连续状态的系统。严格地说,任何包含有连续和离散采样时间的系统都当成混合系统,假设,该模型包含离散和连续状态。Simulink软件通过离散求解器所确定的下一抽样时间命中,作为连续求解器额外的

制约因素来满足这一要求。连续状态求解器必须选择一个接近仿真上限时间但又不超过下一步采样时间的时间步长。连续状态求解器可以在短的时间步长的命中下一个采样的时间,以满足其精确度约束,但即便精确度允许,它也不能超过下一个采样时间。

模块参数

很多标准的模块的关键功能都是参数化的。例如,Simulink常数模块的常数值时一个参数每个参数化的模块都有一个参数设置对话框,可以让您设置参数的值。您可以使用MATLAB公式来指定参数值。在仿真开始前,Simulink会对公式进行估算。这使您能够确定最适合的参数的值。

一个参数化的模块有效的代表了一个家族的相似的模块。例如,当创建一个模型的时候,你可以设置个别实例的模块的参数的值,使每个个体的行为都是不同的。因为它允许每个标准模块代表一个家族的模块,模块参数化大大提高了标准Simulink库的建模能力。

可调的参数

很多模块的参数都是可调的。可调参数是不用编译模型就能够改变的参数(见模型汇编以了解更多编译模型的信息)。举例来说,增益模块的增益参数时可以调整的。在仿真运行过程中,你可以改变模块的增益。如果在仿真运行过程中,一个参数时不可调的,那么,控制对话框中将设置参数已被禁用。

注意:在仿真运行过程中,你不能通过对话框或模型浏览器来改变资源模块的参数值。打开一个可调参数模块的对话框会导致仿真暂停。当仿真暂停的时候,你可以改变对话框中显示的参数值。但是,您必须关闭该对话框,以使更改生效,并允许仿真继续。

应当指出,参数的变化不是立即发生,而是先排队等候,然后在模型的下一个时间步长时开始执行。回到我们常数块的例子中,它定义的函数是:signal(t) =

Constant Value。如果我们允许常数值迅速变化,那么,参数值发生变化这一刻的解将时无效的。因此,我们必须排队等候以在下一个时间步长处理。

您可以使用最优化窗格中的内置的参数选项来指定系统中所有的参数都时不可调的,除了你所指定的那些。这可以加快执行大型模型的速度,而且也可以加快模型生成代码的速度。见参数配置对话框中的更多信息。

模块采样时间

每个仿真模块都定义了采样时间以界定模块什么时候开始执行。Sample Time 参数来指定模块的采样时间。共同的选择包括离散的,持续的,以及继承采样时间。

共同采样时间类型采样时间实例

离散[Ts, To] 延迟,数字滤波器

连续[0, 0] 积分

继承[–1, 0] 增益,加和对离散模块来说,模块的采样时间是一个向量连续采样的时间间隔。与此相反,非离散模块的采样时间用零,负整数或无穷大的数来描述。(见如何查看采样时间信息)例如,有一个采样时间为[0,0]的连续模块,并用来对连续状态系统建模(如汽车加速)。鉴于表明采样时间类型的继承模块象征性地为[-1,0]和Simulink 然后决定的实际的值为基础的背景下,继承模块的模式。

请注意,并非所有模块都能接受所有类型的采样时间。例如,离散模块不能接受连续采样时间。

出于可视化考虑,Simulink允许选择颜色用来编码和注释任何框图来说明采样时间的类型和速度。在一个图例中,你可以使用任意的颜色和注释。欲了解更多关于采样时间的讨论,见(如何查看采样时间信息)。

自定义模块

您可以创建自定义模块库,在您的模型中你可以使用它们。要创建自定义图形模块,利用Simulink的封装技术,按照Simulink子系统的要求将模块封装起来,并提供一个参数对话框。要创建一个编程模块,您可以建立一个包含模块系统函数的或,(见编写S -函数)。由此产生的文件被称为S-函数。然后,您就可以将S函数与您模型中模块具体的结合起来。您可以通过封装子系统添加一个参数对话框到S函数模块,同时将参数对话框添加到子系统中。

系统和子系统

Simulink的模块可以包含不同的层次。每一层由一个子系统来定义。子系统是整个模块框图的一部分,但是它一点都不影响模型框图的功能。子系统主要为组织框图方面提供帮助。子系统不能单独的定义一个框图。

Simulink软件区分两种不同类型的子系统:虚拟子系统和非虚拟子系统。主要的不同之处在于,非虚拟子系统提供了控制子系统进行评估的能力。

虚拟子系统

模型中的虚拟子系统提供了图形化的层次划分。虚拟子系统不影响系统执行。在仿真执行期间,仿真引擎使所有虚拟子系统变无效。这种处理方式与C或C++中的宏编程语言非常相似。一般来说,会有一个被称为根系统的系统顶层框图,还有一些低级别的系统来自非虚拟子系统和其他框图。您将在Simulink调试器中看到这些系统。建立这些内部系统通常被称为扁平化示范。

非虚拟子系统

非虚拟子系统提供图形化执行的功能。仿真引擎将非虚拟子系统作为一个单一的单位来执行。您可以创建条件执行子系统,该子系统在一个跃迁发生时触发,例如函数调用的时候执行(见创建条件子系统)。只有当所有的输入都是有效的

时候,非虚拟子系统中的模块才执行。所有的非虚拟子系统都用粗的线条画出来的。Simulink定义了以下的非虚拟子系统:

(1)原子子系统

原子子系统的主要特性是原子子系统中的模块都作为一个单一的单位来执行。这在模型执行时提供了有利的分组功能。任何仿真模块都可以放置在一个原子子系统中,包括不同执行速率的模块。在虚拟子系统中你可以选择(见原子子系统模块以获取更多信息)。

(2)激活子系统

激活子系统是当控制信号为正值时每一步仿真都执行的子系统。

激活子系统有一个唯一的控制信号输入端口,它可以是标量或是向量输入端口:

1.如果输入是标量,当输入值大于零的时候子系统即执行;

2.如果输入是向量,则当输入向量的任意以元素值大于零时,子系统就执行。

例如:如果控制输入信号是以正弦波,则子系统在激活和非激活两种状态中交替。Simulink使用过零点的斜率来确定是否发生了激活事件。如果信号穿越了零点,且斜率为正,子系统将变成运行状态;如果信号穿越零点时,斜率为负,子系统将变成非激活状态。

(3)触发子系统

触发子系统在信号驱动子系统触发端口上升或下降沿时执行。触发边缘的方向由触发端口模块的所定义。Simulink限制了放置在一个触发子系统中的,没有明确的采样时间的模块的类型(即模块内的子系统必须有一个为-1的采样时间),因为触发子系统内容的执行时非周期改变的。您可以在一个子系统中放置一个触发端口模块来创建一个触发子系统。Stateflow图表也可以有Stateflow编辑器定义的触发端口。从仿真的角度来看,触发子系统和触发图表没有任何区别。

(4)函数调用子系统

函数调用子系统是在仿真期间其他模块可以直接调用的子系统。它类似于一个程序设计上的函数。调用一个函数调用子系统相当于调用模块的输出方法,该子系统包含排序秩序。调用一个函数调用子系统的模块称为函数调用起始器。Stateflow,函数调用发生器,和S–函数模块都可以作为函数调用起始器。要创建一个函数调用子系统,从Simulink的端口及子系统库中拖动函数调用子系统模块

到您的模型中,然后将一个函数调用起始器连接到子系统顶端显示的函数调用端口。您还可以先在模型中创建以函数调用子系统,然后在子系统中建立一个触发模块,并将触发模块的触发类型设置为“函数调用”。你可以通过设置其采样时间类型为“触发”来设置一个函数调用子系统(默认)的周期。一个函数调用起始器可以调用一个触发功能调用子系统零次,一次或每个时间步长的倍数。触发函数调用子系统中的模块的采样时间必须设置为(-1)。

在一个时间步长上,函数调用起始器只能调用一个周期函数调用子系统一次,而且必须周期性的调用子系统。如果起始器不定期的调用一个周期函数调用子系统,仿真将停止,并显示一条错误消息。周期函数调用子系统中的模块可以指定一个非遗传性抽样时间或继承性的为(-1)的采样时间。指定一个非遗传性采样时间时间的所有模块必须指定同一采样时间,即如果一个模块指定1作为其采样时间,那么所有其他模块必须指定一个采样时间1或-1。如果一个函数调用起始器调用一个周期函数调用子系统的速率不同于子系统中的模块指定的采样时间,仿真将停止,并显示一条错误消息。

(5)激活的触发子系统

一个激活的触发子系统从本质上说基本上是一个触发子系统,该子系统在信号驱动的子系统触发端口显示上升或下降沿时。触发边缘的方向由触发端口模块的触发器类型参数定义。Simulink的限制了放置在一个激活的触发子系统中的,没有明确的采样时间的模块类型(即子系统内的模块必须有一个为-1的采样时间),因为触发子系统执行的内容是非周期性的。您可以在一个子系统中放置一个触发端口模块和激活端口模块来创建一个激活的触发子系统。

动态系统仿真

模型编译

首先,Simulink引擎调用模型编辑器,模型编辑器将图形化的模型转换成Simulink可执行的格式,这个过程称为模型的编译,特别是编辑器,在这个过程中主要完成以下工作:

1.评估模型的块参数表达式,以确定其价值;

2.确定信号的属性,如名称,数据类型,数字类型和维度,没有明确指定的

模型和检查,每块可以接受的信号连接到它的输入;

3.Simulink使用一个称为“属性传递”的程序来检测那些没有定义的属性。

该过程需要那些由输入的资源信号驱动的模块;

4.执行模块最优化;

5.用模型包含的模块替换虚拟子系统,以此来使模型层次变得单调(见求解

器);

6.确定块排序顺序(见控制和显示排序命令以了解更多信息);

7.确定所有模型中所有未指定采样时间的模块的采样时间(见传播采样时

间)。

链接阶段

在这一阶段,仿真引擎将为执行框图分配内存所需的工作领域(如信号,状态和运行时间参数)。它为内存分配和初始化数据结构,也为每个信息块存储运行时间。对于内置的模块,其主要运行数据结构时的一个区块被称为SimBlock。它可以储存指向块的输入和输出缓冲器和状态工作的载体。

执行清单

在连接阶段,仿真引擎也产生执行名单。这些名单列出了调用一个模型块的方法来计算它的输出的最有效的顺序。模型汇编阶段中生成模块排序名单就是用来建造执行名单的。

模块优先级

您可以指定更新的优先次序,以块为单位(见指定模块优先事项)。在执行更高优先级的块之前执行较低优先级的块。只要符合其模块排序规则,Simulink 就允许其分配权限。

仿真代数回路

一旦连接阶段完成后,模拟进入模拟回路阶段。在这一阶段,仿真计算引擎的状态和输出系统的时间间隔从模拟开始时间到结束时间,利用所提供的资料模型。历届的时间点,其中状态和输出计算被称为时间间隔。时间长度之间的间隔被称为步长。步长取决于类型的求解(见解决)计算系统的连续的状态、该系统的基本样本的时间(见系统采样时间管理)、以及该系统是否连续(见过零点检测)。

回路中的仿真阶段有两个阶段:初始化阶段和循环回路迭代阶段。循环回路开始的时候在初始化阶段发生一次。迭代阶段重复一次,时间步长从模拟开始时间到仿真停止时间。

开始时,仿真模型指定初始状态和系统的输出进行仿真。在每一个间隔,系统输入的新值,状态和输出计算,而该模型更新,以反映计算值。结束时,该模型反映了系统最后的输入,状态和输出的值。Simulink软件提供的数据显示和记录区块。您可以显示和/或日志中间结果,包括这些模型中的模块。

回路迭代

在每个时间步长,仿真引擎:

1.计算模型的输出。

仿真引擎援引仿真模型输出的方法启动这一步通过。该模型输出的方法又调用模型系统输出方法,该方法调用的输出方法的区块,该模型包含在该命令所指明的输出法执行名单中产生的链接阶段的仿真(见解决)。该系统输出方法通过下列论点每个区块输出方法:一个指向块的数据结构及SimBlock 结构。数据结构和SimBlock点信息的输出方法需要计算块的输出,包括它的位置输入缓冲器和输出缓冲器。

2.计算模型的状态。

仿真引擎通过援引求解来计算模型的状态。其中求解它援引取决于是否模型没有状态,只有离散状态,只有持续的状态,或在连续和离散的状态。

如果该模型只离散状态,仿真引擎调用离散求解选定的用户。计算求解的规模,时间步长必须涉及模型样本次数。然后调用Update方法模型。模型更新方法调用Update方法及其系统,该系统调用Update方法的每一个模块,该系统包含在该命令所指明的Update方法名单中产生的链接阶段。如果该模型只有连续系统,仿真引擎将调用连续求解指定的模型。根据不同的方法,求解要么在主要的时间步长间隔内输入微小的时间间隔求解模型输出,要么以积分的方法来计算模型的输出。这样做是为了提高状态计算的准确性。该模型积分工具的使用又援引相应的系统方法,其中援引模块输出及积分工具在该命令所指明的输出及积分工具的执行名单中产生。

3.检查连续模块的非连续状态。

过零点检测技术用来检测间断连续状态。(见过零点检测以了解更多信息)4.计算下一次一步的时间。

重复1到4步骤直到仿真停止。

求解

动态系统模拟通过在特定时间跨度使用模型所提供的资料,计算其在连续的时间间隔的状态。计算连续系统状态的过程称为模型的求解。没有单一的方法能解决所有的系统的模型。因此,一套特定的被称为解算器的程序,提供特别的办法来解决一个模型。配置参数对话框允许您选择最适合您的模型的求解器(见选择求解型)。

固定步长的解与可变步长的解

Simulink软件所提供的解分为两个基本类别:固定步长和可变步长。

模型求解固定步长解的时间间隔从开始到结束的模拟。大小的间隔称为步长。您可以指定步长或让求解选择步长。一般来说,减少步长提高结果的精确度,同时增加模拟系统所需要的时间。

在模拟的时候进行不同的步长变步长求解,步长增加减少时,模型的精度也迅速改变,当模型的状态发生变化缓慢时应增加步长,以避免不必要的时间间隔。计算步长增加了每一步的计算量,但可以减少总的步骤,因此,模拟的时间,需要保持一个指定的精度等级为迅速变化的模型或分段连续状态。

连续与离散的解

Simulink产品同时提供连续和离散的解。

连续求解器在目前的基础上和过去的时间间隔和积分状态使用数值积分计算

连续的模型。连续求解依赖单独模块来计算在每个时间步长上离散状态模型的值。数学家制定了各种各样的数值积分方法求解常微分方程(常微分方程),它们代表了连续动态系统的状态。一个广泛的设置可为固定和可变步长提供不断求解,其中每一项具体的ODE实现了一个解决方法(见选择求解型)。

离散解存在主要是为了解决纯粹的离散模型。他们为模型的下一个模拟计算时间步长。在执行这些计算时,他们依赖于每个区块模型更新其单独的离散状态。他们不能计算连续状态。

注意:

您必须使用一个连续求解来求既包含连续和离散的状态的模型的解,您不能使用离散解因为一个离散求解器不能处理连续状态的系统。如果,另一方面,您选择一个连续求解一个没有任何状态的模型或只是离散状态的系统,Simulink 软件使用离散求解。

Simulink提供两个分立求解:固定步长离散求解和可变步长离散求解。固定步长求解器选择默认步长,因此仿真速度不够快来跟踪模型中的变化最快的状态。变步长求解器调整仿真步长,以跟上模型实际离散状态的变化。这可避免不必要的间隔,从而缩短模拟时间(见系统采样时间管理)获取更多信息)。

小时间步长

一个小时间步长是一个细分的主要时间步。在每一个主要时间步提供求解结果时使用结果小的时间间隔,以提高在大的时间步长结果的准确性。

过零点检测

过零点

当相应的不连续状态发生时,过零点的函数就会从正值或者负值穿过零点。已记录的过零点变量在每个仿真间隔结束时更新,任何变量的变化,都被认为发生了过零点事件。如果有任何零点被发现,Simulink软件在过去和目前的值之间插值,每个变量改变的迹象,估计过零点的时间(即不连续)

可变步求解器动态调整步长的时间,当变量缓慢改变时,时间增长,当变量的迅速改变时,时间减小,导致所求的解附近存在许多连续的小间隔,因为可变正迅速改变在这一地区。这提高了准确性,但可能会导致过多的仿真次数。Simulink 软件使用过零点点检测的技术,以准确地找到间断而不用求助于过分小步长的间隔。通常这种技术提高了仿真的运行时间,但它也可以使一些仿真提前结束。

Simulink软件提供的两种算法:Nonadaptive和自适应。如需有关这些技术,见过零点检测算法。

执行例子:饱和度模块

Simulink的模块中使用过零点的一个例子是饱和度模块。过零点检测饱和度模块中有如下状态事件:

1.输入信号到达上限;

2.输入信号离开上限;

3.输入信号到达下限;

4.输入信号离开下限。

Simulink中定义其状态事件的模块,认为其具有固有的过零点。如果需要过零点事件的详细说明,则可使用Hit crossing模块。

状态事件的检测取决于内部的过零点信号的构造。从模块图中不能获取该信号。对于饱和度模块,用来检测上限过零点的信号是zcSignal=UpperLimit-u,其中U是输入信号。

过零点的信号具有方向属性,它们可以取如下的值:

1.上升:当信号升到或者升过0,或当信号离开0而成为正值时发生过零点。

2.下降:当信号降到或降过0,或者当信号离开0正在成为负值时发生过零

点。

3.兼有:在上述两种情况下都会发生过零点。

说明过量过零点检测的影响

在Simulink软件中有两个演示,说明零点的原理。

反弹球的例子演示了零点过多如何会导致仿真在预定完成时间前停止。

双反弹球例子演示了自适应算法如何根据两个不同的过零的要求成功地解决一个复杂的系统。

反弹球演示

在MATLAB的命令提示符中输入bounce。

一旦框图出现时,浏览参数配置对话框。证实该算法是Nonadaptive。

1.运行模型模拟时间为20秒。

2.仿真完成后,单击Scope模块,以显示结果。您可能需要按一下自动调整,

以获得一个明确的显示。使用范围缩放控制仔细研究仿真的最后部分。您

可以看到在最后时间点速度略高于零点。

3.改变模拟的运行时间为25秒,并运行仿真。在通过第20秒的模拟时间点

后不久这一次仿真将因为一个错误而停止。过度抖动的球一再接近零速度

已超过仿真预设的连续1000过零点的限制。虽然这种限制可通过调整连续

零通道中的参数配置参数对话框来提高,但在这种情况下,不允许仿真时

间为25秒。

4.转到配置参数对话框中,选择了自适应算法的算法下拉。

5.改变模拟的时间25秒,并运行仿真一次。

这一次的模拟运行完成,因为自适应算法防止过多的零通道的发生。

双反弹球演示

1.在MATLAB的命令提示符中输入“doublebounce”,以启动该演示。

2.在演示中,单击Nonadaptive按钮。演示将运行Nonadaptive算法。这是软

件的所有模型使用的默认设置。

3.请注意,两个球在不同的时间撞到地面和反弹。

4.仿真运行14秒后停止,因为左边的球已超过零过境限制。右边的球则悬在

半空中。

5.请点击错误消息将其清除。

6.点击按钮自适应运行的自适应算法仿真。

7.请注意,即使地面变化,从左边的球后离开20秒,这一次的模拟也能运行

完成。

开源科学计算软件Scilab及其教学应用

龙源期刊网 https://www.doczj.com/doc/451191853.html, 开源科学计算软件Scilab及其教学应用 作者:王凤蕊王文宏 来源:《中小学信息技术教育》2006年第11期 新的《高中数学课程标准》已将“数学建模”课设置为高中数学的一个专题课程。同时,高中物理、化学等课程的教与学活动也经常需要对各种问题进行数学建模和计算。因此,科学计算软件的使用能力应成为广大教师和学生的基本技能之一。 开源科学计算软件Scilab不仅能解决各种各样的计算问题,而且能将计算过程和结果可视化,同时还能模拟一些事物的变化过程。比如,在解析几何的学习中,可以借助Scilab动态可视化生成三维空间,加深学生的理解。 与商业科学计算软件Matlab相比,在功能上Scilab基本可以替代Matlab,且Scilab最诱人之处在于,它是一款开放源码的软件,使用正版软件完全免费。本文首先对Scilab的功能、特点、下载、安装与编程方法进行了简要介绍,最后结合两个实例探讨了其在中学教学中的应用。 一、Scilab简介 Scilab是法国国家信息与自动化研究院(INRIA) 开发的“开放源码”科学计算自由软件,它主要有数值计算、仿真与模拟、计算结果可视化等功能。Scilab数据类型丰富,可以方便实现各种矩阵运算,并允许用户在线建立各种自定义函数。此外,Scilab还具有图形显示功能,可实现各种常规形式的计算结果可视化。 Scilab是一种解释性语言,能运行于Windows、Linux以及Unix等操作系统环境下。作为开放源码的软件,Scilab的源代码、用户手册及二进制的可执行文件都是免费的。用户不仅可以在Scilab的许可证条件下自由使用该软件,还可以根据需要修改源代码,使之更加符合自身需要。此外,Scilab还包括一些应用于不同科学计算领域的工具箱,如科学计算、数学建模、信号处理、网络分析、决策优化、线性与非线性控制等。 二、Scilab的安装及运行

matlab中文电子书汇集

《MATLAB数据处理与应用》 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8787743&extra=&page=1 《战胜MATLAB必做练习50题》--满晓宇/罗捷--北京大学出版社--2001-11, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8684485&highlight=matlab matlab学习指导教程 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=9077453&highlight=matlab 《Matlab宝典》 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8787742&highlight=matlab MATLAB命令大全.pdf, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8872051&highlight=matlab MATLAB函数速查手册DOC文档, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=9036014&highlight=matlab matlab聚类工具箱教程, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8858415&highlight=matlab MATLAB高效编程技巧与应用25个案例分析, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=9062882&highlight=matlab 《MATLAB 遗传算法工具箱与应用》---雷英杰, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8787725&highlight=matlab 《基于MATLAB的系统分析与设计- - -模糊系统》---楼顺天---西安电子科技大学出版社, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab 自动控制:反馈的力量——使用MATLAB---特费斯---西安交通大学出版社 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab MATLAB高级语言及其在控制系统中的应用---韩九强---西安交通大学出版社---1997年06月第1版 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab MATLAB有限元分析与应用---P.I.Kattan---清华大学出版社----2004-04-01,版次:1 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab 反馈控制问题:使用MATLAB及其控制系统工具箱---(美)弗雷德里克(Frederick,D.K.),(美)周(Chow,J.H.),张彦斌译----西安交大, https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab 先进PID控制及其MATLAB仿真---刘金琨著----电子工业出版社 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab MATLAB语言工具箱---施阳...[等]编著---西北工业大学出版社 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab Matlab工具箱应用指南——应用数学篇---李涛贺勇军刘志俭等----电子工业出版社---2000年05月第1版 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab 模糊控制及其MATLAB应用---张国良... [等] 著---西安交通大学出版社 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab 基于MATLAB的系统分析与设计——时频分析---胡昌华等编著---西安电子科技大学出版社----2001-7 ,印次: 1 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab MATLAB语言与自动控制系统设计---魏克新等编---机械工业出版社---2001-05-01,版次:1 https://www.doczj.com/doc/451191853.html,/bbs/viewthread.php?tid=8666654&highlight=matlab

scilab中文帮助手册

(1)程序设计programming: abort: 中断计算 说明:abort命令中断当前计算并给出Scilab的提示符(“-->”)。如果用户使用pause命令进入高层界面,可使用abort命令回到初始层界面,出现Scilab的提示符(“-->”)。 Ans: 计算结果 说明:如果表达式的值没有被赋与任何变量,那么Scilab自动产生一个变量Ans,用来存储当前表达式的值。 backslash (\):矩阵左除 调用格式:如x=A\b 说明:backslash (\)代表矩阵左除,x=A\b是方程A*x=b的解。 如果A是一个方阵或者可逆矩阵(nonsingular或者invertible),那么x=A\b是方程A*x=b的唯一确定的解,且等于x=inv(A)*b. (通俗的说,就是方程数目等于未知数个数,所以解唯一。如A=[1 2 1;3 2 2;2 3 1],b=[8;13;11])如果A不是一个方阵,那么x是最小二乘解,此时,该解x使norm(A*x-b)最小。 (通俗的说,就是方程数目不等于未知数个数。 如果方程数目大于未知数个数,本来是没有准确解的,但可以根据最小二乘法原理拟合出最佳解。如A=rand(3,2);b=[1;1;1]。此时,由于A不是一个方阵,无法使用inv(A)命令,因此x=A\b 等效于x=pinv(A)*b. 如果方程数目小于未知数个数,应该有无穷个解,用x=A\b命令得出的解只是其中的一个解,而用pinv(A)*b命令得出的解则比较粗糙,没有用x=A\b命令得出的解精确。) 如果A是一个列满秩矩阵(矩阵的秩等于列数),那么此最小二乘解x=A\b是唯一能使norm(A*x-b)最小的解。 如果A不是一个列满秩矩阵,那么此最小二乘解x=A\b不能使norm(A*x-b)最小,使norm(A*x-b)最小的解应该是x=pinv(A)*b)。 inv(A)要求A是方阵,pinv(A)则不要求A是方阵 bool2s :将布尔矩阵转化为0、1矩阵 调用格式:bool2s(x) 参数:x是一个布尔向量或者布尔矩阵或者常数矩阵。 说明:如果x是一个布尔矩阵,bool2s(x)返回一个0、1矩阵,1代表真,0代表假。如果x 是一个普通矩阵,bool2s(x)也返回一个0、1矩阵,1代表非0的数字。 boolean:它表示Scilab对象或者布尔型变量和操作符与或非& | ~ 说明:布尔型变量为%T(代表真)%F (代表假)。这些变量可以用来定义矩阵。布尔型型矩阵可以像普通矩阵操作,如元素的抽取、插入与连接,但不能进行如( +, *, -, ^, )等运算,布尔型型矩阵有三个特殊的操作符号:与或非& | ~ brackets括号:包括左右圆括号(),左右方括号[]. 方括号调用格式:[a11,a12,...;a21,a22,...;...] 圆括号调用格式: [s1,s2,...]=func(...) 参数a11,a12,... : 任何合适的矩阵(实数, 多项式, 有理数等); 参数s1,s2,... : 任何变量名; 说明:[ ]用于向量定义或者矩阵连接或者用在调用函数的左边存储变量,而()用于函数调用。[ ]在用于矩阵连接时,空格、逗号用来隔开每“行”中的元素,分号、回车则用来隔开各“行”。[ ] 用在调用函数的左边存储变量时,必须用逗号隔开个变量。

(完整版)fortran函数总结,推荐文档

附录C SCILAB 部分函数指令表 (c)LIAMA. All rights reserved. (注解:本指令表只收集了部分常用指令, 有关全部指令请参照文档文件) + 加 - 减 * 矩阵乘 数组乘 *. 1. 通用指令 ^ 矩阵乘方 数组乘方 ^. \ 反斜杠或左除 help 在线帮助 / 斜杠或右除 apropos 文档中关键词搜寻 或.\ 数组除/. ans 缺省变量名以及最新表达式的运 算结果 == 等号 ~= 不等号 clear 从内存中清除变量和函数 < 小于 exit 关闭SCILAB > 大于 quit 退出SCILAB <= 小于或等于 save 把内存变量存入磁盘 >= 大于或等于 exec 运行脚本文件 &,and 逻辑与 mode 文件运行中的显示格式 |,or 逻辑或 getversion 显示SCILAB 版本 ~,not 逻辑非 ieee 浮点运算溢出显示模式选择 : 冒号 who 列出工作内存中的变量名 ( ) 园括号 edit 文件编辑器 [ ] 方括号 type 变量类型 { } 花括号 what 列出SCILAB 基本命令 小数点 . format 设置数据输出格式

, 逗号 chdir 改变当前工作目录 ; 分号 getenv 给出环境值 // 注释号 mkdir 创建目录 = 赋值符号 pwd 显示当前工作目录 ' 引号 evstr 执行表达式 ' 复数转置号 转置号 '. ans 最新表达式的运算结果 2.运算符和特殊算符%eps 浮点误差容限, =2 -52 ≈ 2.22×10 -16 %i 虚数单位= √(-1) %inf 正无穷大 %pi 圆周率, π=3.1415926535897.... 3. 编程语言结构 abort 中止计算或循环 break 终止最内循环 case 同select 一起使用 continue 将控制转交给外层的for或 while循环 else 同if一起使用 elseif 同if一起使用 end 结束for,while,if 语句 for 按规定次数重复执行语句 if 条件执行语句 otherwise 可同switch 一起使用 pause 暂停模式 return 返回 select 多个条件分支 then 同if一起使用 while 不确定次数重复执行语句 eval 特定值计算 feval 函数特定值计算或多变量计算 function 函数文件头 global 定义全局变量

PhpExcel中文帮助手册

PhpExcel中文帮助手册|PhpExcel使用方法 下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的 创建一个excel $objPHPExcel = new PHPExcel(); 保存excel—2007格式 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); //或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 非2007格式$objWriter->save("xxx.xlsx"); 直接输出到浏览器 $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); header("Pragma: public"); header("Expires: 0″); header("Cache-Control:must-revalidate, post-check=0, pre-check=0″); header("Content-Type:application/force-download"); header("Content-Type:application/vnd.ms-execl"); header("Content-Type:application/octet-stream"); header("Content-Type:application/download");; header('Content-Disposition:attachment;filename="resume.xls"'); header("Content-Transfer-Encoding:binary"); $objWriter->save('php://output'); ——————————————————————————————————————–设置excel的属性: 创建人 $objPHPExcel->getProperties()->setCreator("Maarten Balliauw"); 最后修改人 $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw"); 标题 $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document"); 题目 $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document"); 描述

相关主题
相关文档 最新文档