版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章計(jì)算工具的評(píng)估和選擇
《可視化計(jì)算》1學(xué)習(xí)目標(biāo)如何評(píng)估計(jì)算工具的能力與局限?如何將RAPTOR中實(shí)現(xiàn)的算法轉(zhuǎn)換成其他程序設(shè)計(jì)語(yǔ)言的版本?為何要在不同的計(jì)算工具之間進(jìn)行選擇?面向過(guò)程與面向?qū)ο蟮某绦蛴泻尾煌??是否可以將其他語(yǔ)言實(shí)現(xiàn)的程序算法轉(zhuǎn)變?yōu)榱鞒虉D來(lái)方便分析?2計(jì)算工具的能力與局限評(píng)估在所有數(shù)字化計(jì)算工具中,都存在一種表達(dá)能力極其局限性。二者是相互依存,共同存在的3計(jì)算工具的表達(dá)能力PythonExcel4誤差的來(lái)源1.描述誤差(實(shí)際問(wèn)題與數(shù)學(xué)模型之間)2.觀測(cè)誤差(儀器本身的精度)3.截?cái)嗾`差(用收斂的無(wú)窮級(jí)數(shù)的前幾項(xiàng)來(lái)代替無(wú)窮級(jí)數(shù))4.舍入誤差(用有限位小數(shù)來(lái)代替無(wú)窮小數(shù))5RAPTOR中的誤差6IEEE754-一個(gè)計(jì)算機(jī)誤差規(guī)范描述了在二進(jìn)制計(jì)算機(jī)中應(yīng)如何存儲(chǔ)浮點(diǎn)數(shù)。它之所以得到廣泛采用,原因是它允許在合理的空間量中存儲(chǔ)浮點(diǎn)數(shù),以及相對(duì)快速地進(jìn)行計(jì)算IEEE754的規(guī)定最大/最小限制精度二進(jìn)制循環(huán)數(shù)字7最大/最小限制因?yàn)橛糜诖鎯?chǔ)數(shù)字的內(nèi)存位數(shù)是有限的,所以,可以存儲(chǔ)的最大數(shù)或最小數(shù)也是有窮的對(duì)于RAPTOR,可以存儲(chǔ)的最大數(shù)是1.79769313486232E+308,而可以存儲(chǔ)的最小正數(shù)是
2.2250738585072E-3088RAPTOR遵守IEEE754的情況下溢:當(dāng)產(chǎn)生了一個(gè)因太小而無(wú)法表示的數(shù)字時(shí),會(huì)發(fā)生下溢。在IEEE和RAPTOR中,結(jié)果是0。上溢:當(dāng)數(shù)字因太大而無(wú)法表示時(shí),會(huì)發(fā)生上溢RAPTOR使用它自己的特殊表示方法來(lái)表示此情況
(+Inf*************)9RAPTOR不遵守IEEE754的情況正/負(fù)無(wú)窮大:被0除時(shí)出現(xiàn)RAPTOR不支持無(wú)窮大,在此類情況下它會(huì)給出“Can'tdividebyzero”錯(cuò)誤。非數(shù)字(NaN):NaN用于表示無(wú)效的運(yùn)算(例如:-1的平方根)RAPTOR會(huì)立即生成錯(cuò)誤(例如:“Can'ttakesquarerootofnegativenumber”)10RAPTOR精度問(wèn)題RAPTOR浮點(diǎn)數(shù)以二進(jìn)制存儲(chǔ),并分為三個(gè)部分,總長(zhǎng)度為64位:符號(hào)、指數(shù)和尾數(shù)。1個(gè)符號(hào)位11位指數(shù)52位尾數(shù)符號(hào)存儲(chǔ)數(shù)字的符號(hào)(正或負(fù))指數(shù)存儲(chǔ)使數(shù)字增大或減小到的2的冪(最大/最小的2的冪是+1,023和-1,022)尾數(shù)存儲(chǔ)實(shí)際的數(shù)字尾數(shù)的有限存儲(chǔ)區(qū)域限制了兩個(gè)相近的浮點(diǎn)數(shù)能夠接近的程度(也即精度)11RAPTOR精度問(wèn)題在RAPTOR的默認(rèn)精度情形下,可以有以下兩種計(jì)算數(shù)值:整數(shù),最長(zhǎng)為10位有效數(shù)值例如:1073741824(2^30)浮點(diǎn)數(shù),最長(zhǎng)為15位有效數(shù)值,初始默認(rèn)四位小數(shù)例如:562949953421312.0000(2^49)或0.110012RAPTOR精度問(wèn)題set_precision()設(shè)置小數(shù)位后的精度,設(shè)置以后,系統(tǒng)中所有數(shù)值全部使用浮點(diǎn)數(shù)表示(不再有整數(shù)表達(dá))13二進(jìn)制循環(huán)數(shù)字(0.1)10轉(zhuǎn)為二進(jìn)制會(huì)成為無(wú)限循環(huán)小數(shù)IEEE754因此產(chǎn)生截?cái)嗾`差14算法環(huán)境的轉(zhuǎn)換RAPTOR原型(Prototype)算法設(shè)計(jì)工具所產(chǎn)生的算法用到各種科研和工程實(shí)踐中,需要轉(zhuǎn)變成為用戶要求的環(huán)境中可以運(yùn)行的程序RAPTOR提供將已經(jīng)實(shí)現(xiàn)的算法轉(zhuǎn)換為不同的程序設(shè)計(jì)語(yǔ)言(Ada、C++、C#、Java等)的功能15RAPTOR->C++(Hanoi塔)16RAPTOR->C++(Hanoi塔)主要修改和差異:為所有的RAPTOR算法中的變量設(shè)計(jì)C++的變量類型在C++中對(duì)所有的變量名的大小寫(xiě)敏感在屏幕輸出過(guò)程中,C++環(huán)境一般不支持類似“+”這樣的字符串連接符,而是需要用”<<”替代17RAPTOR->C++(快速排序)18RAPTOR->C++(文件I/O)C++文件操作的語(yǔ)句包括:文件輸入輸出頭文件:fstream;
輸入流定義和輸入文件打開(kāi):ifstreamredirect_input("m101-data.csv",ios::in);文件數(shù)據(jù)輸入到變量:while(redirect_input>>temp);輸入文件關(guān)閉:redirect_input.close();19RAPTOR->C++(數(shù)組)數(shù)組聲明(int*arr_Data=newint[105];C++的特點(diǎn):指針規(guī)定了數(shù)組的最大元素個(gè)數(shù):105C++的特點(diǎn),數(shù)組預(yù)先定義的大小不可逾越C++中的指針(*)和地址(&)等特殊形式來(lái)傳遞子程序(函數(shù))形式參數(shù)中的數(shù)組類參數(shù)voidQkPass(int*R,inti,intj,int&QkPass_result)20RAPTOR->C++(子圖、子程序)RAPTOR子程序會(huì)自動(dòng)識(shí)別成為C++的函數(shù)但RAPTOR的子圖轉(zhuǎn)成的C++程序中,無(wú)法識(shí)別子圖的存在(例如RAPTOR算法中的Input_file_data和Output_file_data子圖),只是按照main子圖對(duì)其他子圖的調(diào)用順序,依次將其他賦值、決策和循環(huán)語(yǔ)句進(jìn)行轉(zhuǎn)換21RAPTOR->C++(隨機(jī)漫步)22RAPTOR轉(zhuǎn)換的C++圖形指令與WinBGIm圖形庫(kù)的對(duì)比RAPTOR轉(zhuǎn)換的C++圖形指令WinBGIm圖形庫(kù)指令備注-#include<winbgim.h>包含需要的C++頭文件open_graph_window(field_width,field_height);set_window_title("RandomWalk");initwindow(field_width,field_height,"RandemWalk");初始化圖形視窗并設(shè)置其標(biāo)題欄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:");在圖形視窗顯示文字23C++的薄弱環(huán)節(jié)在于不同類型變量的轉(zhuǎn)換WinBGIm圖形庫(kù)支持字符串的顯示,但不支持?jǐn)?shù)值變量直接在圖形視窗輸出須將數(shù)值類的變量—getdist(漫步終點(diǎn)與出發(fā)點(diǎn)的距離),轉(zhuǎn)變成為字符串之后才能顯示,C++實(shí)際上也沒(méi)有此類函數(shù)最后使用了變通的辦法sprint()(格式化輸出函數(shù)),將getdist的輸出結(jié)果變成字符串,再調(diào)用outtextxy()函數(shù)將串里的字符顯示在C++圖形視窗中24C++的隨機(jī)數(shù)函數(shù)在C++的隨機(jī)數(shù)應(yīng)用中,需要用到隨機(jī)數(shù)種的函數(shù),其作用是為每一次隨機(jī)函數(shù)的調(diào)用,給出一個(gè)與上一次應(yīng)用不同的初值本例的循環(huán)進(jìn)行了2000次,就需要2000個(gè)不同的種子,否則隨機(jī)數(shù)列就會(huì)出現(xiàn)一致性的現(xiàn)象另一方案,是采用系統(tǒng)時(shí)間值,這也是最容易取得的不同種子初值:srand(inttime(0));25RAPTOR的轉(zhuǎn)換和編譯問(wèn)題RAPTOR除了可以將其環(huán)境中的算法轉(zhuǎn)換成高級(jí)語(yǔ)言后編譯之外,也支持直接進(jìn)行編譯在不少情況下,在RAPTOR中運(yùn)行并得到結(jié)果的算法,但就是無(wú)法通過(guò)編譯或轉(zhuǎn)換為高級(jí)語(yǔ)言的代碼26不可編譯和轉(zhuǎn)換的狀況通過(guò)應(yīng)用實(shí)驗(yàn),目前可以歸納出三類不可編譯的RAPTOR算法:第一種是子圖的遞歸調(diào)用;第二種是子圖和過(guò)程的相互調(diào)用;第三種是變量未賦初值問(wèn)題在這三種問(wèn)題的算法要實(shí)現(xiàn)編譯和轉(zhuǎn)換,必須做一些調(diào)整27RAPTOR子圖遞歸的調(diào)整策略28RAPTOR子圖交叉調(diào)用調(diào)整策略29子程序輸出變量賦初值調(diào)整策略1、在RAPTOR子程序中,輸出變量在調(diào)用程序中不必賦初值,也可以運(yùn)行,但無(wú)法通過(guò)編譯;2、只要在調(diào)用程序程序中,加上賦初值的語(yǔ)句,即可通過(guò)編譯。30選擇計(jì)算工具的理由1、動(dòng)態(tài)語(yǔ)言和靜態(tài)語(yǔ)言動(dòng)態(tài)類型語(yǔ)言指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言,該語(yǔ)言會(huì)在你第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來(lái)靜態(tài)類型語(yǔ)言:靜態(tài)類型語(yǔ)言的數(shù)據(jù)類型是在編譯其間檢查的,也就是說(shuō)在寫(xiě)程序時(shí)要聲明所有變量的數(shù)據(jù)類型31選擇計(jì)算工具的理由2、強(qiáng)類型和弱類型語(yǔ)言任何程序變量都有兩個(gè)屬性:類型和值;也就是說(shuō),弱類型的變量同樣有類型強(qiáng)類型的變量類型,必須在源代碼中明確定義,稱之為“變量聲明”弱類型的變量類型則是無(wú)需聲明的,由解釋器解釋強(qiáng)類型的變量類型是不能改變的,弱類型變量是隨需改變的,這是強(qiáng)弱類型語(yǔ)言的主要區(qū)別32選擇計(jì)算工具的理由動(dòng)態(tài)類型語(yǔ)言,特別是高級(jí)動(dòng)態(tài)類型語(yǔ)言,由于取消了變量的限制,能夠讓人們可以集中精力思考業(yè)務(wù)邏輯實(shí)現(xiàn)強(qiáng)類型語(yǔ)言的優(yōu)勢(shì)究竟是什么呢?顯然就是執(zhí)行效率非常高。例如,C/C++的特點(diǎn),使它成為Unix操作系統(tǒng)的基石和大部分工業(yè)控制系統(tǒng)的主要程序設(shè)計(jì)語(yǔ)言33RAPTOR與面向?qū)ο竺嫦驅(qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming,OOP)作為另一類編程思想,它將一個(gè)系統(tǒng)看成是一個(gè)個(gè)對(duì)象組成,這些對(duì)象包含了數(shù)據(jù)和與其相關(guān)操作34OOP要素對(duì)象(Object):包含一定的數(shù)據(jù)結(jié)構(gòu)和狀態(tài)的實(shí)體操作(Operation):作用于對(duì)象的行為,如訪問(wèn)和處理對(duì)象的狀態(tài)封裝(Encapsulation):定義對(duì)象和操作,只提供抽象的接口,并隱藏它們的具體實(shí)現(xiàn)35OOP要素繼承(Inheritance):通過(guò)繼承現(xiàn)有類型的性質(zhì),創(chuàng)建新的數(shù)據(jù)類型,而不影響原有數(shù)據(jù)類型多態(tài)性(Polymorphism):判定數(shù)據(jù)類型集合中各類型的區(qū)別,使程序可以按照它們的共同特性來(lái)書(shū)寫(xiě)36RAPTOR對(duì)OOP的支持RAPTOR中的面向?qū)ο蟮哪J皆试S用戶創(chuàng)建類(Class)及其方法(Method)和屬性(attributes),進(jìn)行對(duì)象實(shí)例化,并實(shí)踐面向?qū)ο蟮某绦蛟O(shè)計(jì)(OOP)。37RAPTOR對(duì)OOP的支持在RAPTOR面向?qū)ο蟮哪J綍?huì)出現(xiàn)兩個(gè)標(biāo)簽:UML和mainRAPTOR使用一種所謂的“統(tǒng)一建模語(yǔ)言(UnifiedModelinglanguage,UML)”的可視化形式來(lái)創(chuàng)建面向?qū)ο蟮某绦蚪Y(jié)構(gòu)38創(chuàng)建”Cube”類39使用Cube類計(jì)算立方體的體積使用名為cube的類,利用立方體的一條邊來(lái)計(jì)算的立方體的體積需要下列項(xiàng)目:字段:Side(邊長(zhǎng):數(shù)值)和Volume(體積:數(shù)值)方法:SetSide(),GetSide(),ComputeVolume(),GetVolume()40Cube類及其成員41為類創(chuàng)建方法一旦已創(chuàng)建了類,將自動(dòng)添加一個(gè)新類名稱選項(xiàng)卡,現(xiàn)需為每個(gè)類的方法創(chuàng)建代碼單擊Cube選項(xiàng)卡,看到四個(gè)新的標(biāo)簽,每個(gè)方法都有一個(gè)。42OOP的main子圖43OOP繼承和多態(tài)性44逆向工程:從代碼到流程圖在大部分問(wèn)題的求解過(guò)程中,都是可以借鑒前人的思維成果,在他人的工作基礎(chǔ)上,進(jìn)行創(chuàng)新和改革將使用程序設(shè)計(jì)語(yǔ)言設(shè)計(jì)的算法還原成流程圖可以幫助理解在算法的邏輯設(shè)計(jì)上的總體構(gòu)架和主要的設(shè)計(jì)思路45CVF介紹CVF是由FATESOFT開(kāi)發(fā)的從代碼到流程圖的轉(zhuǎn)換工具用于逆向工程或軟件開(kāi)發(fā)中的文檔撰寫(xiě),用于分析代碼非常合適46CVF中顯示的代碼樹(shù)和代碼在CVF中,具備了編輯器,所以程序編輯與流程圖可視化可以完全同步,并用流程圖顯示源代碼的結(jié)構(gòu)47CVF介紹CVF從代碼轉(zhuǎn)換而得的可視化流程圖,分為兩類,第一類(flowchart-1),所有的源碼片段顯示在各個(gè)框中第二類(flowchart-2)流程圖中不顯示程序代碼,而是顯示更為抽象的程序構(gòu)架(分支、循環(huán)、代碼塊)48CVF大顆粒度流程-expandlevel149CVF細(xì)顆粒度流程-expandlevel550CVF流程圖與RAPTOR的比較RAPTOR考慮算法設(shè)計(jì),所以所有的計(jì)算步驟需要“原子化”,例如C++的for循環(huán)語(yǔ)句,在RAPTOR至少需要分成3~4個(gè)原子語(yǔ)句來(lái)完成CVF的粒度分級(jí)顯示非常強(qiáng)大,對(duì)分析大型的程序模塊很有幫助;而RAPTOR中,一般需要依靠子圖、子程序?qū)⑤^大的算法進(jìn)行模塊化的設(shè)計(jì)51小結(jié)和回顧誤差問(wèn)題是計(jì)算過(guò)程中不可回避的重要問(wèn)題,對(duì)計(jì)算結(jié)果誤差的成因進(jìn)行系統(tǒng)、詳細(xì)的分析可以使我們認(rèn)識(shí)到所有計(jì)算工具所存在的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025福建福州左海高鐵有限公司(第二次)招聘3人參考考試試題及答案解析
- 2025福建福州新投新筑開(kāi)發(fā)建設(shè)有限公司市場(chǎng)化選聘職業(yè)經(jīng)理人1人備考筆試題庫(kù)及答案解析
- 2025廣西北海銀灘開(kāi)發(fā)投資股份有限公司招聘2人備考考試試題及答案解析
- 2025下半年四川涼山州西昌市教育系統(tǒng)考核引進(jìn)教師98人備考筆試題庫(kù)及答案解析
- 深度解析(2026)《GBT 26103.3-2010GCLD 型鼓形齒式聯(lián)軸器》(2026年)深度解析
- 深度解析(2026)《GBT 26040-2010錫酸鈉》(2026年)深度解析
- 2025廣東廣州市衛(wèi)生健康委員會(huì)直屬事業(yè)單位廣州市第十二人民醫(yī)院第一次招聘26人模擬筆試試題及答案解析
- 2026貴州安順市平壩第一高級(jí)中學(xué)公費(fèi)師范生及高層次人才引進(jìn)2人(第二批)備考考試題庫(kù)及答案解析
- 深度解析(2026)《GBT 25793-2010反應(yīng)黃KN-GR 150%(C.I.反應(yīng)黃15)》(2026年)深度解析
- 2025福建廈門市集美區(qū)寰宇實(shí)驗(yàn)幼兒園招聘1人考試參考試題及答案解析
- 2025四川航天川南火工技術(shù)有限公司招聘考試題庫(kù)及答案1套
- 2025年度皮膚科工作總結(jié)及2026年工作計(jì)劃
- (一診)成都市2023級(jí)高三高中畢業(yè)班第一次診斷性檢測(cè)物理試卷(含官方答案)
- 四川省2025年高職單招職業(yè)技能綜合測(cè)試(中職類)汽車類試卷(含答案解析)
- 2025年青島市公安局警務(wù)輔助人員招錄筆試考試試題(含答案)
- 2024江蘇無(wú)錫江陰高新區(qū)招聘社區(qū)專職網(wǎng)格員9人備考題庫(kù)附答案解析
- 科技園區(qū)入駐合作協(xié)議
- 電大??啤秱€(gè)人與團(tuán)隊(duì)管理》期末答案排序版
- 山東科技大學(xué)《基礎(chǔ)化學(xué)(實(shí)驗(yàn))》2025-2026學(xué)年第一學(xué)期期末試卷
- 2025西部機(jī)場(chǎng)集團(tuán)航空物流有限公司招聘筆試考試備考試題及答案解析
- 2025年吐魯番輔警招聘考試題庫(kù)必考題
評(píng)論
0/150
提交評(píng)論