《基于LabVIEW的数据采集与处理技术》课件第10章_第1页
《基于LabVIEW的数据采集与处理技术》课件第10章_第2页
《基于LabVIEW的数据采集与处理技术》课件第10章_第3页
《基于LabVIEW的数据采集与处理技术》课件第10章_第4页
《基于LabVIEW的数据采集与处理技术》课件第10章_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章LabVIEW与仿真技术10.1仿真技术概述10.2LabVIEW中的数字仿真本章小结练习与思考

10.1仿真技术概述

计算机仿真技术是一门利用计算机软件模拟实际环境进行科学试验的技术。它具有经济、可靠、实用、安全、灵活、可多次重复使用的优点,已经成为对许多复杂系统进行分析、设计、试验、评估的必不可少的手段。它是以数学理论为基础,以计算机和各种物理设施为设备工具,利用系统模型对实际的或设想的系统进行试验仿真研究的一门综合技术。

关于仿真的定义有很多种,其中雷诺(T.H.Naylar)于1966年在其专著中给出了仿真的定义:“仿真就是在数字计算机上进行试验的数字化技术,它包括数字与逻辑模型的某些模式,这些模式描述了某一事件或经济系统若干周期内的特征。”从以上的定义我们可以看出,系统仿真实质上包括了三个基本要素:系统、系统模型和计算机。而联系这三个要素的就是我们在系统仿真过程中所涉及到的建立模型、建立仿真模型和仿真实验。从学科的角度,我们也可以作如下定义:系统仿真是建立在控制理论、相似理论、信息理论和计算机技术等理论基础之上的,以计算机和其他物理效应设备为工具,利用系统模型对真实或者是假想的系统进行实验,并借助专家经验知识、统计数据和信息资料对试验结果进行分析和研究,进而作出决策的一门综合性的试验性科学。

1.系统仿真的分类

系统仿真按照不同的分类规则有着不同的分类方法。根据研究系统的特征可以分为两大类,即连续系统仿真和离散事件系统仿真。按照仿真实验中所取时间标尺与自然时间的时间标尺之间的关系,可以分为实时系统仿真和非实时系统仿真两类。按照参与仿真的模型种类的不同,可将其分为物理系统仿真、数学系统仿真和半实物系统仿真三种类型。

2.系统仿真实验的过程和步骤

系统仿真实验的过程和步骤一般包含以下几个阶段。

1)建模阶段

在建模阶段,主要是按照系统模块建立各个模块的模型。若系统模型为数学模型,则需要将数学模型转换为可以在仿真计算机上运行的计算机模型;若为物理模型,则需要我们按照系统功能模块在性能和功能上覆盖系统的对应部分。

2)模型实验阶段

模型实验阶段可以分为以下几个部分:根据实验目的制定实验计划、核实实验大纲,根据计划和大纲设计最为合理的实验流程,选择待测参数和相应的测量仪器,运转模型并记录仿真实验结果。

3)结果分析阶段

建模阶段和模型实验阶段的最终目的就是得出实验结果,这也是我们仿真的主要目的,因为实验的结果反映的是仿真模型系统的特性和本质。在这里,就需要我们对记录的实验结果进行分析,通过分析来判断仿真系统的合理性。如果结果判定为合理的,证明仿真系统模型较为良好;否则,需要对我们前面建立的模型和模型实验阶段进行的实验工作进行修改和检查,然后再进行实验,直到获得满意的结果。10.2LabVIEW中的数字仿真

10.2.1LabVIEW中的数字仿真简介

作为测试领域专用的LabVIEW,其最早期的主要任务是完成测试的相关功能。随着LabVIEW不断地更新和发展,其在数学分析和信号处理方面的能力也在不断地增强。我们可以利用LabVIEW本身含有的数学工具做一些仿真方面的工作,NI公司推出的LabVIEW仿真与控制工具包对仿真和控制也提供了强大的支持。10.2.2LabVIEW中的数字仿真算法模块

在LabVIEW中,可以利用Function模板中的数学分析工具实现数字仿真算法。在此,我们主要介绍利用Function→Analyze→Mathematics→Calculus→DifferentialEquation模块来求解微分方程。在此模块中主要包括了经典4阶Runge-Kutta方法、5阶Cash-Karp方法、欧拉(Euler)方法等常见的求解微分方程数值解的仿真算法。在求解n维齐次线性微分方程和n阶齐次微分方程的时候,还可以求解相应的公式解。

图10-1显示了DifferentialEquation模块中包含的函数模块。图10-1DifferentialEquations模块示意图

DifferentialEquations模板中的模块功能简介如表10-1所示。下面我们结合LabVIEW和实际的仿真算法给出一些实例。

1.用Euler法求解微分方程

Euler(欧拉)法是一种最简单的显式单步法求解微分方程,它利用差商代替导数进行计算。对于如下形式的微分方程:求在区间[a,b]上的解。设节点为

xn=x0+nh

n = 0,1,2,…则可以得到微分方程近似的形式为即那么我们从x0出发,可以求解出y(x0) = y0,进而得到:继续这个过程,我们可以得到一般的形式:

这就是Euler方法。下面我们给出一个实例来说明如何利用LabVIEW中的ODEEulerMethod.vi来求解微分方程。求解如下的微分方程:在区间[0,1]上的数值解,取h=0.1并与精确解相比较。以下是对本实例中所用到的几个VI的详细介绍:

1) ODEEulerMethod.vi

ODEEulerMethod.vi位于Function→Analyze→Mathematics→Calculus→DifferentialEquation中,其图标和端口如图10-2所示。图10-2ODEEulerMethod.vi端口功能:用于求解微分方程。

主要端口说明:

X(nameofvariables):变量名;

timestart:开始时间,默认值为0;

timeend:结束时间,默认值为1.0;

h(steprate):积分步长,默认值为0.1;

X0:初始条件;

time:时间变量名称,默认值为t;

F(X,t):微分方程的右边公式;

Times:时间步长,为一个数组形式;

XValues:变量值,为最后的计算结果;

ticks:计算所耗去的时间;

error:错误输出。

2) Evaly=f(x).vi

Evaly=f(x).vi位于Function→Analyze→Mathematics→1Dand2DEvaluation中,其图标和端口如图10-3所示。图10-3Evaly=f(x).vi端口功能:用于按照公式计算函数值。

主要端口说明:

numberofpoints:所要参与计算的点数;

start:自变量的起始值;

end:自变量的终值;

formula:函数公式;

Xvalues:参与计算的自变量值,其值按照步长给定;

Yvalues:计算的函数值;

ticks:完成函数计算所耗费的时间;

error:错误输出。在进行计算时,需要注意以下几点:

(1)变量名X(nameofvariables)主要是指所要求解的y(x)。在LabVIEW中我们建议采用x、y、z等符号来表示,在后面的Runge-Kutta方法中我们会看到一个实例,其中需要求解三个参量的数值解,就采用的是x、y、z这样的表示方法。

(2)端口timestart和timeend在平时我们求解微分方程的时候常常称为求解区间,也就是自变量的取值区间。h为积分步长,可以按照我们自己的定义进行设置。

(3)端口time是指自变量的名称值,默认值为t。在进行设定的时候要注意time的值要与F(X,t)表达式中的自变量值取得一致。在本例中我们将time值设定为x,这样可以将原微分方程的表达式直接填写在F(X,t)中。

(4)端口Times为一时间步长的数组,可以用来标定我们所得到的数值解,其每个时间值均对应着一个数值解。这样我们可以很方便地定位其中的某一个数值解。端口XValues为输出的数值解,其输出和X(nameofvariables)变量名一一对应。

(5)端口ticks为完成整个函数所耗费的时间。我们可以通过这个端口来判断计算是否超时,因为在一些实时性要求比较高的场合,若函数计算所耗费的时间比较高,就不能满足要求,这样的话需要重新考虑编写微分方程的求解算法。

图10-4为用Euler法求解微分方程的前面板图,图10-5为相对应的流程框图。图10-4用Euler法求解微分方程的前面板图图10-5用Euler法求解微分方程的流程框图

2.用4阶Runge-Kutta法求解微分方程

在求解微分方程的时候,为了避免计算高阶导数,且能够得到较高阶的数值方法,Runge-Kutta方法利用原函数在某些点处的值的线性组合,构造出一类计算公式,使其按照泰勒公式展开后与初值问题的解的泰勒展开比较,有尽可能多的项完全相同,这种方法间接应用了泰勒展开的思想,避免了计算高阶导数。

经典的4阶RungeKutta方法公式为:利用上面所给的公式求解微分方程是比较耗费时间的。如果利用LabVIEW中提供的ODERungeKutta4thOrder.vi来求解微分方程的数值解则会变得很方便。下面,我们给出一个运用ODERungeKutta4thOrder.vi求解微分方程的实例。求解如下的微分方程:初始条件为:x(0)=1,y(0)=1,z(0)=1,t∈[0,1]。

ODERungeKutta4thOrder.vi位于Function→Analyze→Mathematics→Calculus→DifferentialEquation中,其图标和端口如图10-6所示。

图10-6ODERungeKutta4thOrder.vi端口功能:用于求解微分方程。主要端口说明:

X(nameofvariables):变量名;

timestart:开始时间,默认值为0;

timeend:结束时间,默认值为1.0;

h(steprate):积分步长,默认值为0.1;

X0:初始条件;

time:时间变量名称,默认值为t;

F(X,t):微分方程的右边公式;

Times:时间步长,为一个数组形式;

XValues:变量值,为最后的计算结果;

ticks:计算所耗去的时间;

error:错误输出。

在进行计算时,需要注意以下几点:

(1) X(变量名)就是在图10-7中所列出的x、y和z,分别对应在微分方程中出现的x(t)、y(t)、z(t)。

(2) F(X,t)则对应了微分方程右边的公式。在本例中我们可以按照X(变量名)的规则来替代。这样我们可以把F(X,t)分别变换为:10*(y-x),x*(28-z)-y,x*y-(8/3)*z。

(3) XValues(数值解)就是我们所需要的数值解。其中第一列对应x(t),第二列对应y(t),第三列对应z(t)。

图10-7为用4阶RungeKutta法求解微分方程的前面板图,图10-8为相对应的流程框图。图10-7用4阶RungeKutta法求解微分方程的前面板图图10-8用4阶RungeKutta法求解微分方程的流程框图

3.用5阶CashKarp法求解微分方程

在前面的例子中我们已经介绍了用经典的4阶RungeKutta法求解微分方程,本例中我们将介绍5阶CashKarp法。5阶CashKarp法用于求解包含起始条件的常微分方程。CashKarp法为Runge-Kutta公式,每次循环需要6个等式,如下所示:上述公式比Runge-Kutta公式更为复杂,参数也更多,所需的计算量也相应地增加了。但该算法的计算效率较高,因此在一些要求较严格的场合是比较适用的。在这里,我们用5阶CashKarp法来求解和介绍Runge-Kutta法时所用的相同的微分方程,可以将两种计算结果进行比较。

求解如下的微分方程:初始条件为:x(0)=0.6,y(0)=0.6,x(0)=0.6,t∈[0,50]。

ODECashKarp5thOrder.vi位于Function→Analyze→Mathematics→Calculus→DifferentialEquation中,其图标和端口如图10-9所示。图10-9ODECashKarp5thOrder.vi端口功能:用于求解微分方程。

主要端口说明:

X(nameofvariables):变量名;

timestart:开始时间,默认值为0;

timeend:结束时间,默认值为1.0;

h(steprate):积分步长,默认值为0.1;

X0:初始条件;

accuracy:准确度,用来控制计算结果。默认值为0.0;

time:时间变量名称,默认值为t;

F(X,t):微分方程的右边公式;

Times:时间步长,为一个数组形式;

XValues:变量值,为最后的计算结果;

ticks:计算所耗去的时间;

error:错误输出。

在计算时,需要注意以下几点:

(1)5阶CashKarp法比Runge-Kutta法多了一个参数设定,即accuracy端口。可以利用accuracy来控制计算结果的准确度。

(2)图10-10为用5阶CashKarp法求解微分方程的前面板图。我们把计算结果以图表的形式显示在XYGraph中,虽然求解了三组结果,但看起来像只有两组结果。这是因为对于x(t)和y(t)来说,其结果非常接近,所以不太好分辨。在实际计算时图表的表示是非常清楚的,我们可以设置不同的颜色来区分不同的计算结果。图10-10用5阶CashKarp法求解微分方程的前面板图图10-11为用5阶CashKarp法求解微分方程的前面板图对应的流程框图。图10-11用5阶CashKarp法求解微分方程的流程框图

4.用LinearnthOrder法求解微分方程下面我们介绍利用ODELinearnthOrderNumeric.vi来求解n阶齐次常微分方程。考虑如下常系数n阶微分方程:初始条件为以下是对本例中所用到的几个VI的详细介绍:

1) ODELinearnthOrderNumeric.vi

ODELinearnthOrderNumeric.vi位于Function→Analyze→Mathematics→Calculus→DifferentialEquation,其图标和端口如图10-12所示。图10-12ODELinearnthOrderNumeric.vi端口功能:用于求解微分方程(数值解)。

主要端口说明:

A(a0,a1,…,an-1):系数矩阵;

X0:初始条件;

numberofpoints:所需要的计算点数;

timestart:开始时间,默认值为0;

timeend:结束时间,默认值为1.0;

Times:时间步长,为一个数组形式;

X:变量值,为最后的计算结果;

error:错误输出。

2) ODELinearnthOrderSymbolic.vi

ODELinearnthOrderSymbolic.vi位于Function→Analyze→Mathematics→Calculus→DifferentialEquation中,其图标和端口如图10-13所示。图10-13ODELinearnthOrderSymbolic.vi端口功能:用于求解微分方程(公式形式)。

主要端口说明:

A(a0,a1,...,an-1):系数矩阵;

X0:初始条件;

formula:所得到的公式解;

error:错误输出。

在进行计算时,需要注意:在本例中我们采用了ODELinearnthOrderNumeric.vi和ODELinearnthOrderSymbolic.vi两种不同的表示形式来求解微分方程。在实际应用的时候,可以根据需要来选择最后的表示形式。从这个例子我们也可以看出,在LabVIEW中求解n阶齐次常微分方程变得非常简单。图10-14为用LinearnthOrder法求解微分方程的前面板图,图10-15为相对应的流程框图。图10-14用LinearnthOrder法求解微分方程的前面板图图10-15用LinearnthOrder法求解微分方程的流程框图

5.用LinearSystem法求解n维齐次线性微分方程

下面我们介绍利用ODELinearSystemNumeric.vi求解n维齐次线性微分方程。考虑如下常系数n维齐次线性微分方程:初始条件为:对于此类微分方程,我们可以利用ODELinearSystemNumeric.vi或者ODELinearSystemSymbolic.vi来求解。ODELinearSystemNumeric.vi输出为方程的数值解,而ODELinearSystemSymbolic.vi输出为公式解。以下是对本例中所用到的几个VI的详细介绍:

1) ODELinearSystemNumeric.vi

ODELinearSystemNumeric.vi位于Function→Analyze→Mathematics→Calculus→DifferentialEquation中,其图标和端口如图10-16所示。图10-16ODELinearSystemNumeric.vi端口功能:用于求解n维齐次线性微分方程(数值解)。

主要端口说明:

A(matrixofcoefficients):系数矩阵;

X0(startvalue):初始条件;

numberofpoints:所需要的计算点数;

timestart:开始时间,默认值为0;

timeend:结束时间,默认值为1.0;

Times:时间步长,为一个数组形式;

X:变量值,为最后的计算结果;

error:错误输出。

2) ODELinearSystemSymbolic.vi

ODELinearSystemSy

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论