可视化计算计算工具的评估和选择_第1页
可视化计算计算工具的评估和选择_第2页
可视化计算计算工具的评估和选择_第3页
可视化计算计算工具的评估和选择_第4页
可视化计算计算工具的评估和选择_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

可视化计算计算工具的评估和选择第1页/共55页学习目标如何评估计算工具的能力与局限?如何将RAPTOR中实现的算法转换成其他程序设计语言的版本?为何要在不同的计算工具之间进行选择?面向过程与面向对象的程序有何不同?是否可以将其他语言实现的程序算法转变为流程图来方便分析?2第2页/共55页计算工具的能力与局限评估在所有数字化计算工具中,都存在一种表达能力极其局限性。二者是相互依存,共同存在的3第3页/共55页计算工具的表达能力PythonExcel4第4页/共55页误差的来源1.描述误差(实际问题与数学模型之间)2.观测误差(仪器本身的精度)3.截断误差(用收敛的无穷级数的前几项来代替无穷级数)4.舍入误差(用有限位小数来代替无穷小数)5第5页/共55页RAPTOR中的误差6第6页/共55页IEEE754-一个计算机误差规范描述了在二进制计算机中应如何存储浮点数。它之所以得到广泛采用,原因是它允许在合理的空间量中存储浮点数,以及相对快速地进行计算IEEE754的规定最大/最小限制精度二进制循环数字7第7页/共55页最大/最小限制因为用于存储数字的内存位数是有限的,所以,可以存储的最大数或最小数也是有穷的对于RAPTOR,可以存储的最大数是1.79769313486232E+308,而可以存储的最小正数是

2.2250738585072E-3088第8页/共55页RAPTOR遵守IEEE754的情况下溢:当产生了一个因太小而无法表示的数字时,会发生下溢。在IEEE和RAPTOR中,结果是0。上溢:当数字因太大而无法表示时,会发生上溢RAPTOR使用它自己的特殊表示方法来表示此情况

(+Inf*************)9第9页/共55页RAPTOR不遵守IEEE754的情况正/负无穷大:被0除时出现RAPTOR不支持无穷大,在此类情况下它会给出“Can'tdividebyzero”错误。非数字(NaN):NaN用于表示无效的运算(例如:-1的平方根)RAPTOR会立即生成错误(例如:“Can'ttakesquarerootofnegativenumber”)10第10页/共55页RAPTOR精度问题RAPTOR浮点数以二进制存储,并分为三个部分,总长度为64位:符号、指数和尾数。1个符号位11位指数52位尾数符号存储数字的符号(正或负)指数存储使数字增大或减小到的2的幂(最大/最小的2的幂是+1,023和-1,022)尾数存储实际的数字尾数的有限存储区域限制了两个相近的浮点数能够接近的程度(也即精度)11第11页/共55页RAPTOR精度问题在RAPTOR的默认精度情形下,可以有以下两种计算数值:整数,最长为10位有效数值例如:1073741824(2^30)浮点数,最长为15位有效数值,初始默认四位小数例如:562949953421312.0000(2^49)或0.110012第12页/共55页RAPTOR精度问题set_precision()设置小数位后的精度,设置以后,系统中所有数值全部使用浮点数表示(不再有整数表达)13第13页/共55页二进制循环数字(0.1)10转为二进制会成为无限循环小数IEEE754因此产生截断误差14第14页/共55页算法环境的转换RAPTOR原型(Prototype)算法设计工具所产生的算法用到各种科研和工程实践中,需要转变成为用户要求的环境中可以运行的程序RAPTOR提供将已经实现的算法转换为不同的程序设计语言(Ada、C++、C#、Java等)的功能15第15页/共55页RAPTOR->C++(Hanoi塔)16第16页/共55页RAPTOR->C++(Hanoi塔)主要修改和差异:为所有的RAPTOR算法中的变量设计C++的变量类型在C++中对所有的变量名的大小写敏感在屏幕输出过程中,C++环境一般不支持类似“+”这样的字符串连接符,而是需要用”<<”替代17第17页/共55页RAPTOR->C++(快速排序)18第18页/共55页RAPTOR->C++(文件I/O)C++文件操作的语句包括:文件输入输出头文件:fstream;

输入流定义和输入文件打开:ifstreamredirect_input("m101-data.csv",ios::in);文件数据输入到变量:while(redirect_input>>temp);输入文件关闭:redirect_input.close();19第19页/共55页RAPTOR->C++(数组)数组声明(int*arr_Data=newint[105];C++的特点:指针规定了数组的最大元素个数:105C++的特点,数组预先定义的大小不可逾越C++中的指针(*)和地址(&)等特殊形式来传递子程序(函数)形式参数中的数组类参数voidQkPass(int*R,inti,intj,int&QkPass_result)20第20页/共55页RAPTOR->C++(子图、子程序)RAPTOR子程序会自动识别成为C++的函数但RAPTOR的子图转成的C++程序中,无法识别子图的存在(例如RAPTOR算法中的Input_file_data和Output_file_data子图),只是按照main子图对其他子图的调用顺序,依次将其他赋值、决策和循环语句进行转换21第21页/共55页RAPTOR->C++(随机漫步)22第22页/共55页RAPTOR转换的C++图形指令与WinBGIm图形库的对比RAPTOR转换的C++图形指令WinBGIm图形库指令备注-#include<winbgim.h>包含需要的C++头文件open_graph_window(field_width,field_height);set_window_title("RandomWalk");initwindow(field_width,field_height,"RandemWalk");初始化图形视窗并设置其标题栏draw_circle(Center_x,Center_y,10,green,true);circle(center_x,center_y,10);绘制圆形display_text(10,400,"Thistimethedistanceis"+getdist,black);outtextxy(10,400,"Thistimethedistanceis:");在图形视窗显示文字23第23页/共55页C++的薄弱环节在于不同类型变量的转换WinBGIm图形库支持字符串的显示,但不支持数值变量直接在图形视窗输出须将数值类的变量—getdist(漫步终点与出发点的距离),转变成为字符串之后才能显示,C++实际上也没有此类函数最后使用了变通的办法sprint()(格式化输出函数),将getdist的输出结果变成字符串,再调用outtextxy()函数将串里的字符显示在C++图形视窗中24第24页/共55页C++的随机数函数在C++的随机数应用中,需要用到随机数种的函数,其作用是为每一次随机函数的调用,给出一个与上一次应用不同的初值本例的循环进行了2000次,就需要2000个不同的种子,否则随机数列就会出现一致性的现象另一方案,是采用系统时间值,这也是最容易取得的不同种子初值:srand(inttime(0));25第25页/共55页RAPTOR的转换和编译问题RAPTOR除了可以将其环境中的算法转换成高级语言后编译之外,也支持直接进行编译在不少情况下,在RAPTOR中运行并得到结果的算法,但就是无法通过编译或转换为高级语言的代码26第26页/共55页不可编译和转换的状况通过应用实验,目前可以归纳出三类不可编译的RAPTOR算法:第一种是子图的递归调用;第二种是子图和过程的相互调用;第三种是变量未赋初值问题在这三种问题的算法要实现编译和转换,必须做一些调整27第27页/共55页RAPTOR子图递归的调整策略28第28页/共55页RAPTOR子图交叉调用调整策略29第29页/共55页子程序输出变量赋初值调整策略1、在RAPTOR子程序中,输出变量在调用程序中不必赋初值,也可以运行,但无法通过编译;2、只要在调用程序程序中,加上赋初值的语句,即可通过编译。30第30页/共55页选择计算工具的理由1、动态语言和静态语言动态类型语言指在运行期间才去做数据类型检查的语言,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来静态类型语言:静态类型语言的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型31第31页/共55页选择计算工具的理由2、强类型和弱类型语言任何程序变量都有两个属性:类型和值;也就是说,弱类型的变量同样有类型强类型的变量类型,必须在源代码中明确定义,称之为“变量声明”弱类型的变量类型则是无需声明的,由解释器解释强类型的变量类型是不能改变的,弱类型变量是随需改变的,这是强弱类型语言的主要区别32第32页/共55页选择计算工具的理由动态类型语言,特别是高级动态类型语言,由于取消了变量的限制,能够让人们可以集中精力思考业务逻辑实现强类型语言的优势究竟是什么呢?显然就是执行效率非常高。例如,C/C++的特点,使它成为Unix操作系统的基石和大部分工业控制系统的主要程序设计语言33第33页/共55页RAPTOR与面向对象面向对象程序设计(Object-OrientedProgramming,OOP)作为另一类编程思想,它将一个系统看成是一个个对象组成,这些对象包含了数据和与其相关操作34第34页/共55页OOP要素对象(Object):包含一定的数据结构和状态的实体操作(Operation):作用于对象的行为,如访问和处理对象的状态封装(Encapsulation):定义对象和操作,只提供抽象的接口,并隐藏它们的具体实现35第35页/共55页OOP要素继承(Inheritance):通过继承现有类型的性质,创建新的数据类型,而不影响原有数据类型多态性(Polymorphism):判定数据类型集合中各类型的区别,使程序可以按照它们的共同特性来书写36第36页/共55页RAPTOR对OOP的支持RAPTOR中的面向对象的模式允许用户创建类(Class)及其方法(Method)和属性(attributes),进行对象实例化,并实践面向对象的程序设计(OOP)。37第37页/共55页RAPTOR对OOP的支持在RAPTOR面向对象的模式会出现两个标签:UML和mainRAPTOR使用一种所谓的“统一建模语言(UnifiedModelinglanguage,UML)”的可视化形式来创建面向对象的程序结构38第38页/共55页创建”Cube”类39第39页/共55页使用Cube类计算立方体的体积使用名为cube的类,利用立方体的一条边来计算的立方体的体积需要下列项目:字段:Side(边长:数值)和Volume(体积:数值)方法:SetSide(),GetSide(),ComputeVolume(),GetVolume()40第40页/共55页Cube类及其成员41第41页/共55页为类创建方法一旦已创建了类,将自动添加一个新类名称选项卡,现需为每个类的方法创建代码单击Cube选项卡,看到四个新的标签,每个方法都有一个。42第42页/共55页OOP的main子图43第43页/共55页OOP继承和多态性44第44页/共55页逆向工程:从代码到流程图在大部分问题的求解过程中,都是可以借鉴前人的思维成果,在他人的工作基础上,进行创新和改革将使用程序设计语言设计的算法还原成流程图可以帮助理解在算法的逻辑设计上的总体构架和主要的设计思路45第45页/共55页CVF介绍CVF是由FATESOFT开发的从代码到流程图的转换工具用于逆向工程或软件开发中的文档撰写,用于分析代码非常合适46第46页/共55页CVF中显示的代码树和代码在CVF中,具备了编辑器,所以程序编辑与流程图可视化可以完全同步,并用流程图显示源代码的结构47第47页/共55页CVF介绍CVF从代码转换而得的可视化流程图,分为两类,第一类(flowchart-1),所有的源码片段显示在各个框中第二类(flowchart-2)流程图中不显示程序代码,而是显示更为抽象的程序构架(分支、循环、代码块)48第48页/共55页CVF大颗粒度流程-expandlevel1

温馨提示

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

评论

0/150

提交评论