版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上第1章 數(shù)值計(jì)算與計(jì)算機(jī)現(xiàn)代科學(xué)計(jì)算離不開計(jì)算機(jī),計(jì)算機(jī)科學(xué)技術(shù)的發(fā)展為數(shù)值計(jì)算技術(shù)的發(fā)展提供了基礎(chǔ)。計(jì)算機(jī)的計(jì)算是通過計(jì)算機(jī)軟件或程序來實(shí)現(xiàn)的,其硬件和軟件的工作狀況影響計(jì)算精度和速度。在計(jì)算機(jī)硬件、操作系統(tǒng)和計(jì)算方法一定的情況下,合理地設(shè)計(jì)計(jì)算程序是提高計(jì)算精度和速度的主要途徑。要編寫出一種高效率的計(jì)算程序,需要具備很多知識,既需要掌握一定的編程技術(shù),也需要對計(jì)算機(jī)的特點(diǎn)有所認(rèn)識。同時(shí),還需要了解計(jì)算機(jī)操作系統(tǒng)以及編程語言的發(fā)展史。只有這樣,才能知道如何設(shè)計(jì)最先進(jìn)的計(jì)算程序。1.1 計(jì)算機(jī)發(fā)展史與數(shù)值模式計(jì)算工具是在人類生活的實(shí)際需要中發(fā)展起來的,現(xiàn)代計(jì)算機(jī)的誕生
2、是人類文明的必然產(chǎn)物,它的誕生使數(shù)值模式的發(fā)展和數(shù)值天氣預(yù)報(bào)成為可能。1計(jì)算工具發(fā)展史計(jì)算工具簡稱算具,是幫助人們計(jì)算的工具,它的發(fā)展是與計(jì)算技術(shù)發(fā)展相聯(lián)系的。隨著生產(chǎn)的發(fā)展和社會的進(jìn)步,算具經(jīng)歷了從簡單到復(fù)雜、從低級到高級的發(fā)展過程,其歷史可追溯至遠(yuǎn)古時(shí)期。人的手指是一種天然的計(jì)算工具,也是最古老的計(jì)算工具之一。遠(yuǎn)古時(shí)期,人們借助手指計(jì)數(shù)??墒?,人類手指只有10個(gè),不能進(jìn)行更復(fù)雜的計(jì)算,于是人們使用小石頭、貝殼、木棍、草繩等作為運(yùn)算工具。算籌、算盤是人類最早的手動計(jì)算工具。我國春秋時(shí)期出現(xiàn)的算籌,是世界上最古老的算具,例如,春秋戰(zhàn)國時(shí)期的老子中記述了“善數(shù)者不用籌策”。根據(jù)史書的記載和考古材
3、料,我國古代的算籌實(shí)際上是一根根同樣長短和粗細(xì)的小棍子,多用竹子制成,也有用木頭、象牙、金屬等材料制成的,因此,在英語中,“算籌”被翻譯成“Counting rod”(計(jì)數(shù)棒)。古代算籌不僅是正、負(fù)整數(shù)與分?jǐn)?shù)的四則運(yùn)算和開方的運(yùn)算工具,而且還包含著各種特定的演算。算籌促進(jìn)了中國古代數(shù)學(xué)的早期發(fā)達(dá)與持續(xù)發(fā)展。在算籌之后,隨著社會的進(jìn)步,我國勞動人民又發(fā)明了算盤作為運(yùn)算工具。早在公元15世紀(jì),算盤已經(jīng)在我國廣泛使用,后來流傳到日本、朝鮮等國。算盤已經(jīng)基本具備了現(xiàn)代計(jì)算器的主要結(jié)構(gòu)特征。在此之后,1642年法國人帕斯卡設(shè)計(jì)出了機(jī)械式加法機(jī),這是世界上第一臺機(jī)械式數(shù)字計(jì)算機(jī)。為了制作這臺機(jī)器,帕斯卡花
4、了3年時(shí)間。這臺加法機(jī)是利用齒輪傳動原理,通過手工操作來實(shí)現(xiàn)加、減運(yùn)算的。帕斯卡的加法機(jī)當(dāng)時(shí)在法國引起了轟動。世界上第一臺能夠自動運(yùn)算的計(jì)算器,是1822年由英國數(shù)學(xué)家巴貝其發(fā)明的,是以蒸汽為動力代替人類進(jìn)行具體運(yùn)算。1946年發(fā)生了人類歷史上一件劃時(shí)代的大事世界上第一臺電子數(shù)字計(jì)算機(jī)ENIAC在美國誕生。2計(jì)算機(jī)發(fā)展歷程電子計(jì)算機(jī)在短短的幾十年里經(jīng)過了電子管、晶體管、集成電路(IC)和超大規(guī)模集成電路(VLSI)等階段的發(fā)展,使計(jì)算機(jī)的體積越來越小、功能越來越強(qiáng)、價(jià)格越來越低、應(yīng)用越來越廣泛,目前正朝著智能化計(jì)算機(jī)方向發(fā)展。第一代計(jì)算機(jī)(約從1946年到1958年),體積較大,運(yùn)算速度較低,
5、存儲容量不大,而且價(jià)格昂貴,使用也不方便。為了解決一個(gè)問題,所編制的程序的復(fù)雜程度難以表述。這一代計(jì)算機(jī)主要用于科學(xué)計(jì)算,只在重要部門或科學(xué)研究部門使用。第二代計(jì)算機(jī)(約從1958年到1965年),全部采用晶體管作為電子器件,與第一代計(jì)算機(jī)相比,其運(yùn)算速度提高了近百倍,而體積只有原來的幾十分之一。在軟件方面,開始使用計(jì)算機(jī)算法語言。這一代計(jì)算機(jī)不僅用于科學(xué)計(jì)算,還用于數(shù)據(jù)和事務(wù)處理以及進(jìn)行工業(yè)控制。第三代計(jì)算機(jī)(約從1965年到1970年),主要特征是以中、小規(guī)模集成電路為電子器件,并且出現(xiàn)操作系統(tǒng),使計(jì)算機(jī)的功能越來越強(qiáng),應(yīng)用范圍越來越廣。它們不僅用于科學(xué)計(jì)算,還用于文字處理、企業(yè)管理、自動
6、控制等領(lǐng)域,出現(xiàn)了計(jì)算機(jī)技術(shù)與通信技術(shù)相結(jié)合的信息管理系統(tǒng),可用于生產(chǎn)管理、交通管理、情報(bào)檢索等領(lǐng)域。第四代計(jì)算機(jī)(約從1970年到1981年)采用大規(guī)模集成電路(LSI)和超大規(guī)模集成電路(VLSI)為主要電子器件制成的計(jì)算機(jī)。例如,80386微處理器,在面積約為10mm ×l0mm的單個(gè)芯片上,可以集成大約32萬個(gè)晶體管。第五代計(jì)算機(jī)(約從1981年到現(xiàn)在)把信息采集、存儲、處理、通信和人工智能結(jié)合一起具有形式推理、聯(lián)想、學(xué)習(xí)和解釋能力。它的系統(tǒng)結(jié)構(gòu)將突破傳統(tǒng)的馮·諾依曼機(jī)器的概念,能夠?qū)崿F(xiàn)高度的并行處理。有趣的是,算盤和計(jì)算機(jī)的發(fā)明都與中國古代的易經(jīng)相關(guān)。有人研究發(fā)現(xiàn)
7、,算盤的結(jié)構(gòu)與中國易經(jīng)中的河圖相似。計(jì)算機(jī)的二進(jìn)制也是與中國易經(jīng)八卦結(jié)構(gòu)排列相對應(yīng)的,八卦圖其實(shí)是一種八進(jìn)制圖形。3數(shù)值模式與計(jì)算機(jī)數(shù)值模式是數(shù)值求解基于有限認(rèn)識的基礎(chǔ)上建立的描述某種物理、化學(xué)等變化規(guī)律的近似理論模型,它是一種離散化的數(shù)值模型,是數(shù)值模擬和預(yù)報(bào)的一種工具??梢哉f,沒有電子計(jì)算機(jī),也就不會有數(shù)值模式的發(fā)展。數(shù)值模式有不同的種類,如大氣模式、海洋模式、生物模式等。按尺度劃分,有小尺度、中尺度和大尺度預(yù)報(bào)模式等;按時(shí)間劃分,有短期、中期和長期預(yù)報(bào)模式等;按其離散化和求解方法,有網(wǎng)格點(diǎn)模式、譜模式等。數(shù)值模擬大氣運(yùn)動可以幫助進(jìn)行天氣預(yù)報(bào),這種思想可追溯到20世紀(jì)20年代英國數(shù)學(xué)家Ri
8、chardson的工作。Richardson(1922)論述了數(shù)值預(yù)報(bào)的原理和可能性,并且應(yīng)用完全的原始方程組,并對歐洲地區(qū)的地面氣壓場進(jìn)行了6個(gè)小時(shí)的預(yù)報(bào),但結(jié)果很不理想。這次失敗曾使人們一度對數(shù)值天氣預(yù)報(bào)的可能性產(chǎn)生懷疑。直到第二次世界大戰(zhàn)結(jié)束之后,由于電子計(jì)算機(jī)的出現(xiàn),加上氣象觀測網(wǎng)以及高空觀測的發(fā)展,數(shù)值模式和天氣預(yù)報(bào)又引起了人們的注意。1950年,Charney等人用準(zhǔn)地轉(zhuǎn)正壓模式,在電子計(jì)算機(jī)上首次成功地對北美地區(qū)500百帕高度的氣壓場,做了24小時(shí)的預(yù)報(bào)。這一結(jié)果的公布被認(rèn)為是數(shù)值模式和數(shù)值預(yù)報(bào)發(fā)展的重要里程碑。而當(dāng)時(shí)所用的計(jì)算工具是一臺可編程式的電子數(shù)字積分計(jì)算機(jī)。借助計(jì)算機(jī),
9、從Charney等的成功工作開始,數(shù)值模式和數(shù)值預(yù)報(bào)步入了繁榮發(fā)展的時(shí)期。數(shù)值模式的發(fā)展與計(jì)算機(jī)的發(fā)展緊密相聯(lián),計(jì)算機(jī)由傳統(tǒng)的單核CPU的處理器發(fā)展為多核CPU的處理器,而數(shù)值模式也由單CPU的串行計(jì)算,發(fā)展到多CPU的并行計(jì)算,這大大提高了模式的計(jì)算速度。隨著計(jì)算機(jī)發(fā)展,數(shù)值模式的計(jì)算方式、程序結(jié)構(gòu)也將不斷得到改進(jìn),這將使數(shù)值模式的模擬能力和預(yù)報(bào)能力不斷得到提高。1.2 計(jì)算機(jī)軟件與數(shù)值模式比較數(shù)值模式是一種特殊的計(jì)算機(jī)軟件,它與一般的計(jì)算機(jī)軟件有很多共同之處,但它們之間又存在一定的差別。1.2.1 計(jì)算機(jī)軟件和數(shù)值模式的特點(diǎn)計(jì)算機(jī)軟件是指計(jì)算機(jī)系統(tǒng)中的程序及其文檔。計(jì)算機(jī)程序簡稱為程序,是
10、指一組指示計(jì)算機(jī)每一步動作的指令,通常用某種程序設(shè)計(jì)語言編寫,運(yùn)行于某種目標(biāo)體系結(jié)構(gòu)上。文檔是為了便于了解程序所需的闡明性的技術(shù)資料。程序必須裝入機(jī)器內(nèi)部才能工作,文檔不一定保存在計(jì)算機(jī)里。在一定意義上,數(shù)值模式可以稱為一種計(jì)算機(jī)軟件,它與一般軟件程序一樣,具有以下特性。1程序的靜態(tài)與動態(tài)屬性(1)靜態(tài):程序就是用計(jì)算機(jī)語言描述某一問題的解決步驟,其表示是靜態(tài)的。(2)動態(tài):程序代碼通過編譯或解釋成計(jì)算機(jī)指令代碼,稱為可執(zhí)行程序。它的動態(tài)執(zhí)行就是人們常說的“進(jìn)程”。2程序是由程序語言抽象的符號表達(dá)計(jì)算機(jī)的指令代碼是以二進(jìn)制表示的機(jī)器碼。在高級設(shè)計(jì)語言以八進(jìn)制、十進(jìn)制、十六進(jìn)制表示。因?yàn)檎Z言越高
11、級,越好使用,翻譯程序的任務(wù)越重,所以程序設(shè)計(jì)語言對軟件開發(fā)起很大作用。3程序是對數(shù)據(jù)施行算法的過程程序中包括一定的算法和數(shù)據(jù)。程序執(zhí)行后,對數(shù)據(jù)進(jìn)行了加工或提供了一組動作的計(jì)算辦法,即算法。它使數(shù)據(jù)由初始態(tài)變?yōu)榻K止態(tài),并且,同樣的數(shù)據(jù)改變可使用不同的算法實(shí)現(xiàn)。程序的數(shù)據(jù)一般用于刻畫事物的屬性和狀態(tài)。合理設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)是提高程序質(zhì)量的先決條件。4程序具有分層嵌套的結(jié)構(gòu)程序的結(jié)構(gòu)是分層嵌套的,例如,主程序P調(diào)用子程序A,而A又調(diào)用子程序B,環(huán)環(huán)相扣,而子程序都具有一定的通用性。若不采用此種結(jié)構(gòu),雖然可以實(shí)現(xiàn)同樣的程序功能,但將增加計(jì)算程序代碼長度。數(shù)值模式與一般的商業(yè)軟件有一定的不同。一般商業(yè)軟件
12、具有很強(qiáng)的人機(jī)對話界面操作,適合于廣大的人群使用,趨向于簡單化操作發(fā)展;而數(shù)值模式的重點(diǎn)在于計(jì)算,其模式本身不僅具有一般軟件的設(shè)計(jì)結(jié)構(gòu),而且具有物理、化學(xué)等規(guī)律的描述以及一定的計(jì)算方法,只適合專業(yè)技術(shù)人員來操作。數(shù)值模式與一般的商業(yè)軟件最大的不同在于,數(shù)值模式運(yùn)行結(jié)果的正確性有一定的不可知性,而一般的商業(yè)軟件運(yùn)行結(jié)果的正確性可以立即得到證實(shí)。數(shù)值模式計(jì)算結(jié)果的正確與否只有在事件發(fā)生后才能確定,有時(shí)實(shí)測資料也無法獲得,正因?yàn)槿绱?,有些?shù)值模式的計(jì)算結(jié)果雖然看上去似乎“合理”,但實(shí)際上可能存在一些代碼描述錯(cuò)誤。因此說,數(shù)值模式的發(fā)展比一般商業(yè)軟件的開發(fā)難度更大,要求更高。然而,在編寫數(shù)值模式時(shí),也
13、需要像編寫計(jì)算機(jī)軟件一樣,只有掌握一定的規(guī)則、技巧,才能提高程序的性能和便于以后的維護(hù)。1.2.2 計(jì)算機(jī)軟件與數(shù)值模式的發(fā)展計(jì)算機(jī)軟件的發(fā)展可以看作數(shù)值模式發(fā)展的晴雨表。了解了軟件的發(fā)展,在一定的程度上有助于發(fā)展數(shù)值模式。數(shù)值模式與商業(yè)軟件的發(fā)展具有一定的相似性。1計(jì)算機(jī)軟件發(fā)展計(jì)算機(jī)軟件可以分為系統(tǒng)軟件(操作系統(tǒng)、數(shù)據(jù)庫等)、支撐軟件(高級語言編譯器、程序庫、CASE工具等)和應(yīng)用軟件。計(jì)算機(jī)軟件隨著計(jì)算機(jī)硬件的發(fā)展而發(fā)展。計(jì)算機(jī)軟件發(fā)展的歷史不長,世界上第一臺電子數(shù)字式計(jì)算機(jī)ENIAC于1946年2月在美國賓夕法尼亞大學(xué)正式投入運(yùn)行,自那時(shí)起,計(jì)算機(jī)軟件業(yè)才開始萌芽。計(jì)算機(jī)軟件的發(fā)展具體
14、表現(xiàn)在計(jì)算機(jī)系統(tǒng)、編程語言、程序結(jié)構(gòu)和計(jì)算方式等方面的發(fā)展,它們之間又是相互聯(lián)系的。(1)計(jì)算機(jī)操作系統(tǒng)的發(fā)展首先,所謂的操作系統(tǒng)是指計(jì)算機(jī)系統(tǒng)中的一個(gè)系統(tǒng)軟件,它是管理和控制計(jì)算機(jī)系統(tǒng)中的硬件和軟件資源、合理地組織計(jì)算機(jī)工作流程以及方便用戶使用的程序集合。操作系統(tǒng)是隨著計(jì)算機(jī)硬件的發(fā)展和人們對于計(jì)算機(jī)技術(shù)要求的提高而逐步發(fā)展形成的。早期的計(jì)算機(jī)沒有操作系統(tǒng),人們是通過各種操作按鈕來控制計(jì)算機(jī)的。后來出現(xiàn)了匯編語言,操作人員通過有孔的紙帶將程序輸入電腦進(jìn)行編譯和運(yùn)行。由于程序難免有誤,機(jī)器通常會中途崩潰。這給用戶帶來極大的不便,并且不利于設(shè)備和程序的共用。為了解決這些問題,于是出現(xiàn)了操作系統(tǒng)。
15、計(jì)算機(jī)操作系統(tǒng)的發(fā)展經(jīng)歷了兩個(gè)階段。第一個(gè)階段為單用戶、單任務(wù)的操作系統(tǒng),繼CP/M操作系統(tǒng)之后,還出現(xiàn)了C-DOS、M-DOS、TRS-DOS、S-DOS和MS-DOS等磁盤操作系統(tǒng)。第二個(gè)階段為多用戶多道作業(yè)和分時(shí)系統(tǒng)。其典型代表有UNIX、Xenix、OS/2以及Windows操作系統(tǒng)。分時(shí)的多用戶、多任務(wù)、樹形結(jié)構(gòu)的文件系統(tǒng)以及重定向和管道是UNIX的三大特點(diǎn)。其中,UNIX系統(tǒng)是1969年問世的,最初是在中小型計(jì)算機(jī)上運(yùn)用。最早移植到80286微機(jī)上的UNIX系統(tǒng),稱為Xenix。Xenix系統(tǒng)的特點(diǎn)是短小精悍,系統(tǒng)開銷小,運(yùn)行速度快。經(jīng)過多年的發(fā)展,Xenix已成為十分成熟的系統(tǒng)。
16、MS-DOS是在IBM-PC及其兼容機(jī)上運(yùn)行的操作系統(tǒng),它起源于SCP86-DOS,是1980年基于8086微處理器而設(shè)計(jì)的單用戶操作系統(tǒng)。后來,微軟公司獲得了該操作系統(tǒng)的專利權(quán),配備在IBM-PC上,并命名為PC-DOS。Windows是微軟公司在1985年11月發(fā)布的第一代窗口式多任務(wù)系統(tǒng),它使PC開始進(jìn)入了所謂的圖形用戶界面時(shí)代。Linux是目前全球最大的一個(gè)自由軟件,它是一個(gè)可與UNIX和Windows相媲美的操作系統(tǒng),具有完備的網(wǎng)絡(luò)功能。Linux最初由芬蘭人Linus Torvalds開發(fā),其源程序在Internet上公開發(fā)布,由此,全球電腦愛好者可以根據(jù)自己的意愿參與Linux某
17、一方面功能的完善或開發(fā)。因此,Linux將發(fā)展成為一個(gè)全球最穩(wěn)定的、最有應(yīng)用前景的操作系統(tǒng)之一??傊?jì)算操作系統(tǒng)的出現(xiàn)是人們對計(jì)算機(jī)技術(shù)要求的必然結(jié)果,它的發(fā)展將會使計(jì)算速度不斷得到提高,并且使人們更加方便地進(jìn)行數(shù)據(jù)共享、程序代碼和設(shè)備公用。同時(shí),也將給數(shù)值模式的計(jì)算提供更良好的工作環(huán)境。(2)編程語言的發(fā)展早期程序員們是使用機(jī)器語言來進(jìn)行編程運(yùn)算的,并直接對以數(shù)字表示的機(jī)器代碼進(jìn)行操作。機(jī)器語言是用由“0”和“1”組成的二進(jìn)制代碼表示的、計(jì)算機(jī)能直接識別和執(zhí)行的一種機(jī)器指令的集合。使用機(jī)器語言是十分痛苦的,特別是在程序有錯(cuò)需要修改時(shí),更是如此。而且,由于每臺計(jì)算機(jī)的指令系統(tǒng)往往各不相同,所
18、以,在一臺計(jì)算機(jī)上執(zhí)行的程序,要想在另一臺計(jì)算機(jī)上執(zhí)行,必須重新編寫程序。為了減輕使用機(jī)器語言編程的痛苦和便于閱讀,人們進(jìn)行了一種有益的改進(jìn),把機(jī)器代碼用英文字符串來表示,于是出現(xiàn)了匯編語言。從最初與計(jì)算機(jī)交流的痛苦經(jīng)歷中,人們意識到,應(yīng)該設(shè)計(jì)一種語言,這種語言接近于數(shù)學(xué)語言或人的自然語言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用。經(jīng)過努力,IBM公司的John Backus領(lǐng)導(dǎo)的研究小組于1954年首次推出了第一代Fortran(Formula Translator)語言。Fortran語言以它的簡潔、高效性,成為此后幾十年科學(xué)和工程計(jì)算的主流語言,除了Fortran以外,還有
19、ALGOL60等科學(xué)和工程計(jì)算語言。隨著計(jì)算機(jī)應(yīng)用的深入,產(chǎn)生了使用計(jì)算機(jī)來進(jìn)行商業(yè)管理的需求,于是COBOL這類商業(yè)和行政管理語言出現(xiàn)了,并一直流行至今。早期的這些編程語言都是面向計(jì)算機(jī)專業(yè)人員的,為了普及編程語言,使計(jì)算機(jī)更為大眾化,美國的達(dá)爾摩斯學(xué)院的Thomas Kurtz和John Kemeny于1964年編制了一種入門級的Basic語言,這種語言簡單易學(xué)、功能較全,比較適合初學(xué)者,廣泛用于中小型、微型計(jì)算機(jī)中。20世紀(jì)60年代初,結(jié)構(gòu)化程序設(shè)計(jì)的思想就已產(chǎn)生,1960年第一種結(jié)構(gòu)化程序設(shè)計(jì)語言ALGOL被推出。在這種思想的指導(dǎo)下,20世紀(jì)70年代初,人們又推出了兩種典型的結(jié)構(gòu)化程序
20、設(shè)計(jì)語言,一種是PASCAL語言,另一種是C語言。PASCAL語言,以17世紀(jì)法國數(shù)學(xué)家兼哲學(xué)家Blaise Pascal的名字命名,1970年問世,是由ALGOL 60發(fā)展而來的結(jié)構(gòu)化編程語言,能夠利用組合塊結(jié)構(gòu)及多種數(shù)據(jù)類型。這種語言直觀易懂,可用于科學(xué)計(jì)算,也可用于編寫系統(tǒng)程序,它是由瑞士蘇黎世工學(xué)院的教授Niklano Wirth編制的。C語言,最早由貝爾實(shí)驗(yàn)室的Dennis Ritchie開發(fā),于1972年正式發(fā)表。C語言具有高級語言和匯編語言的雙重特色,書寫簡便靈活,有助于縮短程序的長度,提高工效,便于移植,常用于編寫系統(tǒng)軟件,主要是為專業(yè)程序員設(shè)計(jì)的。20世紀(jì)80年代,在軟件設(shè)計(jì)
21、思想上,又產(chǎn)生了一次革命,其成果就是面向?qū)ο蟮某绦蛟O(shè)計(jì)。在眾多的面向?qū)ο笳Z言當(dāng)中,最為突出的就是C+語言。1980年,美國貝爾實(shí)驗(yàn)室的Bjarne Strotstrup博士及其同事開始對C語言進(jìn)行改進(jìn)和擴(kuò)充,最初被稱為“帶類的C”,1983年才取名為C+。這種語言繼承了C語言的所有優(yōu)點(diǎn),如簡潔性和高效性,同時(shí)引入了面向?qū)ο蟮乃枷耄珙?、封裝、繼承、多態(tài)等。像任何人類的自然語言一樣,C+語言提供一種表達(dá)思想和概念的方法,當(dāng)問題變得大而復(fù)雜時(shí),使用C+語言來解決問題將會比使用其他語言更加容易、更加靈活。在最早的面向?qū)ο笳Z言中,除了C+以外,還有一種純面向?qū)ο笳Z言也十分流行,如Smalltalk語言
22、等。20世紀(jì)90年代,計(jì)算機(jī)圖像技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展占主導(dǎo)地位,一些相關(guān)的編程語言被發(fā)展起來。1991年,美國微軟公司推出了Visual Basic(簡稱VB)。Visual意即可視的、可見的,是指在開發(fā)時(shí)不需要編寫大量代碼去描述界面元素的外觀和位置,只需把預(yù)先建立好的對象拖放到屏幕上的相應(yīng)位置。翌年,即1992年,美國微軟公司又推出了Visual VC+語言。在這段時(shí)期,出現(xiàn)的另一種編程語言是Java,它誕生于1991年,最初被稱為OAK語言,是SUN公司為一些消費(fèi)性電子產(chǎn)品而設(shè)計(jì)的一個(gè)通用環(huán)境。在網(wǎng)絡(luò)出現(xiàn)之前,OAK可以說是默默無聞,直到網(wǎng)絡(luò)的出現(xiàn),才被重視。1995年,美國Sun Micr
23、osystems公司正式向IT業(yè)界推出了Java語言,該語言具有安全、跨平臺、面向?qū)ο?、簡單、適用于網(wǎng)絡(luò)等顯著特點(diǎn),當(dāng)時(shí)以Web為主要形式的互聯(lián)網(wǎng)正在迅猛發(fā)展,Java的出現(xiàn)迅速引起所有程序員和軟件公司的極大關(guān)注,目前Java已成為動態(tài)網(wǎng)頁和網(wǎng)絡(luò)數(shù)據(jù)庫訪問程序的主要編寫工具。2000年后,編程語言繼續(xù)發(fā)展,又涌現(xiàn)出很多的新語言,如VB.NET、C#、J#等。這些語言集合了許多其他語言的優(yōu)點(diǎn),并增加了新的功能。例如,2000年隨Microsoft.NET Framework一起發(fā)布的Microsoft C#集合了C以及C+,甚至Java的許多優(yōu)點(diǎn);與C+相比較,C#語言中的class類安全性更強(qiáng)
24、??傊?,編程語言的發(fā)展經(jīng)歷了從機(jī)器語言、匯編語言到高級語言的歷程。編程語言的發(fā)展史也是人們不斷追求更高的獨(dú)立于硬件的抽象化、模塊化和封裝化的歷史。(3)程序結(jié)構(gòu)設(shè)計(jì)的發(fā)展程序結(jié)構(gòu)設(shè)計(jì)是伴隨編程語言的變化而發(fā)展的。程序結(jié)構(gòu)設(shè)計(jì)經(jīng)歷了無序化、結(jié)構(gòu)化程序設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)和組件模型等發(fā)展過程。結(jié)構(gòu)化程序設(shè)計(jì)的思想是在20世紀(jì)60年代末、70年代初為解決“軟件危機(jī)”而形成的。在以往的編程過程中,人們經(jīng)常使用轉(zhuǎn)移語句(GOTO),雖然它可以使程序的控制流程強(qiáng)制性地轉(zhuǎn)向程序的任意一處,然而,如果一個(gè)程序中多處出現(xiàn)這種轉(zhuǎn)移語句,將會導(dǎo)致程序流程無序可尋,程序結(jié)構(gòu)雜亂無章,使人難以理解和閱讀,并且容易出錯(cuò)
25、。為此,人們提出了結(jié)構(gòu)化程序設(shè)計(jì)的思想。結(jié)構(gòu)化程序設(shè)計(jì)使程序可讀性強(qiáng)、容易理解、便于維護(hù),它是面向?qū)ο笤O(shè)計(jì)的基礎(chǔ)。PASCAL語言、C語言等的編程特點(diǎn)具體地表現(xiàn)了這種思想。為了進(jìn)一步使程序設(shè)計(jì)合理化,從20世紀(jì)80年代后期開始,人們又提出了面向?qū)ο蟪绦蛟O(shè)計(jì)(Object Oriented Programming,OOP)方法,C+語言的出現(xiàn)是這種思想的明顯體現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計(jì)所包括的內(nèi)容有類(class)、封裝性、繼承性、多態(tài)性等。C+語言中的class與C語言中的struct在應(yīng)用上有點(diǎn)類似,但class可以包括函數(shù)、初始函數(shù)和析構(gòu)函數(shù)(或入口函數(shù)和出口函數(shù))等,并且class的成員有不同
26、的保護(hù)級別(如private、protected、public)。封裝是人們對現(xiàn)實(shí)世界中解決問題時(shí),為了簡化問題,對研究的對象所采用的一種信息屏蔽技術(shù)。封裝后,使用者只需要知道輸入和輸出的幾個(gè)有限變量,而不需要知道其內(nèi)部的實(shí)現(xiàn)過程。繼承是指一個(gè)對象直接使用另一對象的屬性和方法,通過繼承,程序開發(fā)者既可以繼續(xù)使用前人編寫的函數(shù)代碼,又可以增加新的函數(shù),這大大減少了重復(fù)工作。多態(tài)性是指用一個(gè)名字定義不同的函數(shù),這些函數(shù)執(zhí)行不同但又類似的操作,從而實(shí)現(xiàn)“一個(gè)接口,多種方法”,通過函數(shù)名或運(yùn)算符重載和虛函數(shù)來實(shí)現(xiàn)。在同一種語言下,面向?qū)ο蟪绦蛟O(shè)計(jì)為程序員的軟件開發(fā)提供了極大的方便,然而,隨著編程語言和
27、不同應(yīng)用程序數(shù)量的增大,并且不同軟件商需要進(jìn)行一些技術(shù)保護(hù),在這種形勢下,需要發(fā)展一種封裝性好,并且具有連接這些軟件功能的單獨(dú)程序,于是,在20世紀(jì)末,在傳統(tǒng)面向?qū)ο蠹夹g(shù)的基礎(chǔ)上,人們又發(fā)展了組件模型技術(shù)。目前主要流行兩種組件模型:COM(以及建立在COM基礎(chǔ)之上的DCOM)組件模型、CORBA組件模型。 COM(the Component Object Model)是一種平臺獨(dú)立的、分布式、面向?qū)ο蟮南到y(tǒng),用于創(chuàng)建可互操作的二進(jìn)制軟件組件。COM是微軟的“對象鏈接和嵌入”(簡稱OLE),ActiveX(可用于Internet的組件),以及許多其他技術(shù)的基礎(chǔ)。DCOM(the Distribu
28、ted Component Object Model)擴(kuò)展COM,以支持不同計(jì)算機(jī)之間、互聯(lián)網(wǎng)間的對象間通信。 CORBA(the Common Object Request Broker Architecture)是OMG(the Object Management Group)制定的、開放的、獨(dú)立于開發(fā)商的體系結(jié)構(gòu)和基礎(chǔ)構(gòu)造,通過CORBA,計(jì)算機(jī)應(yīng)用程序可以通過網(wǎng)絡(luò)協(xié)同運(yùn)作。CORBA組件能運(yùn)行于任何一種平臺之上,特別是在UNIX平臺上,它已經(jīng)成為編寫分布式應(yīng)用程序以及中間件的標(biāo)準(zhǔn)組件模型。CORBA從一開始就是為了成為一種跨平臺的分布式組件標(biāo)準(zhǔn),經(jīng)過多年的發(fā)展,已經(jīng)成為一種成熟、完備的
29、組件模型。總之,軟件程序結(jié)構(gòu)設(shè)計(jì)思想的變化是計(jì)算機(jī)技術(shù)發(fā)展的反映和必然結(jié)果,程序結(jié)構(gòu)的設(shè)計(jì)遠(yuǎn)遠(yuǎn)沒有達(dá)到完美的程度。從長遠(yuǎn)看,目前程序結(jié)構(gòu)的設(shè)計(jì)還處于初級階段,如同人類產(chǎn)生之前的單細(xì)胞生物的進(jìn)化階段。未來的軟件將會出現(xiàn)高度智能化,可以自復(fù)制、繁殖、信息儲存等。未來計(jì)算機(jī)軟件結(jié)構(gòu)演變將會像生命進(jìn)化一樣向前發(fā)展。(4)計(jì)算機(jī)工作結(jié)構(gòu)的變化計(jì)算機(jī)有兩種工作結(jié)構(gòu),即串行計(jì)算和并行計(jì)算。所謂串行計(jì)算就是指令只能串行執(zhí)行,即指令序列只能按照事先安排好的次序順序地執(zhí)行。所謂并行計(jì)算分為時(shí)間上的并行和空間上的并行。時(shí)間上的并行就是指流水線技術(shù),而空間上的并行則是指用多個(gè)處理器并發(fā)地執(zhí)行計(jì)算。處理器由單核向多核的
30、轉(zhuǎn)變使并行計(jì)算成為可能。并行算法的產(chǎn)生是與實(shí)際應(yīng)用問題的需求緊密聯(lián)系的,其主要原因有兩個(gè)方面:一是因?yàn)橥ㄟ^并行計(jì)算,可以提高計(jì)算速度;二是由于計(jì)算機(jī)電路設(shè)計(jì)有一定的物理極限。單個(gè)處理器的線寬的擴(kuò)展總有一天要達(dá)到物理極限,所以不得不轉(zhuǎn)向多核。從歷史上看,20世紀(jì)70年代末至80年代初是并行算法研究的頂峰時(shí)期,獲得了遞歸問題向量化的成果。隨著多向量處理并行計(jì)算機(jī)(以Cray公司為代表,中國的則是銀河系列)的出現(xiàn),既要考慮多處理機(jī)間的任務(wù)級大粒度并行,又要考慮單處理機(jī)上向量級細(xì)粒度并行的算法在20世紀(jì)80年代初期和中期比較流行。基于SIMD并行計(jì)算機(jī)設(shè)計(jì)的并行算法在20世紀(jì)80年代中期較熱門,但因缺
31、乏通用性,過分依賴機(jī)器,程序設(shè)計(jì)復(fù)雜,隨著20世紀(jì)80年代后期高性能計(jì)算機(jī)的發(fā)展,很快被淘汰。20世紀(jì)90年代中期后,并行算法研究漸漸面向?qū)嶋H而內(nèi)容有所拓寬,不但研究并行算法的設(shè)計(jì)與分析,同時(shí)也兼顧并行機(jī)體系結(jié)構(gòu)和并行程序設(shè)計(jì)。與計(jì)算機(jī)硬件發(fā)展相比,自從1950年第一臺并行計(jì)算機(jī)EDVAC問世以來,并行軟件技術(shù)幾十年來沒有獲得突破性的進(jìn)展,特別是分布式計(jì)算技術(shù),自動并行識別技術(shù)等。要想改變這種局面,并行算法需要走商業(yè)道路,正如美國加州大學(xué)伯克利分校計(jì)算機(jī)科學(xué)教授Culler等(Culler, et al.,1998)所說:“盡管并行計(jì)算的學(xué)術(shù)歷史在時(shí)間上不算短,在內(nèi)容上也很豐富,但從根本上改變
32、這一學(xué)科現(xiàn)狀的是和商用技術(shù)的緊密結(jié)合。”雖然并行算法還沒有發(fā)展成熟,但前途一片光明,隨著計(jì)算機(jī)技術(shù)的發(fā)展,未來并行算法軟件的開發(fā)將會給商家?guī)頍o限的機(jī)遇。2數(shù)值模式的發(fā)展數(shù)值模式的發(fā)展主要體現(xiàn)在模式種類和模式結(jié)構(gòu)兩個(gè)方面。模式種類的發(fā)展主要與社會發(fā)展的需要相關(guān),而模式結(jié)構(gòu)的發(fā)展主要與計(jì)算機(jī)技術(shù)的發(fā)展相關(guān)。(1)數(shù)值模式發(fā)展歷程自20世紀(jì)20年代英國數(shù)學(xué)家Richardson提出數(shù)值預(yù)報(bào)思想后,在一段時(shí)間里,數(shù)值模式的發(fā)展一直處于停滯狀態(tài),直到20世紀(jì)50年代數(shù)字電子計(jì)算機(jī)的出現(xiàn),才使數(shù)值天氣預(yù)報(bào)成為可能。到20世紀(jì)50年代后期,美國和歐洲部分國家的天氣預(yù)報(bào)員開始把由計(jì)算機(jī)產(chǎn)生的天氣圖作為參考基
33、礎(chǔ)。20世紀(jì)60年代,計(jì)算機(jī)的能力增強(qiáng)使區(qū)域天氣模擬變?yōu)槿虼髿饽M成為可能。這使得科學(xué)家們能夠進(jìn)行氣候模擬,即長期大氣平均狀態(tài)。大氣環(huán)流模式(GCMs)開始在全世界傳播開來。20世紀(jì)70年代,GCMs已成為氣候研究的主要工具,在這以前人們主要是通過地區(qū)或區(qū)域氣象資料的收集整理并進(jìn)行統(tǒng)計(jì)。在同一時(shí)期前后,氣候?qū)W家開始關(guān)心大氣中二氧化碳的積累的、長期的、可能的影響,以及研究人類活動對全球變化的影響。與此同時(shí),海洋模式工作者開始建立海洋環(huán)流模式(OGCMs)并進(jìn)行類似的計(jì)算機(jī)模擬工作。因?yàn)楹Q笫菤夂蛳到y(tǒng)的主要組成部分,氣候模式工作者開始把OGCMs 與GCMs 進(jìn)行耦合,以便進(jìn)行全球大氣研究。20
34、世紀(jì)80年代,國際政府部門協(xié)商如何對待氣候變化問題。全球氣候?qū)W家團(tuán)體,政府間氣候變化專門委員會(IPCC)成立以便為這些協(xié)商提供建議。1992年,世界多數(shù)國家共同簽署了聯(lián)合國氣候變化綱要公約(FCCC)。全球變化問題使數(shù)值模式的發(fā)展越來越受到重視,這是因?yàn)閿?shù)值模式是全球變化研究的最有效的工具之一。目前世界上已發(fā)展了多種數(shù)值模式,并且世界各國共同實(shí)施了一系列國際模式比較計(jì)劃(AMIP、PILPS、CMIP等)。(2)數(shù)值模式結(jié)構(gòu)變化與計(jì)算機(jī)硬件、軟件一樣,數(shù)值模式發(fā)展也是經(jīng)歷了從簡單到復(fù)雜,由低級到高級的發(fā)展階段。數(shù)值模式結(jié)構(gòu)變化與計(jì)算機(jī)發(fā)展相聯(lián)系,這決定了在模式程序中需要考慮物理過程的復(fù)雜程度
35、。20世紀(jì)90年代以前,由于計(jì)算機(jī)技術(shù)的限制,加之?dāng)?shù)值模式本身的發(fā)展還不完善,數(shù)值模式結(jié)構(gòu)非常簡單,如一維模式,二層模式等。為了克服計(jì)算機(jī)計(jì)算速度的不足,人們還設(shè)計(jì)出了距平模式、譜模式等。早期的模式既簡單又單一,很多模式計(jì)算方案都是針對某些物理化學(xué)過程而設(shè)計(jì)的,如陸面模式、積雪模式、水文模式、水波模式等。隨著計(jì)算機(jī)技術(shù)的發(fā)展,這些單一的計(jì)算方案如今與大氣模式耦合在一起,逐步發(fā)展成為一種功能強(qiáng)大的集合模式。在這個(gè)集合體中,不同的物理過程可能使用統(tǒng)一的計(jì)算模塊,同一物理化學(xué)過程可以有不同的計(jì)算方法。隨著數(shù)值模式和計(jì)算機(jī)技術(shù)的發(fā)展,模式中考慮物理過程越來越精確,模式的結(jié)構(gòu)越來越細(xì),分辨率越來越高,模
36、式積分的時(shí)間越來越長。從前面講到的軟件結(jié)構(gòu)發(fā)展史可以看到,其發(fā)展經(jīng)歷了無序化、結(jié)構(gòu)化、面向?qū)ο蟪绦蛟O(shè)計(jì)和組件模型等發(fā)展過程。同樣,數(shù)值模式結(jié)構(gòu)的發(fā)展經(jīng)歷了類似的發(fā)展過程。這種發(fā)展過程如同其他任何事物的發(fā)展過程一樣,即從分工到協(xié)作的發(fā)展。1.3 程序設(shè)計(jì)對計(jì)算的影響計(jì)算機(jī)對計(jì)算的影響包括計(jì)算速度和計(jì)算誤差。這兩個(gè)方面的影響又分別來自計(jì)算機(jī)硬件和軟件。計(jì)算誤差產(chǎn)生的原因很多,如把方程式離散化后產(chǎn)生的截?cái)嗾`差、舍入誤差(把看成3.14159)、人為過失誤差等。同樣,影響計(jì)算速度的因素也有很多,如計(jì)算機(jī)硬件性能、計(jì)算方法、程序結(jié)構(gòu)等。雖然計(jì)算機(jī)硬件對計(jì)算速度和精度的影響是客觀事實(shí),然而可以從軟件方面彌
37、補(bǔ)這種不足。這里重點(diǎn)分析計(jì)算機(jī)程序?qū)τ?jì)算速度和精度的影響。1.3.1 計(jì)算方法對計(jì)算精度的影響對于這類誤差,人們研究的很多。它產(chǎn)生于計(jì)算者所采取的計(jì)算方法,不同的計(jì)算方法可能產(chǎn)生不同的誤差。對于數(shù)值模式來說,網(wǎng)格分布特性和迭代方法等都會帶來一定的計(jì)算誤差。因此,在程序設(shè)計(jì)前,需要選擇合適的計(jì)算方法。網(wǎng)格分布特性對數(shù)值計(jì)算誤差有一定的影響。這類誤差來源于網(wǎng)格空間距離的大小、積分計(jì)算的時(shí)間步長、網(wǎng)格單元幾何形狀、物理方程的差分格式等。網(wǎng)格單元的幾何形狀,可分為三角形、四邊形等。差分格式可分為顯式、隱式和半隱式等。在數(shù)值計(jì)算時(shí),不完全迭代總會產(chǎn)生一種所謂的不完全迭代誤差。它是由數(shù)值計(jì)算所得出的當(dāng)前解
38、與在同一套網(wǎng)格上離散方程的精確解之間的偏差,亦即迭代終止時(shí)離散方程的當(dāng)前與精確解的偏差。在實(shí)際計(jì)算時(shí),多數(shù)情況下,由于離散方程采用迭代方法求解時(shí),不可能達(dá)到絕對收斂,必須給定某些限制條件使迭代過程停止。這種條件很多,如規(guī)定相鄰兩次迭代的解的相對偏差小于允許值;規(guī)定離散方程的余量小于一定值;給定迭代次數(shù)等。因而,如果迭代結(jié)果偏差不為0,就會產(chǎn)生截?cái)嗾`差。1.3.2 程序設(shè)計(jì)對計(jì)算精度的影響即使采用同樣的計(jì)算方法,若計(jì)算程序結(jié)構(gòu)不同,也會產(chǎn)生一定的計(jì)算誤差。由于計(jì)算機(jī)只能對有限位數(shù)進(jìn)行運(yùn)算,一般數(shù)必須要進(jìn)行舍入,這就產(chǎn)生了計(jì)算誤差或舍入誤差。1程序變量類型設(shè)置對計(jì)算結(jié)果的影響在編寫程序時(shí),每個(gè)變量
39、都有一種類型,如字符型、整型、實(shí)數(shù)型、雙精度型等。每種類型規(guī)定了在程序運(yùn)行時(shí)這些變量在計(jì)算內(nèi)存里所占的位數(shù),即內(nèi)存空間的大小。例如,字符型占1個(gè)字節(jié),整型占2個(gè)字節(jié),實(shí)數(shù)類型占4個(gè)字節(jié),雙精度占8個(gè)字節(jié)。一個(gè)字節(jié)占8 bits。在C語言中,每個(gè)變量都需要給出數(shù)據(jù)類型說明。在有些編程語言,如Fortran中,可以采用變量的隱含說明,即不需要進(jìn)行變量的類型說明。當(dāng)變量的類型給定后,變量所能容納的最大數(shù)值也就確定了。例如,表示兩個(gè)字節(jié)整型變量所能容納的最大數(shù)是65535(0xFFFF)。如果超過這個(gè)數(shù),計(jì)算結(jié)果就會出錯(cuò)。在Fortran程序中,若變量類型本應(yīng)使用雙精度卻采用單精度的,則會出現(xiàn)計(jì)算結(jié)果
40、錯(cuò)誤。例如,使用程序1-1計(jì)算階乘,如果變量使用單精度類型,當(dāng)輸入數(shù)小于14時(shí),計(jì)算結(jié)果是正確的,否則,不正確,因?yàn)槌^了變量類型的容量。程序1-1program test_precisioncall factorial(13)call factorial(14) call factorial(15) contains subroutine factorial(n) real sum sum=1 do i=1,n sum=sum*i enddo print*,n,'! ',sum end subroutine end program運(yùn)行以上程序,將得到表1-1所示的單精度值。與
41、雙精度計(jì)算結(jié)果比較,可以看出,當(dāng)n>13時(shí),單精度的計(jì)算結(jié)果不正確。表1-1 不同精度下階乘計(jì)算結(jié)果比較階乘單精度(32-bit)雙精度(64-bit)13!14!15!00002程序結(jié)構(gòu)對計(jì)算結(jié)果的影響程序結(jié)構(gòu)的設(shè)計(jì)方法也對計(jì)算結(jié)果有影響。在計(jì)算機(jī)精度一定的條件下,不同的程序設(shè)計(jì)方法也會使計(jì)算產(chǎn)生一定的誤差。例如,對于等式:(1-1)當(dāng)n為一個(gè)大的整數(shù)時(shí),使用左、右代數(shù)式計(jì)算,所得到的結(jié)果會有一定的差異。可見,計(jì)算步驟越多、過程越復(fù)雜,產(chǎn)生計(jì)算誤差的可能性越大,計(jì)算速度越慢。1.3.3 程序設(shè)計(jì)對計(jì)算速度的影響程序設(shè)計(jì)不僅對計(jì)算精度有影響,而且對速度也有影響。同樣,這種影響可能來自程序
42、員所采用的計(jì)算方法、程序結(jié)構(gòu),以及程序編譯器或系統(tǒng)軟件等。1程序結(jié)構(gòu)的影響程序結(jié)構(gòu)對計(jì)算速度的影響是顯而易見的,如對式(1-1)左邊與右邊進(jìn)行計(jì)算。再如,把代數(shù)式:x3+3x2+3x+1變換成(x+1)3,對于前者,計(jì)算機(jī)CPU要進(jìn)行9次操作;對于后者,只需6次操作,顯然,后者的計(jì)算速度快。常見影響計(jì)算速度的另一種情況是,在程序設(shè)計(jì)時(shí)使用重復(fù)計(jì)算。在實(shí)際計(jì)算中,重復(fù)計(jì)算的形態(tài)各種各樣。例如,在一個(gè)循環(huán)結(jié)構(gòu)中,設(shè)置常數(shù)賦值語句,見程序1-2。程序1-2a=10b=20do k=1,100 x=a+b y=x*xenddo再如,在程序中,對相同的表達(dá)式或函數(shù)進(jìn)行重復(fù)計(jì)算,見程序1-3,其中x是一個(gè)
43、變量,f(x)表示為一個(gè)函數(shù)。程序1-3x=10y=f(x)*f(x)可以看出,以上程序?qū)瘮?shù)f(x)進(jìn)行了重復(fù)計(jì)算。因?yàn)閷τ谝欢ǖ膞值,f(x)的值是確定的,因此,對f(x)函數(shù)只需計(jì)算一次,其計(jì)算結(jié)果可使用一個(gè)臨時(shí)變量來保存,如y1=f(x),y=y1*y1。2計(jì)算環(huán)境的影響系統(tǒng)軟件對程序計(jì)算速度的影響也是很好理解的。一般來說,用低級語言編寫出的程序比用高級語言編寫的速度快,程序員自己編寫的程序比借用其他現(xiàn)成模塊的速度快。這是因?yàn)榈图壵Z言與計(jì)算機(jī)機(jī)器語言比較接近,不需要過多地轉(zhuǎn)換翻譯過程,因此計(jì)算速度較快。對于第二次開發(fā)程序或解釋程序,在計(jì)算時(shí),需要經(jīng)歷一些轉(zhuǎn)換過程,因而計(jì)算速度相對較慢。
44、從前面介紹的計(jì)算機(jī)技術(shù)發(fā)展可以看到,當(dāng)今的計(jì)算機(jī)軟件技術(shù)就像給衣服上打“補(bǔ)丁”一樣。一種軟件可拆分為各個(gè)部件,每個(gè)部件可以由不同的開發(fā)商來完成。然而,使用這些“產(chǎn)品”需要滿足一定的規(guī)則和標(biāo)準(zhǔn),因而影響計(jì)算速度。對于數(shù)值程序模塊之間的耦合,在某種程度上,與商業(yè)軟件借用其他現(xiàn)成模塊的操作類似。目前,各種單一模式之間沒有統(tǒng)一標(biāo)準(zhǔn),在對它們進(jìn)行耦合時(shí),需要進(jìn)行一些數(shù)據(jù)格式轉(zhuǎn)換,這在一定程度上影響了計(jì)算速度。1.4 數(shù)值誤差與科學(xué)預(yù)測數(shù)值計(jì)算中存在模型描述誤差、初始誤差、計(jì)算誤差等,這些誤差的存在影響了科學(xué)預(yù)測的準(zhǔn)確性。1初始誤差與蝴蝶效應(yīng) 有句成語叫做“差之毫厘,失之千里”,意思是說,開始時(shí)雖然相差很
45、微小,結(jié)果會造成巨大的錯(cuò)誤。所謂的“蝴蝶效應(yīng)”說明的就是這種現(xiàn)象。蝴蝶效應(yīng)是美國麻省理工學(xué)院氣象學(xué)家洛倫茲(Lorenz)1963年提出的一個(gè)觀點(diǎn),他通過對一個(gè)簡化的大氣動力學(xué)方程進(jìn)行積分,計(jì)算后發(fā)現(xiàn),當(dāng)對初始?xì)庀髨鲎魑⑿〉母淖兒?,則可以得到兩種截然不同的結(jié)果。這種現(xiàn)象被戲稱為南美洲亞馬遜河流域熱帶雨林中的一只蝴蝶,煽動幾下翅膀,就可能在幾周后引起美國得克薩斯的一場龍卷風(fēng)。這種現(xiàn)象也告訴我們,初期計(jì)算誤差對長期積分計(jì)算結(jié)果可能會產(chǎn)生很大的影響。如何消除計(jì)算誤差對計(jì)算結(jié)果的影響是氣象、地震等預(yù)測時(shí)需要面臨的問題。為了減少計(jì)算誤差的影響,目前人們常采用了一種所謂的“集合預(yù)報(bào)”。這種技術(shù)是把多個(gè)數(shù)值
46、模式,或者單個(gè)數(shù)值模式使用不同的初始值進(jìn)行積分,對所得的結(jié)果加以平均,以此做出預(yù)報(bào)。實(shí)踐證明,集合平均預(yù)報(bào)優(yōu)于單一的數(shù)值預(yù)報(bào)。2初始誤差與計(jì)算結(jié)果蝴蝶效應(yīng)是指微小的初始值變化,亦可以理解為,微小的初始誤差,可以導(dǎo)致不同的計(jì)算結(jié)果。實(shí)際中,并不是所有的初始誤差都會導(dǎo)致不同的計(jì)算結(jié)果,相反,在某些數(shù)值計(jì)算中,雖然初始條件不同,卻能得到相同的解。例如,重復(fù)使用同一氣象強(qiáng)迫場對陸面過程模式進(jìn)行積分,即使初始條件不一樣,最后都能得到相同的平衡態(tài)。初始誤差對數(shù)值解影響可用圖1-1所示的實(shí)例來說明。假設(shè)有一個(gè)碗和一個(gè)自上向下掉落的小球,當(dāng)碗口向下時(shí),小球掉到碗底部上,當(dāng)受力不均衡時(shí),它將會滑落到不同的方向;
47、相反,當(dāng)碗口向上時(shí),小球?qū)舻酵胫?,最后落在碗底。前者好比蝴蝶效?yīng),后者好比數(shù)值計(jì)算有唯一確定解。圖1-1 數(shù)值計(jì)算初始誤差影響的示意圖1.5 數(shù)值計(jì)算中值得注意的幾個(gè)問題在數(shù)值計(jì)算中,經(jīng)常會碰到一些計(jì)算式出現(xiàn)“病態(tài)”,例如,一個(gè)較大加上或乘以一個(gè)極小的數(shù);有時(shí)為了使計(jì)算式分母不為0,人為地給定一個(gè)非常小的數(shù);等等。這些對計(jì)算結(jié)果有什么影響,如何解決這些問題?值得我們?nèi)ニ伎肌?避免大數(shù)吃小數(shù)由于計(jì)算機(jī)精度影響,如果有效數(shù)位小于大數(shù)加(減)小數(shù)的數(shù)位,那么就會出現(xiàn)大數(shù)“吃”小數(shù)的現(xiàn)象(徐士良,2002),如。要避免大數(shù)吃小數(shù)問題,就要在運(yùn)算時(shí),合理地安排計(jì)算式的排列順序。2避免先截?cái)嗪筮\(yùn)算在數(shù)
48、值計(jì)算中,如果對一個(gè)變量值進(jìn)行先截?cái)?,然后再進(jìn)行計(jì)算,就會產(chǎn)生誤差,這種截?cái)嗍怯捎谧兞款愋妥儞Q等原因引起的。例如,把一個(gè)雙精度的數(shù)賦值給單精度的變量,然后又再采用雙精度計(jì)算。因此,為了提高計(jì)算結(jié)果的精度,在數(shù)值計(jì)算時(shí)需要選擇合理的變量類型。3避免使用復(fù)雜計(jì)算式在計(jì)算時(shí),有時(shí)為了方便,不對計(jì)算式進(jìn)行化簡而直接計(jì)算,這樣就使計(jì)算復(fù)雜化,既浪費(fèi)了計(jì)算時(shí)間,也影響了計(jì)算速度。因此,在數(shù)值計(jì)算前,需要先對計(jì)算式進(jìn)行化簡,然后計(jì)算,特別是針對大型的數(shù)值模型。4正確處理小分母問題在物理學(xué)中,“小分母問題”是一個(gè)非常重要的科學(xué)問題,它與擾動有關(guān)。18世紀(jì)天文學(xué)家在研究天體運(yùn)動擾動時(shí)就發(fā)現(xiàn)了“小分母問題”。在物理方程中,如果分母等于0,往往會發(fā)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度玉米收購與購銷一體化管理服務(wù)合同
- 2025年度全球知識產(chǎn)權(quán)授權(quán)合同正規(guī)范本(新修訂版)
- 2025年度租賃合同范本:工業(yè)廠房租賃合同
- 2025年度船舶裝修與維護(hù)保養(yǎng)合同規(guī)范
- 2025年度醫(yī)療設(shè)備采購合同付款方式修訂補(bǔ)充協(xié)議
- 二零二四年度企業(yè)員工借款合同信用評估及信用記錄范本3篇
- 二零二五年度戶外廣告牌安全管理與維護(hù)合同2篇
- 二零二四年度人力資源信息系統(tǒng)整合與優(yōu)化顧問合同3篇
- 2025版通信工程環(huán)保評價(jià)與監(jiān)測合同范本3篇
- 2025年度兒童服飾品牌戰(zhàn)略規(guī)劃與實(shí)施合同
- 人教版PEP版小學(xué)英語三年級下冊Unit 4 Healthy food Part A課件
- 2024年陜西省中考道德與法治真題(A卷)(原卷版)
- (2024)湖北省公務(wù)員考試《行測》真題及答案解析
- 中小學(xué)校食品安全與膳食經(jīng)費(fèi)管理工作指引
- 電商平臺客服人員績效考核手冊
- 04S519小型排水構(gòu)筑物(含隔油池)圖集
- YB∕T 4146-2016 高碳鉻軸承鋼無縫鋼管
- 多圖中華民族共同體概論課件第十三講先鋒隊(duì)與中華民族獨(dú)立解放(1919-1949)根據(jù)高等教育出版社教材制作
- 高考英語單詞3500(亂序版)
- 《社區(qū)康復(fù)》課件-第五章 脊髓損傷患者的社區(qū)康復(fù)實(shí)踐
評論
0/150
提交評論