《可视化计算》第8章计算工具的评估和选择.ppt

上传人:牧羊曲112 文档编号:6075924 上传时间:2023-09-20 格式:PPT 页数:54 大小:6.52MB
返回 下载 相关 举报
《可视化计算》第8章计算工具的评估和选择.ppt_第1页
第1页 / 共54页
《可视化计算》第8章计算工具的评估和选择.ppt_第2页
第2页 / 共54页
《可视化计算》第8章计算工具的评估和选择.ppt_第3页
第3页 / 共54页
《可视化计算》第8章计算工具的评估和选择.ppt_第4页
第4页 / 共54页
《可视化计算》第8章计算工具的评估和选择.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《《可视化计算》第8章计算工具的评估和选择.ppt》由会员分享,可在线阅读,更多相关《《可视化计算》第8章计算工具的评估和选择.ppt(54页珍藏版)》请在三一办公上搜索。

1、第8章 计算工具的评估和选择,可视化计算,1,学习目标,如何评估计算工具的能力与局限?如何将RAPTOR中实现的算法转换成其他程序设计语言的版本?为何要在不同的计算工具之间进行选择?面向过程与面向对象的程序有何不同?是否可以将其他语言实现的程序算法转变为流程图来方便分析?,2,计算工具的能力与局限评估,在所有数字化计算工具中,都存在一种表达能力极其局限性。二者是相互依存,共同存在的,3,计算工具的表达能力,PythonExcel,4,误差的来源,1描述误差(实际问题与数学模型之间)2观测误差(仪器本身的精度)3截断误差(用收敛的无穷级数的前几项来代替无穷级数)4舍入误差(用有限位小数来代替无穷

2、小数),5,RAPTOR中的误差,6,IEEE 754-一个计算机误差规范,描述了在二进制计算机中应如何存储浮点数。它之所以得到广泛采用,原因是它允许在合理的空间量中存储浮点数,以及相对快速地进行计算IEEE 754的规定 最大/最小限制精度二进制循环数字,7,最大/最小限制,因为用于存储数字的内存位数是有限的,所以,可以存储的最大数或最小数也是有穷的对于 RAPTOR,可以存储的最大数是 1.79769313486232E+308,而可以存储的最小正数是 2.2250738585072E-308,8,RAPTOR遵守 IEEE 754 的情况,下溢:当产生了一个因太小而无法表示的数字时,会发

3、生下溢。在IEEE和RAPTOR 中,结果是0。上溢:当数字因太大而无法表示时,会发生上溢RAPTOR 使用它自己的特殊表示方法来表示此情况(+Inf*),9,RAPTOR不遵守 IEEE 754 的情况,正/负无穷大:被0除时出现RAPTOR不支持无穷大,在此类情况下它会给出“Cant divide by zero”错误。非数字(NaN):NaN 用于表示无效的运算(例如:-1 的平方根)RAPTOR 会立即生成错误(例如:“Cant take square root of negative number”),10,RAPTOR精度问题,RAPTOR浮点数以二进制存储,并分为三个部分,总长度

4、为64位:符号、指数和尾数。,符号存储数字的符号(正或负)指数存储使数字增大或减小到的2的幂(最大/最小的2的幂是+1,023 和-1,022)尾数存储实际的数字尾数的有限存储区域限制了两个相近的浮点数能够接近的程度(也即精度),11,RAPTOR精度问题,在RAPTOR的默认精度情形下,可以有以下两种计算数值:整数,最长为10位有效数值例如:1073741824(230)浮点数,最长为15位有效数值,初始默认四位小数例如:562949953421312.0000(249)或0.1100,12,RAPTOR精度问题,set_precision()设置小数位后的精度,设置以后,系统中所有数值全部

5、使用浮点数表示(不再有整数表达),13,二进制循环数字,(0.1)10转为二进制会成为无限循环小数IEEE754因此产生截断误差,14,算法环境的转换,RAPTOR原型(Prototype)算法设计工具所产生的算法用到各种科研和工程实践中,需要转变成为用户要求的环境中可以运行的程序RAPTOR提供将已经实现的算法转换为不同的程序设计语言(Ada、C+、C#、Java等)的功能,15,RAPTOR-C+(Hanoi塔),16,RAPTOR-C+(Hanoi塔),主要修改和差异:为所有的RAPTOR算法中的变量设计C+的变量类型在C+中对所有的变量名的大小写敏感在屏幕输出过程中,C+环境一般不支持

6、类似“+”这样的字符串连接符,而是需要用”替代,17,RAPTOR-C+(快速排序),18,RAPTOR-C+(文件I/O),C+文件操作的语句包括:文件输入输出头文件:fstream;输入流定义和输入文件打开:ifstream redirect_input(m101-data.csv,ios:in);文件数据输入到变量:while(redirect_inputtemp);输入文件关闭:redirect_input.close();,19,RAPTOR-C+(数组),数组声明(int*arr_Data=new int105;C+的特点:指针规定了数组的最大元素个数:105C+的特点,数组预先定

7、义的大小不可逾越C+中的指针(*)和地址(&)等特殊形式来传递子程序(函数)形式参数中的数组类参数void QkPass(int*R,int i,int j,int&QkPass_result),20,RAPTOR-C+(子图、子程序),RAPTOR子程序会自动识别成为C+的函数但RAPTOR的子图转成的C+程序中,无法识别子图的存在(例如RAPTOR算法中的Input_file_data和Output_file_data子图),只是按照main子图对其他子图的调用顺序,依次将其他赋值、决策和循环语句进行转换,21,RAPTOR-C+(随机漫步),22,RAPTOR 转换的C+图形指令与Win

8、BGIm图形库的对比,23,C+的薄弱环节,在于不同类型变量的转换WinBGIm图形库支持字符串的显示,但不支持数值变量直接在图形视窗输出须将数值类的变量getdist(漫步终点与出发点的距离),转变成为字符串之后才能显示,C+实际上也没有此类函数最后使用了变通的办法sprint()(格式化输出函数),将getdist的输出结果变成字符串,再调用outtextxy()函数将串里的字符显示在C+图形视窗中,24,C+的随机数函数,在C+的随机数应用中,需要用到随机数种的函数,其作用是为每一次随机函数的调用,给出一个与上一次应用不同的初值本例的循环进行了2000次,就需要2000个不同的种子,否则

9、随机数列就会出现一致性的现象另一方案,是采用系统时间值,这也是最容易取得的不同种子初值:srand(int time(0);,25,RAPTOR的转换和编译问题,RAPTOR除了可以将其环境中的算法转换成高级语言后编译之外,也支持直接进行编译在不少情况下,在RAPTOR中运行并得到结果的算法,但就是无法通过编译或转换为高级语言的代码,26,不可编译和转换的状况,通过应用实验,目前可以归纳出三类不可编译的RAPTOR算法:第一种是子图的递归调用;第二种是子图和过程的相互调用;第三种是变量未赋初值问题在这三种问题的算法要实现编译和转换,必须做一些调整,27,RAPTOR子图递归的调整策略,28,R

10、APTOR子图交叉调用调整策略,29,子程序输出变量赋初值调整策略,1、在RAPTOR子程序中,输出变量在调用程序中不必赋初值,也可以运行,但无法通过编译;2、只要在调用程序程序中,加上赋初值的语句,即可通过编译。,30,选择计算工具的理由,1、动态语言和静态语言动态类型语言指在运行期间才去做数据类型检查的语言,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来静态类型语言:静态类型语言的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,31,选择计算工具的理由,2、强类型和弱类型语言任何程序变量都有两个属性:类型和值;也就是说,弱类型的变量同样有类型强类型的变量类

11、型,必须在源代码中明确定义,称之为“变量声明”弱类型的变量类型则是无需声明的,由解释器解释强类型的变量类型是不能改变的,弱类型变量是随需改变的,这是强弱类型语言的主要区别,32,选择计算工具的理由,动态类型语言,特别是高级动态类型语言,由于取消了变量的限制,能够让人们可以集中精力思考业务逻辑实现强类型语言的优势究竟是什么呢?显然就是执行效率非常高。例如,C/C+的特点,使它成为Unix操作系统的基石和大部分工业控制系统的主要程序设计语言,33,RAPTOR与面向对象,面向对象程序设计(Object-Oriented Programming,OOP)作为另一类编程思想,它将一个系统看成是一个个对

12、象组成,这些对象包含了数据和与其相关操作,34,OOP要素,对象(Object):包含一定的数据结构和状态的实体操作(Operation):作用于对象的行为,如访问和处理对象的状态封装(Encapsulation):定义对象和操作,只提供抽象的接口,并隐藏它们的具体实现,35,OOP要素,继承(Inheritance):通过继承现有类型的性质,创建新的数据类型,而不影响原有数据类型多态性(Polymorphism):判定数据类型集合中各类型的区别,使程序可以按照它们的共同特性来书写,36,RAPTOR对OOP的支持,RAPTOR中的面向对象的模式允许用户创建类(Class)及其方法(Metho

13、d)和属性(attributes),进行对象实例化,并实践面向对象的程序设计(OOP)。,37,RAPTOR对OOP的支持,在RAPTOR面向对象的模式会出现两个标签:UML和mainRAPTOR使用一种所谓的“统一建模语言(Unified Modeling language,UML)”的可视化形式来创建面向对象的程序结构,38,创建”Cube”类,39,使用Cube类计算立方体的体积,使用名为cube的类,利用立方体的一条边来计算的立方体的体积需要下列项目:字段:Side(边长:数值)和Volume(体积:数值)方法:SetSide(),GetSide(),ComputeVolume(),G

14、etVolume(),40,Cube类及其成员,41,为类创建方法,一旦已创建了类,将自动添加一个新类名称选项卡,现需为每个类的方法创建代码单击Cube选项卡,看到四个新的标签,每个方法都有一个。,42,OOP的main子图,43,OOP继承和多态性,44,逆向工程:从代码到流程图,在大部分问题的求解过程中,都是可以借鉴前人的思维成果,在他人的工作基础上,进行创新和改革将使用程序设计语言设计的算法还原成流程图可以帮助理解在算法的逻辑设计上的总体构架和主要的设计思路,45,CVF介绍,CVF是由FATESOFT开发的从代码到流程图的转换工具用于逆向工程或软件开发中的文档撰写,用于分析代码非常合适

15、,46,CVF中显示的代码树和代码,在CVF中,具备了编辑器,所以程序编辑与流程图可视化可以完全同步,并用流程图显示源代码的结构,47,CVF介绍,CVF从代码转换而得的可视化流程图,分为两类,第一类(flowchart-1),所有的源码片段显示在各个框中第二类(flowchart-2)流程图中不显示程序代码,而是显示更为抽象的程序构架(分支、循环、代码块),48,CVF大颗粒度流程-expand level 1,49,CVF细颗粒度流程-expand level 5,50,CVF流程图与RAPTOR的比较,RAPTOR考虑算法设计,所以所有的计算步骤需要“原子化”,例如C+的for循环语句,

16、在RAPTOR至少需要分成34个原子语句来完成CVF的粒度分级显示非常强大,对分析大型的程序模块很有帮助;而RAPTOR中,一般需要依靠子图、子程序将较大的算法进行模块化的设计,51,小结和回顾,误差问题是计算过程中不可回避的重要问题,对计算结果误差的成因进行系统、详细的分析可以使我们认识到所有计算工具所存在的局限性,也就使得对计算结果进行评估成为一件必须的任务,52,小结和回顾,为了完成不同的计算任务,存在许多不同的程序设计环境,而使用某种程序设计语言实现的算法,其主要的算法思想,一般都可以移植到其他的程序设计环境在本章所举的将RAPTOR下实现的算法移植到C+的过程中,可以注意到算法本身的逻辑设计大部分可以直接使用,需要修改的部分集中在(包括图形的)输入、输出语句部分,53,小结和回顾,在借鉴他人的算法上,使用流程图工具进行算法分析,是进行逆向工程的一种重要手段面向对象程序设计不是本书介绍的重点,但是作为程序设计的一种重要方法,RAPTOR自身对其有一定程度的支持,54,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号