第1章數(shù)值計(jì)算與計(jì)算機(jī)_第1頁
第1章數(shù)值計(jì)算與計(jì)算機(jī)_第2頁
第1章數(shù)值計(jì)算與計(jì)算機(jī)_第3頁
第1章數(shù)值計(jì)算與計(jì)算機(jī)_第4頁
第1章數(shù)值計(jì)算與計(jì)算機(jī)_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第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í),既需要掌握一定的編程技術(shù),

也需要對(duì)計(jì)算機(jī)的特點(diǎn)有所認(rèn)識(shí)。同時(shí),還需要了解計(jì)算機(jī)操作系統(tǒng)以及編程語言的發(fā)

展史。只有這樣,才能知道如何設(shè)計(jì)最先進(jìn)的計(jì)算程序。

匕)計(jì)算機(jī)發(fā)展史與數(shù)值模式

計(jì)算工具是在人類生活的實(shí)際需要中發(fā)展起來的,現(xiàn)代計(jì)算機(jī)的誕生是人類文明的

必然產(chǎn)物,它的誕生使數(shù)值模式的發(fā)展和數(shù)值天氣預(yù)報(bào)成為可能。

1.計(jì)算工具發(fā)展史

計(jì)算工具簡稱算具,是幫助人們計(jì)算的工具,它的發(fā)展是與計(jì)算技術(shù)發(fā)展相聯(lián)系的。

隨著生產(chǎn)的發(fā)展和社會(huì)的進(jìn)步,算具經(jīng)歷了從簡單到復(fù)雜、從低級(jí)到高級(jí)的發(fā)展過程,

其歷史可追溯至遠(yuǎn)古時(shí)期,

人的于指是一種天然為計(jì)算工具,也是最古老的計(jì)算工具之一。遠(yuǎn)古時(shí)期,人們借

助手指計(jì)數(shù)。可是,人類手指只有10個(gè),不能進(jìn)行更復(fù)雜的計(jì)算,于是人們使用G石頭、

貝殼、木棍、草繩等作為運(yùn)算工具。

算籌、算盤是人類最早的手動(dòng)計(jì)算工具。我國春秋時(shí)期出現(xiàn)的算籌,是世界上最古

老的算具,例如,春秋戰(zhàn)國時(shí)期的《老子》中記述了“善數(shù)者不用籌策”。根據(jù)史書的記

載和考古材料,我國古代的算籌實(shí)際上是一根根同樣長短和粗細(xì)的小棍子,多用竹子制

成,也有用木頭、象牙、金屬等材料制成的,因此,在英語中,“算籌”被翻譯成“Counting

rod”(計(jì)數(shù)棒)。古代算籌不僅是正、負(fù)整數(shù)與分?jǐn)?shù)的四則運(yùn)算和開方的運(yùn)算工具,而且

還包含著各種特定的演算,算籌促進(jìn)了中國古代數(shù)學(xué)的早期發(fā)達(dá)與持續(xù)發(fā)展。

在算號(hào)之后,隨著社會(huì)的進(jìn)步,我國勞動(dòng)人民又發(fā)明了算盤作為運(yùn)算工具。早在公

元15世紀(jì),算盤已經(jīng)在我國廣泛使用,后來流傳到日本、朝鮮等國。算盤已經(jīng)基本具備

了現(xiàn)代計(jì)算器的主要結(jié)構(gòu)特征。

在此之后,1642年法國人帕斯卡設(shè)計(jì)出了機(jī)械式加法機(jī),這是世界上第一臺(tái)機(jī)械式

數(shù)字計(jì)算機(jī)。為了制作這臺(tái)機(jī)器,帕斯卡花了3年時(shí)間。這分加法機(jī)是利用齒輪傳動(dòng)原

理,通過手工操作來實(shí)現(xiàn)加、減運(yùn)算的。帕斯卡的加法機(jī)當(dāng)時(shí)在法國引起了轟動(dòng)。

世界上第一臺(tái)能夠自幼運(yùn)算的計(jì)算器,是1822年由英國數(shù)學(xué)家巴貝其發(fā)明的,是以

蒸汽為動(dòng)力代替人類進(jìn)行具體運(yùn)算\1946年發(fā)生了人類歷史上一件劃時(shí)代的大事——世

界上第一臺(tái)電子數(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)算速度較低,存儲(chǔ)容量不大,

而且價(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è)管理、自動(dòng)控制等領(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

義10mm的單個(gè)芯片上,可以集成大約32萬個(gè)晶體管。

第五代計(jì)算機(jī)(約從1981年到現(xiàn)在)把信息采集、存儲(chǔ)、處理、通信和人工智能結(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),算

盤的結(jié)構(gòu)與中國《易經(jīng)》中的河圖相似。計(jì)算機(jī)的二進(jìn)制也是與中國《易經(jīng)》八卦結(jié)構(gòu)

排列相對(duì)應(yīng)的,八卦圖其實(shí)是一種八進(jìn)制圖形。

3.數(shù)值模式與計(jì)算機(jī)

數(shù)值模式是數(shù)值求解基于有限認(rèn)識(shí)的基礎(chǔ)上建立的描述某種物理、化學(xué)等變化規(guī)律

的近似理論模型,它是一種離散化的數(shù)值模型,是數(shù)值模擬和預(yù)報(bào)的一種工具。可以說,

沒有電子計(jì)算機(jī),也就不會(huì)有數(shù)值模式的發(fā)展。

數(shù)值模式有不同的種類,如大氣模式、海洋模式、生物模式等。按尺度劃分,有小

尺度、中尺度和大尺度預(yù)報(bào)模式等;按時(shí)間劃分,有短期、中期和長期預(yù)報(bào)模式等;按

其離散化和求解方法,有網(wǎng)格點(diǎn)模式、譜模式等。

數(shù)值模擬大氣運(yùn)動(dòng)可以幫助進(jìn)行天氣預(yù)報(bào),這種思想可追溯到20世紀(jì)20年代英國

數(shù)學(xué)家Richardson的工作。Richardson(1922)論述了數(shù)值預(yù)報(bào)的原理和可能性,并且應(yīng)用

完全的原始方程組,并對(duì)歐洲地區(qū)的地面氣壓場進(jìn)行了6個(gè)小時(shí)的預(yù)報(bào),但結(jié)果很不理

想。這次失敗曾使人們一度對(duì)數(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ī)上首次成功地對(duì)北美地區(qū)

500百帕高度的氣壓場,做了24小時(shí)的預(yù)報(bào)。這一結(jié)果的公布被認(rèn)為是數(shù)值模式和數(shù)值

預(yù)報(bào)發(fā)展的重要里程碑。而當(dāng)時(shí)所用的計(jì)算工具是一臺(tái)可編程式的電子數(shù)字積分計(jì)算機(jī)。

借助計(jì)算機(jī),從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)能力不斷得到提高。

斤計(jì)算機(jī)軟件與數(shù)值模式比較

數(shù)值模式是一種特殊的計(jì)算機(jī)軟件,它與一般的計(jì)算機(jī)軟件有很多共同之處,但它

們之間又存在一定的差別,

計(jì)算機(jī)軟件和數(shù)值模式的特點(diǎn);一1

計(jì)算機(jī)軟件是指計(jì)算機(jī)系統(tǒng)中的程序及其文檔。計(jì)算機(jī)程序簡稱為程序,是指一組

指示計(jì)算機(jī)每一步動(dòng)作的指令,通常用某種程序設(shè)計(jì)語言編寫,運(yùn)行于某種目標(biāo)體系結(jié)

構(gòu)上。文檔是為了便于了解程序所需的闡明性的技術(shù)資料。程序必須裝入機(jī)器內(nèi)部才能

工作,文檔不一定保存在計(jì)算機(jī)里。

在一定意義上,數(shù)值模式可以稱為一種計(jì)算機(jī)軟件,它與一般軟件程序一樣,具有

以下特性。

1.程序的靜態(tài)與動(dòng)態(tài)屬性

(1)靜態(tài):程序就是用計(jì)算機(jī)語言描述某一問題的解決步驟,其表示是靜態(tài)的。

(2)動(dòng)態(tài):程序代碼通過編譯或解釋成計(jì)算機(jī)指令代碼,稱為可執(zhí)行程序。它的動(dòng)

態(tài)執(zhí)行就是人們常說的“進(jìn)程”。

2.程序是由程序語言抽象的符號(hào)表達(dá)

計(jì)算機(jī)的指令代碼是以二進(jìn)制表示的機(jī)器碼。在高級(jí)設(shè)計(jì)語言以八進(jìn)制、十進(jìn)制、

十六進(jìn)制表示。因?yàn)檎Z言越高級(jí),越好使用,翻譯程序的任務(wù)越重,所以程序設(shè)計(jì)語言

對(duì)軟件開發(fā)起很大作用。

3.程序是對(duì)數(shù)據(jù)施行算法的過程

程序中包括一定的算法和數(shù)據(jù)。程序執(zhí)行后,對(duì)數(shù)據(jù)進(jìn)行了加工或提供了一組動(dòng)作

的計(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è)軟件具有很強(qiáng)的人機(jī)對(duì)話界面

操作,適合于廣大的人群使用,趨向于簡單化操作發(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)槿绱耍行?/p>

數(shù)值模式的計(jì)算結(jié)果雖然看上去似乎“合理”,但實(shí)際上可能存在一些代碼描述錯(cuò)誤。因

此說,數(shù)值模式的發(fā)展比一般商業(yè)軟件的開發(fā)難度更大,耍求更高。

然而,在編寫數(shù)值模式時(shí);也需要像編寫計(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ù)走等)、支撐軟件(高級(jí)語言編譯器、

程序庫、CASE工具等)和應(yīng)用軟件。計(jì)算機(jī)軟件隨著計(jì)算機(jī)硬件的發(fā)展而發(fā)展。

計(jì)算機(jī)軟件發(fā)展的歷史不長,世界上第一臺(tái)電子數(shù)字式計(jì)算機(jī)ENIAC于1946年2

月在美國賓夕法尼亞大學(xué)正式投入運(yùn)行,自那時(shí)起,計(jì)算機(jī)軟件業(yè)才開始萌芽。計(jì)算機(jī)

軟件的發(fā)展具體表現(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ā)展和人們對(duì)于計(jì)算機(jī)技術(shù)要求的提高而逐步發(fā)展形

成的。早期的計(jì)算機(jī)沒有操作系統(tǒng),人們是通過各種操作按鈕來控制計(jì)算機(jī)的。后來出

現(xiàn)了匯編語言,操作人員通過有孔的紙帶將程序輸入電腦進(jìn)行編譯和運(yùn)行。由于程序難

免有誤,機(jī)器通常會(huì)中途崩潰。這給用戶帶來極大的不便,并且不利于設(shè)備和程序的共

用。為了解決這些問題,于是出現(xiàn)了操作系統(tǒng)。

計(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)。

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最初由芬蘭人LinusTorvalds開發(fā),其源程序在

Inlcnicl上公開發(fā)布,由此,全球電腦愛好者可以根據(jù)自己的意愿參與Linux某方面功

能的完善或開發(fā)。因此,Linux將發(fā)展成為一個(gè)全球最穩(wěn)定的、最有應(yīng)用前景的操作系

統(tǒng)之一。

總之,計(jì)算操作系統(tǒng)1勺出現(xiàn)是人們對(duì)計(jì)算機(jī)技術(shù)要求的必然結(jié)果,它的發(fā)展將會(huì)使

計(jì)算速度不斷得到提高,并且使人們更加方便地進(jìn)行數(shù)據(jù)共享、程序代碼和設(shè)備公用。

同時(shí),也將給數(shù)值模式的計(jì)算提供更良好的工作環(huán)境。

(2)編程語言的發(fā)展

早期程序員們是使用機(jī)器語言來進(jìn)行編程運(yùn)算的,并直接對(duì)以數(shù)字表示的機(jī)器代碼

進(jìn)行操作。機(jī)器語言是用由“0”和“1”組成的二進(jìn)制代碼表示的、計(jì)算機(jī)能直接識(shí)別

和執(zhí)行的一種機(jī)器指令的集合。

使用機(jī)器語言是十分痛苦的,特別是在程序有錯(cuò)需要修改時(shí),更是如此。而且,由

于每臺(tái)計(jì)算機(jī)的指令系統(tǒng)往往各不相同,所以,在一臺(tái)計(jì)算機(jī)上執(zhí)行的程序,要想在另

一臺(tái)計(jì)算機(jī)上執(zhí)行,必須重新編寫程序。為「成輕使用機(jī)器語言編程的痛苦和便于閱讀,

人們進(jìn)行了一種有益的改進(jìn),把機(jī)器代碼用英文字符串來表示,于是出現(xiàn)了匯編語言。

從最初與計(jì)算機(jī)交流的痛苦經(jīng)歷中,人們意識(shí)到,應(yīng)該設(shè)計(jì)一種語言,這種語言接

近于數(shù)學(xué)語言或人的自然語言,同時(shí)乂不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器

上通用。經(jīng)過努力,IBM公司的JohnBackus領(lǐng)導(dǎo)的研究小組于1954年首次推出了第一

代Fortran(FormulaTranslator)語言。Fortran語言以它的簡潔、高效性,成為此后幾十

年科學(xué)和工程計(jì)算的主流語言,除了Foriran以外,還有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é)院的ThomasKurtz和JohnKemeny于1964年編制了一種

入門級(jí)的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)化程序設(shè)計(jì)語言,一種是PASCAL語言,另一種是C語言。PASCAL語言,

以17世紀(jì)法國數(shù)學(xué)家兼哲學(xué)家BlaisePascal的名字命名,1970年問世,是由ALGOL60

發(fā)展而來的結(jié)構(gòu)化編程語言,能夠利用組合塊結(jié)構(gòu)及多種數(shù)據(jù)類型。這種語言直觀易懂,

可用于科學(xué)計(jì)算,也可用于編寫系統(tǒng)程序,它是由瑞士蘇黎世工學(xué)院的教授NiklanoWirth

編制的。C語言,最早由貝爾實(shí)驗(yàn)室的DennisRitchie開發(fā),于1972年正式發(fā)表。C語

言具有高級(jí)語言和匯編語言的雙重特色,書寫簡便靈活,有助于縮短程序的長度,提高

工效,便于移植,常用于編寫系統(tǒng)軟件,主要是為專業(yè)程序員設(shè)計(jì)的。

20世紀(jì)80年代,在軟件設(shè)計(jì)思想上,又產(chǎn)生了一次革命,其成果就是面向?qū)ο蟮?/p>

程序設(shè)計(jì)。在眾多的面向?qū)ο笳Z言當(dāng)中,最為突出的就是C++語言。1980年,美國貝爾

實(shí)驗(yàn)室的BjarneStrotstrup博士及其同事開始對(duì)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十十語

言來解決問題將會(huì)比使用其他語言更加容易、更加靈活。在最早的面向?qū)ο笳Z言中,除

了C++以外,還有一種純面向?qū)ο笳Z言也十分流行,如Smalltalk語言等。

20世紀(jì)90年代,計(jì)算機(jī)圖像技術(shù)和網(wǎng)絡(luò)技術(shù)發(fā)展占主導(dǎo)地位,一些相關(guān)的編程語

言被發(fā)展起來。1991年,美國微軟公司推出了VisualBasic(簡稱VB)。Visual意即可視

的、可見的,是指在開發(fā)時(shí)不需要編寫大量代碼去描述界面元素的外觀和位置,只需把

預(yù)先建立好的對(duì)象拖放到屏幕上的相應(yīng)位置。翌年,即1992年,美國微軟公司乂推出了

VisualVC++語言。在這段時(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

Microsystems公司正式向IT業(yè)界推出了Java語言,該語言具有安全、跨平臺(tái)、面向?qū)?/p>

象、簡單、適用于網(wǎng)絡(luò)等顯著特點(diǎn),當(dāng)時(shí)以Web為主要形式的互聯(lián)網(wǎng)正在迅猛發(fā)展,Java

的出現(xiàn)迅速引起所有程序員和軟件公司的極大關(guān)注,目前Java已成為動(dòng)態(tài)網(wǎng)頁和網(wǎng)絡(luò)數(shù)

據(jù)庫訪問程序的主要編寫工具。

2000年后,編程語言繼續(xù)發(fā)展,又涌現(xiàn)出很多的新語言,如VB.NET、C#、J#等。

這些語言集合了許多其他語言的優(yōu)點(diǎn),并增加了新的功能。例如,2000年隨Framework

一起發(fā)布的MicrosoftC#集合了C以及C++,甚至Java的許多優(yōu)點(diǎn);與C++相比較,C#

語言中的class類安全性更強(qiáng)。

總之,編程語言的發(fā)展經(jīng)歷了從機(jī)器語言、匯編語言到高級(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)移語句,

將會(huì)導(dǎo)致程序流程無序可尋,程序結(jié)構(gòu)雜亂無章,使人難以理解和閱讀,并且容易出錯(cuò)。

為此,人們提出了結(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ū)?/p>

象程序設(shè)計(jì)(ObjectOrientedProgramming,OOP)方法,O十語言的出現(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的成員有不同的保護(hù)級(jí)別(如

private,protected,public)o封裝是人們對(duì)現(xiàn)實(shí)世界中解決問題時(shí),為了簡化問題,對(duì)研

究的對(duì)象所采用的一種信息屏蔽技術(shù)。封裝后,使用者只需要知道輸入和輸出的幾個(gè)有

限變量,而不需要知道其內(nèi)部的實(shí)現(xiàn)過程。繼承是指一個(gè)對(duì)象直接使用另一對(duì)象的屬性

和方法,通過繼承,程序開發(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ā)提供了極大的方便,然而,

隨著編程語言和不同應(yīng)用程序數(shù)量的增大,并且不同軟件商需要進(jìn)行一些技術(shù)保護(hù),在

這種形勢(shì)下,需要發(fā)展一種封裝性好,并且具有連接這些軟件功能的單獨(dú)程序,于是,

在20世紀(jì)末,在傳統(tǒng)面向?qū)ο蠹夹g(shù)的基礎(chǔ)上,人們乂發(fā)展了組件模型技術(shù)。

目前主要流行兩種組件模型:COM(以及建立在COM基礎(chǔ)之上的DCOM)組件模

型、CORBA組件模型。

①COM(theComponentObjectModel)是一種平臺(tái)獨(dú)立的、分布式、面向?qū)ο蟮南?/p>

統(tǒng),用于創(chuàng)建可互操作的二進(jìn)制軟件組件。COM是微軟的“對(duì)象鏈接和嵌入”(簡稱OLE),

ActiveX(可用于Internet的組件),以及許多其他技術(shù)的基礎(chǔ)。DCOM(theDistributed

ComponentObjectModel)擴(kuò)展COM,以支持不同計(jì)算機(jī)之間、互聯(lián)網(wǎng)間的對(duì)象間通信。

②CORBA(theCommonObjectRequestBrokerArchitecture)是OMG(theObject

ManagementGroup)制定的、開放的、獨(dú)立于開發(fā)商的體系結(jié)構(gòu)和基礎(chǔ)構(gòu)造,通過

CORBA,計(jì)算機(jī)應(yīng)用程序可以通過網(wǎng)絡(luò)協(xié)同運(yùn)作。CORBA組件能運(yùn)行于任何一種平臺(tái)

之上,特別是在UNIX平臺(tái)上,它已經(jīng)成為編寫分布式應(yīng)用程序以及中間件的標(biāo)準(zhǔn)組件

模型。CORBA從一開始就是為了成為一種跨平臺(tái)的分布式組件標(biāo)準(zhǔn),經(jīng)過多年的發(fā)展,

已經(jīng)成為一種成熟、完備的組件模型。

總之,軟件程序結(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ì)還處于初級(jí)階段,

如同人類產(chǎn)生之前的單細(xì)抱生物的進(jìn)化階段。未來的軟件將會(huì)出現(xiàn)高度智能化,可以自

復(fù)制、繁殖、信息儲(chǔ)存等,未來計(jì)算機(jī)軟件結(jié)構(gòu)演變將會(huì)像生命進(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ì)算。處理器由單核向多核的轉(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í)大粒度并行,又要考慮單處理機(jī)上向量

級(jí)細(xì)粒度并行的算法在20世紀(jì)80年代初期和中期比較流行?;赟IMD并行計(jì)算機(jī)設(shè)

計(jì)的并行算法在20世紀(jì)80年代中期較熱門,但因缺乏通用性,過分依賴機(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年笫臺(tái)并行計(jì)算機(jī)EDVAC問世以來,并行軟

件技術(shù)幾十年來沒有獲得突破性的進(jìn)展,特別是分布式計(jì)算技術(shù),自動(dòng)并行識(shí)別技術(shù)等。

要想改變這種局面,并行算法需要走商業(yè)道路,正如美國加州大學(xué)伯克利分校計(jì)算機(jī)科

學(xué)教授Cullei■等(Cuner,elaL,1998)所說:“盡管并行計(jì)算的學(xué)術(shù)歷史在時(shí)間上不算短,

在內(nèi)容上也很豐富,但從根本上改變這一學(xué)科現(xiàn)狀的是和商用技術(shù)的緊密結(jié)合?!?/p>

雖然并行算法還沒有發(fā)展成熟,但前途一片光明,隨著計(jì)算機(jī)技術(shù)的發(fā)展,未來并

行算法軟件的開發(fā)將會(huì)給商家?guī)頍o限的機(jī)遇。

2.數(shù)值模式的發(fā)展

數(shù)值模式的發(fā)展主要體現(xiàn)在模式種類和模式結(jié)構(gòu)兩個(gè)方面。模式種類的發(fā)展主要與

社會(huì)發(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)生的天氣圖作為參考基礎(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)心大氣中

二氧化碳的積累的、長期的、可能的影響,以及研究人類活動(dòng)對(duì)全球變化的影響。

與此同時(shí),海洋模式工作者開始建立海洋環(huán)流模式(OGCMs)并進(jìn)行類似的計(jì)算機(jī)

模擬工作。因?yàn)楹Q笫菤夂蛳到y(tǒng)的主要組成部分,氣候模式工作者開始把OGCMs與

GCMs進(jìn)行耦合,以便進(jìn)行全球大氣研究。

20世紀(jì)80年代,國際政府部門協(xié)商如何對(duì)■待氣候變化問題。全球氣候?qū)W家團(tuán)體,

政府間氣候變化專門委員會(huì)(IPCC)成立以便為這些協(xié)商提供建議。1992年,世界多數(shù)

國家共同簽署了聯(lián)合國氣候變化綱要公約(FCCC)o全球變化問題使數(shù)值模式的發(fā)展越

來越受到重視,這是因?yàn)閿?shù)值模式是全球變化研究的最有效的工具之一。目前世界上已

發(fā)展了多種數(shù)值模式,并且世界各國共同實(shí)施了一系列國際模式比較計(jì)劃(AMIP、

PILPS、CMIP等)。

(2)數(shù)值模式結(jié)構(gòu)變化

與計(jì)算機(jī)硬件、軟件一樣,數(shù)值模式發(fā)展也是經(jīng)歷了從簡單到復(fù)雜,山低級(jí)到高級(jí)

的發(fā)展階段。數(shù)值模式結(jié)構(gòu)變化與計(jì)算機(jī)發(fā)展相聯(lián)系,這決定了在模式程序中需要考慮

物理過程的復(fù)雜程度。

20世紀(jì)90年代以前,由于計(jì)算機(jī)技術(shù)的限制,加之?dāng)?shù)值模式本身的發(fā)展還不完善,

數(shù)值模式結(jié)構(gòu)非常簡單,如一維模式,二層模式等。為了克服計(jì)算機(jī)計(jì)算速度的不足,

人們還設(shè)計(jì)出了距平模式、譜模式等。

早期的模式既簡單又單?,很多模式計(jì)算方案都是針對(duì)某些物理化學(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ì),分辨率越來越高,模式積分的時(shí)間越來越長。

從前面講到的軟件結(jié)構(gòu)發(fā)展史可以看?到,其發(fā)展經(jīng)歷了無序化、結(jié)構(gòu)化、面向?qū)ο?/p>

程序設(shè)計(jì)和組件模型等發(fā)展過程。同樣,數(shù)值模式結(jié)構(gòu)的發(fā)展經(jīng)歷了類似的發(fā)展過程。

這種發(fā)展過程如同其他任何事物的發(fā)展過程一樣,即從分工到協(xié)作的發(fā)展。

13)程序設(shè)計(jì)對(duì)計(jì)算的影響

計(jì)算機(jī)對(duì)計(jì)算的影響包括計(jì)算速度和計(jì)算誤差。這兩個(gè)方面的影響又分別來自計(jì)算

機(jī)硬件和軟件。計(jì)算誤差產(chǎn)生的原因很多,如把方程式離散化后產(chǎn)生的截?cái)嗾`差、舍入

誤差(把??闯?.14159)、人為過失誤差等。同樣,影響計(jì)算速度的因素也有很多,如

計(jì)算機(jī)硬件性能、計(jì)算方法、程序結(jié)構(gòu)等。

雖然計(jì)算機(jī)硬件對(duì)計(jì)算速度和精度的影響是客觀事實(shí),然而可以從軟件方面彌補(bǔ)這

種不足。這里重點(diǎn)分析計(jì)算機(jī)程序?qū)τ?jì)算速度和精度的影響。

電7131計(jì)算方法對(duì)計(jì)算精度的影響

對(duì)于這類誤差,人們研究的很多。它產(chǎn)生于計(jì)算者所采取的計(jì)算方法,不同的計(jì)算

方法可能產(chǎn)生不同的誤差,對(duì)于數(shù)值模式來說,網(wǎng)格分布特性和迭代方法等都會(huì)帶來一

定的計(jì)算誤差。因此,在程序設(shè)計(jì)前,需要選擇合適的計(jì)算方法。

網(wǎng)格分布特性對(duì)數(shù)值計(jì)算誤差有一定的影響。這類誤差來源于網(wǎng)格空間距離的大小、

積分計(jì)第的時(shí)間步長、網(wǎng)格單元兒何形狀、物理方程的差分格式等。網(wǎng)格單元的幾何形

狀,可分為三角形、四邊形等。差分格式可分為顯式、隱式和半隱式等。

在數(shù)值計(jì)算時(shí),不完全迭代總會(huì)產(chǎn)生一種所謂的不完全迭代誤差。它是由數(shù)值計(jì)算

所得出的當(dāng)前解與在同一套網(wǎng)格上離散方程的精確解之間的偏差,亦即迭代終止時(shí)離散

方程的當(dāng)前與精確解的偏差。

在實(shí)際計(jì)算時(shí),多數(shù)情況下,由于離散方程采用迭代方法求解時(shí),不可能達(dá)到絕對(duì)

收斂,必須給定某些限制條件使迭代過程停止。這種條件很多,如規(guī)定相鄰兩次迭代的

解的相對(duì)偏差小于允許值;規(guī)定離散方程的余量小于一定值;給定迭代次數(shù)等。因而,

如果迭代結(jié)果偏差不為0,就會(huì)產(chǎn)生截?cái)嗾`差。

?1.3.2程序設(shè)計(jì)對(duì)計(jì)算精度的影響

即使采用同樣的計(jì)算方法,若計(jì)算程序結(jié)構(gòu)不同,也會(huì)產(chǎn)生一定的計(jì)算誤差。由于

計(jì)算機(jī)只能對(duì)有限位數(shù)進(jìn)行運(yùn)算,一般數(shù)必須要進(jìn)行舍入,這就產(chǎn)生了計(jì)算誤差或舍入

誤差。

1.程序變量類型設(shè)置對(duì)計(jì)算結(jié)果的影響

在編寫程序時(shí),每個(gè)變量都有一種類型,如字符型、整型、實(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é)占8bits。

在C語言中,每個(gè)變量都需要給出數(shù)據(jù)類型說明。在有些編程語言,如Fortran中,

可以采用變量的隱含說明,即不需要進(jìn)行變量的類型說明。

當(dāng)變量的類型給定后,變量所能容納的最大數(shù)值也就確定了。例如,表示兩個(gè)字節(jié)

整型變量所能容納的最大數(shù)是65535(OxFFFF)o如果超過這個(gè)數(shù),計(jì)算結(jié)果就會(huì)出錯(cuò)。

在Foriran程序中,若變量類型本應(yīng)使用雙精度卻采用單精度的,則會(huì)出現(xiàn)計(jì)算結(jié)果

錯(cuò)誤。例如,使用程序1-1計(jì)算階乘,如果變量使用單精度類型,當(dāng)輸入數(shù)小于14時(shí),

計(jì)算結(jié)果是正確的,否則,不正確,因?yàn)槌^了變量類型的容量。

程序1-1

programtestprecision

callfactorial(13)

callfactorial(14)

callfactorial(15)

contains

subroutinefactorial(n)

realsum

sum=l

doi=l,n

sum=sum*i

enddo

print*,n,'!',sum

endsubroutine

endprogram

運(yùn)行以上程序,將得到表1-1所示的單精度值。與雙精度計(jì)算結(jié)果比較,可以看出,

當(dāng)〃>13時(shí),單精度的計(jì)算結(jié)果不正確。

表1-1不同精度下階乘計(jì)算結(jié)果比較

階乘單精度(32-bit)雙精度(64-bit)

13!

14!

15!0000

2.程序結(jié)構(gòu)對(duì)計(jì)算結(jié)果的影響

程序結(jié)構(gòu)的設(shè)計(jì)方法也對(duì)計(jì)算結(jié)果有影響。在計(jì)算機(jī)精度一定的條件下,不同的程

序設(shè)計(jì)方法也會(huì)使計(jì)算產(chǎn)生一定的誤差。例如,對(duì)于等式:

II1_.1/…、

-------十-----------1-…+=1-(I-1)

1X22X3nX(n+1)-----〃+1

當(dāng)〃為一個(gè)大的整數(shù)時(shí),使用左、右代數(shù)式計(jì)算,所得到的結(jié)果會(huì)有一定的差異。

可見,計(jì)算步驟越多、過程越復(fù)雜,產(chǎn)生計(jì)算誤差的可能性越大,計(jì)算速度越慢。

?1.3.3程序設(shè)計(jì)對(duì)計(jì)算速度的影響

程序設(shè)計(jì)不僅對(duì)計(jì)算精度有影響,而且對(duì)速度也有影響。同樣,這種影響可能來自

程序員所采用的計(jì)算方法、程序結(jié)構(gòu),以及程序編譯器或系統(tǒng)軟件等。

1.程序結(jié)構(gòu)的影響

程序結(jié)構(gòu)對(duì)計(jì)算速度的影響是顯而易見的,如對(duì)式(1-1)左邊與右邊進(jìn)行計(jì)算。再

如,把代數(shù)式:V+3『+3x+l變換成(Al",對(duì)于前者,計(jì)算機(jī)CPU要進(jìn)行9次操作;對(duì)

于后者,只需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-2

a=10

b=20

dok=l,100

x=a+b

y=x*x

enddo

再如,在程序中,對(duì)相同的表達(dá)式或函數(shù)進(jìn)行重復(fù)計(jì)算,見程序1-3,其中x是一

個(gè)變量,f(x)表示為一個(gè)函數(shù)。

程序1?3

x=10

y=f(x)*f(x)

可以看出,以上程序?qū)瘮?shù)f(x)進(jìn)行了重復(fù)計(jì)算。因?yàn)閷?duì)于一定的X值,f(x)的值是

確定的,因此,對(duì)f(x)函數(shù)只需計(jì)算一次,其計(jì)算結(jié)果可使用一個(gè)臨時(shí)變量來保存,如

yl=f(x),y=yl*yl?

2.計(jì)算環(huán)境的影響

系統(tǒng)軟件對(duì)程序計(jì)算速度的影響也是很好理解的。一般來說,用低級(jí)語言編寫出的

程序比用高級(jí)語言編寫的速度快,程序員白日編寫的程序比借用其他現(xiàn)成模塊的速度快。

這是因?yàn)榈图?jí)語言與計(jì)算機(jī)機(jī)器語言比較接近,不需要過多地轉(zhuǎn)換翻譯過程,因此計(jì)算

速度較快。對(duì)于第二次開發(fā)程序或解釋程序,在計(jì)算時(shí),需要經(jīng)歷一些轉(zhuǎn)換過程,因而

計(jì)算速度相對(duì)較慢。

從前面介紹的計(jì)算機(jī)技術(shù)發(fā)展可以看到,當(dāng)今的計(jì)算機(jī)軟件技術(shù)就像給衣服上打“補(bǔ)

丁”一樣。一種軟件可拆分為各個(gè)部件,每個(gè)部件可以由不同的開發(fā)商來完成。然而,

使用這些“產(chǎn)品”需要滿足一定的規(guī)則和標(biāo)準(zhǔn),因而影響計(jì)算速度。

對(duì)于數(shù)值程序模塊之間的耦合,在某種程度上,與商業(yè)軟件借用其他現(xiàn)成模塊的操

作類似。目前,各種單一模式之間沒有統(tǒng)一標(biāo)準(zhǔn),在對(duì)它們進(jìn)行耦合時(shí),需要進(jìn)行一些

數(shù)據(jù)格式轉(zhuǎn)換,這在一定程度上影響了計(jì)算速度。

數(shù)值誤差與科學(xué)預(yù)測

數(shù)值計(jì)算中存在模型描述誤差、初始誤差、計(jì)算誤差等,這些誤差的存在影響了科

學(xué)預(yù)測的準(zhǔn)確性。

1.初始誤差與蝴蝶效應(yīng)

有句成語叫做“差之毫厘,失之千里”,意思是說,開始時(shí)雖然相差很微小,結(jié)果會(huì)

造成巨大的錯(cuò)誤。所謂的“蝴蝶效應(yīng)”說明的就是這種現(xiàn)象。

蝴蝶效應(yīng)是美國麻省理工學(xué)院氣象學(xué)家洛倫茲(Lorenz)1963年提出的一個(gè)觀點(diǎn),

他通過對(duì)一個(gè)簡化的大氣動(dòng)力學(xué)方程進(jìn)行積分,計(jì)算后發(fā)現(xiàn),當(dāng)對(duì)初始?xì)庀髨鲎魑⑿〉?/p>

改變后,則可以得到兩種截然不同的結(jié)果。這種現(xiàn)象被戲稱為南美洲亞馬遜河流域熱帶

雨林中的一只蝴蝶,煽動(dòng)兒下翅膀,就可能在幾周后引起美國得克薩斯的?場龍卷風(fēng)。

這種現(xiàn)象也告訴我們,初期計(jì)算誤差對(duì)長期積分計(jì)算結(jié)果可能會(huì)產(chǎn)生很大的影響。

如何消除計(jì)算誤差對(duì)計(jì)算結(jié)果的影響是氣象、地震等預(yù)測時(shí)需要面臨的問題。

為了減少計(jì)算誤差的影響,目前人們常采用了一種所謂的“集合預(yù)報(bào)”。這種技術(shù)是

把多個(gè)數(shù)值模式,或者單個(gè)數(shù)值模式使用不同的初始值進(jìn)行積分,對(duì)所得的結(jié)果加以平

均,以此做出預(yù)報(bào)。實(shí)踐證明,集合平均預(yù)報(bào)優(yōu)于單一的數(shù)值預(yù)報(bào)。

2.初始誤差與計(jì)算結(jié)果

蝴蝶效應(yīng)是指微小的初始值變化,亦可以理解為,微小的初始誤差,可以導(dǎo)致不同

的計(jì)算結(jié)果。實(shí)際中,并不是所有的初始誤差都會(huì)導(dǎo)致不同的計(jì)算結(jié)果,相反,在某些

數(shù)值計(jì)算中,雖然初始條件不同,卻能得到相同的解。例如,重復(fù)使用同一氣象強(qiáng)迫場

對(duì)陸面過程模式進(jìn)行積分,即使初始條件不一樣,最后都能得到相同的平衡態(tài)。

初始誤差對(duì)數(shù)值解影響可用圖1-1所示的實(shí)例來說明。假設(shè)有一個(gè)碗和一個(gè)自上向

下掉落的小球,當(dāng)碗口向下時(shí)?,小球掉到碗底部上,當(dāng)受力不均衡時(shí),它將會(huì)滑落到不

同的方向;相反,當(dāng)碗口向上時(shí),小球?qū)?huì)掉到碗中,最后落在碗底。前者好比蝴蝶效

應(yīng),后者好比數(shù)值計(jì)算有唯一確定解。

圖1-1數(shù)值計(jì)算初始誤差影響的示意圖

數(shù)值計(jì)算中值得注意的幾個(gè)問題

在數(shù)值計(jì)算中,經(jīng)常會(huì)碰到一些計(jì)算式出現(xiàn)“病態(tài)”,例如,一個(gè)較大加上或乘以一

個(gè)極小的數(shù);有時(shí)為了使計(jì)算式分母不為0,人為地給定一個(gè)非常小的數(shù);等等。這些

對(duì)計(jì)算結(jié)果有什么影響,如何解決這些問題?值得我們?nèi)ニ伎肌?/p>

1.避免大數(shù)吃小數(shù)

由于計(jì)算機(jī)精度影響,如果有效數(shù)位小于大數(shù)加(減)小數(shù)的數(shù)位,那么就會(huì)出現(xiàn)

大數(shù)“吃”小數(shù)的現(xiàn)象(徐士良,2002),如2.1X108+3.4X10-8=2.1X108。

要避免大數(shù)吃小數(shù)問題,就要在運(yùn)算時(shí),合理地安排計(jì)算式的排列順序。

2.避免先截?cái)嗪筮\(yùn)算

在數(shù)值計(jì)算中,如果對(duì)一個(gè)變量值進(jìn)行先截?cái)?,然后再進(jìn)行計(jì)算,就會(huì)產(chǎn)生誤差,

這種截?cái)嗍怯捎谧兞款愋妥儞Q等原因引起的。例如,把一個(gè)雙精度的數(shù)賦值給單精度的

變量,然后又再采用雙精度計(jì)算。

因此,為了提高計(jì)算結(jié)果的精度,在數(shù)值計(jì)算時(shí)需要選擇合理的變量類型。

3.避免使用復(fù)雜計(jì)算式

在計(jì)算時(shí),有時(shí)為了方便,不對(duì)計(jì)算式進(jìn)行化簡而直接計(jì)算,這樣就使計(jì)算復(fù)雜化,

既浪費(fèi)了計(jì)算時(shí)間,也影響了計(jì)算速度。因此,在數(shù)值計(jì)算前,需要先對(duì)計(jì)算式進(jìn)行化

簡,然后計(jì)算,特別是針對(duì)大型的數(shù)值模型。

4.正確處理小分母問題

在物理學(xué)中,“小分母問題”是一個(gè)非常重要的科學(xué)問題,它與擾動(dòng)有關(guān)。18世紀(jì)

天文學(xué)家在研究天體運(yùn)動(dòng)擾動(dòng)時(shí)就發(fā)現(xiàn)了“小分母問題”。

在物理方程中,如果分母等于0,往往會(huì)發(fā)生奇異現(xiàn)象。例如,龐加萊研究表明,

在動(dòng)力學(xué)中,共振方程解中帶來具有分母1/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論