大学毕业论文-—飞行器实时仿真算法研究.doc
《大学毕业论文-—飞行器实时仿真算法研究.doc》由会员分享,可在线阅读,更多相关《大学毕业论文-—飞行器实时仿真算法研究.doc(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本科毕业设计论文题 目飞行器实时仿真算法研究专业名称飞行器设计与工程学生姓名指导教师毕业时间设计论文 毕业 任务书一、题目飞行器实时仿真算法研究二、指导思想和目的要求1. 通过毕业设计,培养学生解决工程实际问题的独立科研能力,熟悉并掌握从事科学研究的一般方法和基本技能。2. 巩固所学专业基础知识和专业知识,加深对飞行力学、飞行仿真计算等专业知识的理解,完成基于C+的飞行仿真算法开发。3学习、掌握GSL、VC+软件的仿真程序设计,完成基于RTX实时环境算法库开发。三、主要技术指标完成GSL代码由C到C+转化.应用VC+完成GSL的Lib和DLL多种应用开发.完成基于RTX实时仿真应用.四、进度和
2、要求查阅相关资料第3周翻译两篇于论文相关的英文资料第4周学习基于C的GSL开源软件使用第34周完成GSL代码由C到C+转化第58周应用VC+完成GSL多种应用开发第910周完成基于RTX实时仿真应用第1115周仿真结果分析、撰写论文第1617周准备毕业设计答辩第18周五、主要参考书及参考资料1William H. Press.NUMERICAL RECIPES,Third Edition, Cambridge University Press, 20082Ardence Company,RTX 8.1 SDK Release Notes,US, 2007.学生 _ 指导教师 _ 系主任 _ 本
3、科毕业设计论文目 录目 录I摘 要IIIABSTRACTIV第1章 前 言11.1实时飞行仿真算法开发目的和意义11.2国内外发展情况11.3开发内容2第2章 需求分析32.1向量32.2矩阵32.3随机数42.4插值4第3章 算法设计与编程实现53.1工程框架的搭建53.2向量63.2.1向量结构体63.2.2向量类的构架73.2.3 GneVector接口83.2.4 ConstVectorView接口93.2.5 AlmostVector接口103.2.6 Vector接口103.2.7 VectorView接口113.2.8 补充说明123.3矩阵133.3.1矩阵结构体143.3.2
4、矩阵类的构架143.3.3接口153.4随机数153.4.1随机数类的构架163.4.2使用示例183.4.3性能分析183.5插值213.5.1插值基类的构架213.5.2线性插值243.5.3拉格朗日插值253.5.4三次样条插值263.5.5插值接口26第4章 实时环境测试294.1测试环境294.2测试算例1294.3测试算例230第5章 结论31致 谢32参考文献33毕业设计小结34附 录35II摘 要本文研究的主要内容是飞行器实时仿真算法,包括向量、矩阵、随机数、插值、微分方程的初值问题。数值计算中的其他部分,具体代码中也有涉及,但由于篇幅所限,未在论文中阐述。在第三章中对每一部分
5、都做了详细的论述,并使用C+语言给出具体的实现和接口,尽量使得算法库具有较高的代码可重复使用性,较快的执行速度,较高的效率和简单的接口。论文结尾给出了该算法库在RTX系统下的测试示例。关键词 通用科学计算库;飞行器仿真算法;多维插值ABSTRACTThis paper is mainly on real-time simulate algorithm of flight vehicle, including vector,matrix,random number,interpolation. Other parts of numeric algorithm are also mentioned
6、 in the source code.Each of them is discussed in the third chapter in detail, and by using C+ language, the specific implementation and the user interface is given. The purpose of this is to make this algorithm library reusable, high speed, high efficiency, and simple interface.Some test examples ar
7、e given in the the end of the paper.KEY WORDS GSL,;flight vehicle simulation alogrithm,;multi-dimension interpolation35第1章 前 言1.1实时飞行仿真算法开发目的和意义1.通过毕业设计,培养学生解决工程实际问题的独立科研能力,熟悉并掌握从事科学研究的一般方法和基本技能。2.巩固所学专业基础知识和专业知识,加深对飞行力学、飞行仿真计算等专业知识的理解,完成基于C+的飞行仿真算法开发。3.学习、掌握GSL、VC+软件的仿真程序设计,完成基于RTX实时环境算法库开发。1.2国内外发
8、展情况就目前来看,最常用的科学计算仿真工具应该是matlab莫属了,matlab有很多优点,界面友好,易于操作,强大的工具箱,对矩阵支持良好。但是自matlbab7.0之后,matlab有了自己的虚拟机,不再支持将其代码转为C或C+了,而且用matlab写出的程序不能做成产品,不如其他语言通用。matlab最大的缺点就是循环速度奇慢无比,当然这是解释性语言的通病。编译性语言中,常用的科学计算仿真库也有很多,GSL最为通用,与blitz+和MTL并称为当前三大支持科学计算的数值库,。GSL全称GNU Scientific Library,是GNU项目的组成部分,遵循GPL协议。GSL一个非常全面
9、的数值计算库,使用C语言编写,提供了很多API接口供用户或者其他语言调用。包含数值计算的很多方面,如随机数,向量,矩阵,常微分方程初值问题,特殊函数,积分,线性代数,傅里叶变换,最小二乘法,统计,排列,组合,特征值的求解等等。GSL的优点是运行速度快,尤其矩阵和向量是使用第三方库CBLAS,所以矩阵运算的速度和matlab不相上下(matlab矩阵底层也是用CBLAS库实现的)。缺点是使用非常不方便,用户要负责大量的内存分配和释放工作,时刻注意内存是否泄漏,花费大量精力去维护代码,而不是专注于算法本身。1.3开发内容此次毕业设计的主要内容如下1. 完成GSL代码由C到C+转化。2. 设计并实现
10、多维插值算法3. 应用VC+完成GSL的Lib和DLL多种应用开发。4. 完成基于RTX实时仿真应用。第2章 需求分析2.1向量需要设计一个类,能对数学上的向量进行描述和运算。并且向量中的元素在内存中所占的空间的大小是相同的。满足如下要求。1. 用户不负责向量类对象内部的任何内存申请和删除工作。2. 支持通过操作符和()对元素进行随机存取。3. 支持基本的向量数学运算,如+-*/,范数,支持叉乘等等。4. 需提供最大值,最小值,平均值,求和等函数。5. 支持多线程。6. 提供向量视图功能(可对向量的局部作为一个独立向量进行操作)。7. 支持C+输入和输出,即需重载操作符。8. 支持自定义类型。
11、2.2矩阵设计一个类,能对数学上的矩阵进行描述和运算。并且矩阵中的元素在内存中所占的空间的大小是相同的。所提供的方法有矩阵元素的存取,矩阵和文件之间的读写,赋值,复制,元素之间的交换,行列的交换,基本算术运算(加、减,乘、除),矩阵乘法,求逆,求行列式,LU分解,QR分解,求迹,最大值和最小值等等。1. 用户不负责矩阵类对象内部的任何内存申请和删除工作。2. 支持通过操作符和()对元素进行随机存取。3. 支持基本的向量数学运算,如+-*/,范数,支持叉乘等等。4. 需提供最大值,最小值,平均值,求和等函数。5. 支持多线程。6. 提供矩阵视图功能(可对矩阵的局部作为一个独立矩阵进行操作)。7.
12、 支持C+输入和输出,即需重载操作符。8支持自定义类型。9矩阵求逆,行列式,LU分解,高斯分解,SV分解,求迹,求秩10单位矩阵2.3随机数设计一个随机数类CRandom,满足如下要求:1. 支持多种随机数算法。2. 可以返回每种算法支持的区间中的随机值。3. 可以返回区间0,1)中浮点数。4. 可以返回区间0,n-1中的整数,n由用户提供。5. 可以返回每种算法所能产生的最大随机值,最小随机值。6. 可以保存每种随机数算法的当前状态,并且也可以导入已存的状态。7. 可以动态改变随机数算法。8. 用户不负责类对象内部的任何内存释放和删除工作。2.4插值设计一组类,支持N维插值, 使用拉格朗日和
13、三次样条插值公式。具体需求:1使用纯C+语法和函数,必须具有可移植性。2支持多线程。3不同插值方法的插值接口统一。4设计一种基于xml格式的插值表。5用户不负责插值类内部的任何内存分配和释放工作。6接口简单明了,使用方便。7默认插值表的每一维都是有序表(递增或递减)。8支持的插值算法有线性插值,三次样条插值,n阶多项式插值。第3章 算法设计与编程实现3.1工程框架的搭建工程名字为NSL(nwpu scientific library)工程目录结构图如下其中build目录中为工程生成的可执行文件,包括dll,lib,或者exe。example目录中为工程代码使用的示例。include 目录中为工
14、程中使用到的头文件,可以和build目录一起交付给用户使用。src目录中为工程的实现源码。project目录中为工程文件。所有文件都要包含的预编译头文件是NSL.h,预编译宏定义大致如下:#ifdef WIN32# ifdef NSL_DLL# ifdef DLL_EXPORT# define NSL_VAR extern _declspec(dllexport)# define NSL_EXPORT _declspec(dllexport)# else# define NSL_VAR extern _declspec(dllimport)# define NSL_EXPORT _declsp
15、ec(dllimport)./* Turn range checking on by default, unless the user definesNSL_RANGE_CHECK_OFF, or defines NSL_RANGE_CHECK to 0 explicitly */#ifdef NSL_RANGE_CHECK_OFF# ifndef NSL_RANGE_CHECK# define NSL_RANGE_CHECK 0# else.#define NSL_SUPPORT_MULTITHREAD上述宏定义非常方便,如果要重新编译此库文件,若在windows环境下,则需要同时定义WIN
16、32,NSL_DLL,和DLL_EXPORT即可。使用此库的头文件时,只需同时定义WIN32,NSL_DLL即正确链接。此数学库支持数组边界检查,当然如果对速度要求高的话,在编译的时候可以通过设置NSL_RANGECHECK_OFF关闭内存检查,以编译出对边界不做检查的可执行文件。最后一行宏定义是决定此库是否支持多线程,如果定义了NSL_SUPPORT_MULTITHREAD,程序中很多计算过程将使用局部变量,以便在多线程环境下不会出现多个线程对同一个变量的同时访问。如果没有定义的话,那么那些计算过程将使用全局静态变量,以提高计算速度。3.2向量GSL提供的向量类型使用起来非常麻烦,由于是对C
17、语言中的数组进行包装,所以用户时刻都要注意内存的变化,花费大量精力减少内存泄露,并且每种数据类型都有不同的函数版本,且不支持用户自定义类型,所以我决定使用GSL的算法,重写构架向量类,并且给出C+的接口,支持多种类型,包括未知的用户自定义类型,尽量减少用户对程序本身的维护工作量,使用户能专注于算法本身。3.2.1向量结构体既然已经选择丢弃GSL提供的向量结构体,那么就要重新定义或选择新的向量类型。由于要支持多种类型,所以最好的方法是使用模板实现,现成的有C+标准库中的vector模板类和valarray模板类,vector和valarray各有特点,vector模板类支持泛型运算,内存可动态改
18、变,支持元素的插入和删除,但是对元素的数学运算支持不好,没有重载一些基本的运算符,更没有重载sin,cos等数学函数。valarray模板类不支持泛型运算(接口上),内存不可动态改变,元素的插入和删除也无从谈起了,但是它对元素的数学运算支持非常好,对+,+=,*=,sin,cos等等操作符都进行了重载,使用非常方便。所以这里我使用valarray模板类作为我的内置向量类型,对其进行包装,增加方法,给出C+接口。3.2.2向量类的构架根据需求分析,首先需要一个Vector向量模板类,还需要一个VectorView向量视图模板类,VectorView貌似可以继承(public)于Vector类,这
19、样就拥有了Vector类的所有方法,也就可以对向量的局部进行操作了,可是在代码初期的设计中,发现这样根本行不通。首先,视图类把向量类的resize函数也继承了,但是对一个视图重新分配内存是没有意义的,也是不允许的。后来我试着用private继承方式,然后在视图类中重写需要的函数,重写非常简单,只是对基类函数的调用而已。可是新问题又出现了,由于private继承方式会把所有的函数都继承为私有函数,包括构造函数,派生类对象无法转换为基类对象,当然C+的多态特性也就无法发挥了。其次,当新的需求来临时,我的代码工作的很不正常,比如我需要视图类有两种形式,一种是可变视图,一种是常视图。可变视图是对其所指
20、向的向量拥有读写权限,而常视图则只有读权限。考虑如下情况:Vectorvec(10); /实例化一个可变向量对象,类型为double,有10个元素。const Vectorc_vec(10); /实例化一个常向量对象,类型为double,有10个元素。VectorView view(vec);/构造一个视图对象,其指向的对象可变,指向vec的所有元素。VectorView c_view(c_vec);/构造一个视图对象,其指向的对象不可变,指向vec的所有元素。此时VectorView类内部的实现将非常复杂,会拥有两个非常相似的构造函数,而且编译器会给出警告。由于视图类内部是不存储元素的,只是
21、当做一个窗口,所以视图类内部肯定会有一个指向向量结构体的指针,那么这个指针该是什么属性?const or non-const ,鬼知道。这时候通过一个视图类和大量的const属性来使代码正常工作是件非常困难的事,无法预料什么时候会发生错误,而且编码时代码混乱不堪,这不是我想要的。所以仅有两个类是不够的,事实上需要5个类来实现需求分析中的功能。GneVector一般矩阵类,AlmostVector类,ConstVectorView常视图类,VectorView类和Vector向量类,它们之间的继承关系如下:图3-1 继承关系图根据类的抽象设计原则,最底层的类应该具有最通用的方法和数据,若需要使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学毕业 论文 飞行器 实时 仿真 算法 研究
限制150内