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

下載本文檔

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

文檔簡介

第1章數(shù)值計算與計算機

現(xiàn)代科學計算離不開計算機,計算機科學技術(shù)的發(fā)展為數(shù)值計算技術(shù)的發(fā)展提供了

基礎(chǔ)。計算機的計算是通過計算機軟件或程序來實現(xiàn)的,具硬件和軟件的工作狀況影響

計算精度和速度。在計算機硬件、操作系統(tǒng)和計算方法一定的情況下,合理地設(shè)計計算

程序是提高計算精度和速友的主要途徑。

要編寫出一種高效率的計算程序,需要具備很多知識,既需要掌握一定的編程技術(shù),

也需要對計算機的特點有所認識。同時,還需要了解計算機操作系統(tǒng)以及編程語言的發(fā)

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

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

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

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

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

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

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

其歷史可追溯至遠古時期,

人的于指是一種天然為計算工具,也是最古老的計算工具之一。遠古時期,人們借

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

貝殼、木棍、草繩等作為運算工具。

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

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

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

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

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

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

在算號之后,隨著社會的進步,我國勞動人民又發(fā)明了算盤作為運算工具。早在公

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

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

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

數(shù)字計算機。為了制作這臺機器,帕斯卡花了3年時間。這分加法機是利用齒輪傳動原

理,通過手工操作來實現(xiàn)加、減運算的。帕斯卡的加法機當時在法國引起了轟動。

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

蒸汽為動力代替人類進行具體運算\1946年發(fā)生了人類歷史上一件劃時代的大事——世

界上第一臺電子數(shù)字計算機ENIAC在美國誕生。

2.計算機發(fā)展歷程

電子計算機在短短的幾十年里經(jīng)過了電子管、晶體管、集成電路(IC)和超大規(guī)模

集成電路(VLSI)等階段的發(fā)展,使計算機的體積越來越小、功能越來越強、價格越來

越低、應用越來越廣泛,目前正朝著智能化計算機方向發(fā)展。

第一代計算機(約從1946年到1958年),體積較大,運算速度較低,存儲容量不大,

而且價格昂貴,使用也不方便。為了解決一個問題,所編制的程序的復雜程度難以表述。

這一代計算機主要用于科學計算,只在重要部門或科學研究部門使用。

第二代計算機(約從1958年到1965年),全部采用晶體管作為電子器件,與第一代

計算機相比,其運算速度提高了近百倍,而體積只有原來的幾十分之一。在軟件方面,

開始使用計算機算法語言,這一代計算機不僅用于科學計算,還用于數(shù)據(jù)和事務(wù)處理以

及進行工業(yè)控制。

第三代計算機(約從1965年到1970年),主要特征是以中、小規(guī)模集成電路為電子

器件,并且出現(xiàn)操作系統(tǒng),使計算機的功能越來越強,應用范圍越來越廣。它們不僅用

于科學計算,還用于文字處理、企業(yè)管理、自動控制等領(lǐng)域,出現(xiàn)了計算機技術(shù)與通信

技術(shù)相結(jié)合的信息管理系統(tǒng),可用于生產(chǎn)管理、交通管理、情報檢索等領(lǐng)域。

第四代計算機(約從1970年到1981年)采用大規(guī)模集成電路(LSI)和超大規(guī)模集

成電路(VLSI)為主要電子器件制成的計算機。例如,80386微處理器,在面積約為10mm

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

第五代計算機(約從1981年到現(xiàn)在)把信息采集、存儲、處理、通信和人工智能結(jié)

合一起具有形式推理、聯(lián)想、學習和解釋能力。它的系統(tǒng)結(jié)構(gòu)將突破傳統(tǒng)的馮?諾依曼

機器的概念,能夠?qū)崿F(xiàn)高陵的并行處理。

有趣的是,算盤和計算機的發(fā)明都與中國古代的《易經(jīng)》相關(guān)。有人研究發(fā)現(xiàn),算

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

排列相對應的,八卦圖其實是一種八進制圖形。

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

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

的近似理論模型,它是一種離散化的數(shù)值模型,是數(shù)值模擬和預報的一種工具??梢哉f,

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

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

尺度、中尺度和大尺度預報模式等;按時間劃分,有短期、中期和長期預報模式等;按

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

數(shù)值模擬大氣運動可以幫助進行天氣預報,這種思想可追溯到20世紀20年代英國

數(shù)學家Richardson的工作。Richardson(1922)論述了數(shù)值預報的原理和可能性,并且應用

完全的原始方程組,并對歐洲地區(qū)的地面氣壓場進行了6個小時的預報,但結(jié)果很不理

想。這次失敗曾使人們一度對數(shù)值天氣預報的可能性產(chǎn)生懷疑。直到第二次世界大戰(zhàn)結(jié)

束之后,由于電子計算機的出現(xiàn),加上氣象觀測網(wǎng)以及高空觀測的發(fā)展,數(shù)值模式和天

氣預報又引起了人們的注意。

1950年,Charney等人用準地轉(zhuǎn)正壓模式,在電子計算機上首次成功地對北美地區(qū)

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

預報發(fā)展的重要里程碑。而當時所用的計算工具是一臺可編程式的電子數(shù)字積分計算機。

借助計算機,從Charney等的成功工作開始,數(shù)值模式和數(shù)值預報步入了繁榮發(fā)展

的時期。數(shù)值模式的發(fā)展與計算機的發(fā)展緊密相聯(lián),計算機由傳統(tǒng)的單核CPU的處理器

發(fā)展為多核CPU的處理器,而數(shù)值模式也由單CPU的串行計算,發(fā)展到多CPU的并行

計算,這大大提高了模式的計算速度。隨著計算機發(fā)展,數(shù)值模式的計算方式、程序結(jié)

構(gòu)也將不斷得到改進,這將使數(shù)值模式的模擬能力和預報能力不斷得到提高。

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

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

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

計算機軟件和數(shù)值模式的特點;一1

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

指示計算機每一步動作的指令,通常用某種程序設(shè)計語言編寫,運行于某種目標體系結(jié)

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

工作,文檔不一定保存在計算機里。

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

以下特性。

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

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

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

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

2.程序是由程序語言抽象的符號表達

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

十六進制表示。因為語言越高級,越好使用,翻譯程序的任務(wù)越重,所以程序設(shè)計語言

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

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

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

的計算辦法,即算法。它使數(shù)據(jù)由初始態(tài)變?yōu)榻K止態(tài),并且,同樣的數(shù)據(jù)改變可使用不

同的算法實現(xiàn)。

程序的數(shù)據(jù)一般用于刻畫事物的屬性和狀態(tài)。合理設(shè)計數(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),雖然可以實現(xiàn)同樣的程

序功能,但將增加計算程序代碼長度。

數(shù)值模式與一般的商業(yè)軟件有一定的不同。一般商業(yè)軟件具有很強的人機對話界面

操作,適合于廣大的人群使用,趨向于簡單化操作發(fā)展;而數(shù)值模式的重點在于計算,

其模式本身不僅具有一般軟件的設(shè)計結(jié)構(gòu),而且具有物理、化學等規(guī)律的描述以及一定

的計算方法,只適合專業(yè)技術(shù)人員來操作。

數(shù)值模式與一般的商業(yè)軟件最大的不同在于,數(shù)值模式運行結(jié)果的正確性有一定的

不可知性,而一般的商業(yè)軟件運行結(jié)果的正確性可以立即得到證實。數(shù)值模式計算結(jié)果

的正確與否只有在事件發(fā)生后才能確定,有時實測資料也無法獲得,正因為如此,有些

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

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

然而,在編寫數(shù)值模式時;也需要像編寫計算機軟件一樣,只有掌握一定的規(guī)則、

技巧,才能提高程序的性能和便于以后的維護。

?1.2.2計算機軟件與數(shù)值模式的發(fā)展

計算機軟件的發(fā)展可以看作數(shù)值模式發(fā)展的晴雨表。了解了軟件的發(fā)展,在一定的

程度上有助于發(fā)展數(shù)值模式。數(shù)值模式與商業(yè)軟件的發(fā)展具有一定的相似性。

1.計算機軟件發(fā)展

計算機軟件可以分為系統(tǒng)軟件(操作系統(tǒng)、數(shù)據(jù)走等)、支撐軟件(高級語言編譯器、

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

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

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

軟件的發(fā)展具體表現(xiàn)在計算機系統(tǒng)、編程語言、程序結(jié)構(gòu)和計算方式等方面的發(fā)展,它

們之間乂是相互聯(lián)系的。

(1)計算機操作系統(tǒng)的發(fā)展

首先,所謂的操作系統(tǒng)是指計算機系統(tǒng)中的一個系統(tǒng)軟件,它是管理和控制計算機

系統(tǒng)中的硬件和軟件資源、合理地組織計算機工作流程以及方便用戶使用的程序集合。

操作系統(tǒng)是隨著計算機硬件的發(fā)展和人們對于計算機技術(shù)要求的提高而逐步發(fā)展形

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

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

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

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

計算機操作系統(tǒng)的發(fā)展經(jīng)歷了兩個階段。第一個階段為單用戶、單任務(wù)的操作系統(tǒng),

繼CP/M操作系統(tǒng)之后,還出現(xiàn)了C-DOS、M-DOS、TRS-DOS、S-DOS和MS-DOS等

磁盤操作系統(tǒng)。第二個階段為多用戶多道作業(yè)和分時系統(tǒng)。其典型代表有UNIX、Xenix.

OS/2以及Windows操作系統(tǒng)。分時的多用戶、多任務(wù)、樹形結(jié)構(gòu)的文件系統(tǒng)以及重定

向和管道是UNIX的三大特點。

其中,UNIX系統(tǒng)是1969年問世的,最初是在中小型計算機上運用。最早移植到80286

微機上的UNIX系統(tǒng),稱為Xenix。Xenix系統(tǒng)的特點是短小精悍,系統(tǒng)開銷小,運行速

度快。經(jīng)過多年的發(fā)展,Xenix已成為十分成熟的系統(tǒng)。

MS-DOS是在IBM-PC及其兼容機上運行的操作系統(tǒng),它起源于SCP86-DOS,是

1980年基于8086微處理器而設(shè)計的單用戶操作系統(tǒng)。后來,微軟公司獲得了該操作系

統(tǒng)的專利權(quán),配備在IBM-PC上,并命名為PC-DOS。

Windows是微軟公司在1985年11月發(fā)布的第一代窗口式多任務(wù)系統(tǒng),它使PC開

始進入了所謂的圖形用戶界面時代。

Linux是目前全球最天的一個自由軟件,它是一個可與UNIX和Windows相媲美的

操作系統(tǒng),具有完備的網(wǎng)絡(luò)功能。Linux最初由芬蘭人LinusTorvalds開發(fā),其源程序在

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

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

統(tǒng)之一。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

年科學和工程計算的主流語言,除了Foriran以外,還有ALGOL60等科學和工程計算語

言。隨著計算機應用的深入,產(chǎn)生了使用計算機來進行商業(yè)管理的需求,于是COBOL

這類商業(yè)和行政管理語言出現(xiàn)了,并一直流行至今。

早期的這些編程語言都是面向計算機專業(yè)人員的,為了普及編程語言,使計算機更

為大眾化,美國的達爾摩斯學院的ThomasKurtz和JohnKemeny于1964年編制了一種

入門級的Basic語言,這種語言簡單易學、功能較全,比較適合初學者,廣泛用于中小

型、微型計算機中。

20世紀60年代初,結(jié)構(gòu)化程序設(shè)計的思想就已產(chǎn)生,1960年第一種結(jié)構(gòu)化程序設(shè)

計語言ALGOL被推出。在這種思想的指導下,20世紀70年代初,人們又推出了兩種

典型的結(jié)構(gòu)化程序設(shè)計語言,一種是PASCAL語言,另一種是C語言。PASCAL語言,

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

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

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

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

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

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

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

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

實驗室的BjarneStrotstrup博士及其同事開始對C語言進行改進和擴充,最初被稱為“帶

類的C”,1983年才取名為C++。這種語言繼承了C語言的所有優(yōu)點,如簡潔性和高效

性,同時引入了面向?qū)ο蟮乃枷耄珙?、封裝、繼承、多態(tài)等。像任何人類的自然語言

樣,C十十語言提供種表達思想和概念的方法,當問題變得大而復雜時,使用C十十語

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

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

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

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

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

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

VisualVC++語言。在這段時期,出現(xiàn)的另一種編程語言是Java,它誕生于1991年,最

初被稱為OAK語言,是SUN公司為一些消費性電子產(chǎn)品而設(shè)計的一個通用環(huán)境。在網(wǎng)

絡(luò)出現(xiàn)之前,OAK可以說是默默無聞,直到網(wǎng)絡(luò)的出現(xiàn),才被重視。1995年,美國Sun

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

象、簡單、適用于網(wǎng)絡(luò)等顯著特點,當時以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)點,并增加了新的功能。例如,2000年隨Framework

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

語言中的class類安全性更強。

總之,編程語言的發(fā)展經(jīng)歷了從機器語言、匯編語言到高級語言的歷程。編程語言

的發(fā)展史也是人們不斷追求更高的獨立于硬件的抽象化、模塊化和封裝化的歷史。

(3)程序結(jié)構(gòu)設(shè)計的發(fā)展

程序結(jié)構(gòu)設(shè)計是伴隨編程語言的變化而發(fā)展的。程序結(jié)構(gòu)設(shè)計經(jīng)歷了無序化、結(jié)構(gòu)

化程序設(shè)計、面向?qū)ο蟪绦蛟O(shè)計和組件模型等發(fā)展過程。

結(jié)構(gòu)化程序設(shè)計的思想是在20世紀60年代末、70年代初為解決“軟件危機”而形

成的。在以往的編程過程中,人們經(jīng)常使用轉(zhuǎn)移語句(GOTO),雖然它可以使程序的控

制流程強制性地轉(zhuǎn)向程序的任意一處,然而,如果一個程序中多處出現(xiàn)這種轉(zhuǎn)移語句,

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

為此,人們提出了結(jié)構(gòu)化程序設(shè)計的思想。結(jié)構(gòu)化程序設(shè)計使程序可讀性強、容易理解、

便于維護,它是面向?qū)ο笤O(shè)計的基礎(chǔ)。PASCAL語言、C語言等的編程特點具體地表現(xiàn)

了這種思想。

為了進一步使程序設(shè)計合理化,從20世紀80年代后期開始,人們乂提出了面向?qū)?/p>

象程序設(shè)計(ObjectOrientedProgramming,OOP)方法,O十語言的出現(xiàn)是這種思想的

明顯體現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計所包括的內(nèi)容有類(class)、封裝性、繼承性、多態(tài)性等。

C++語言中的class與C語言中的struct在應用上有點類似,但class可以包括函數(shù)、初

始函數(shù)和析構(gòu)函數(shù)(或入口函數(shù)和出口函數(shù))等,并且class的成員有不同的保護級別(如

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

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

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

和方法,通過繼承,程序開發(fā)者既可以繼續(xù)使用前人編寫的函數(shù)代碼,乂可以增加新的

函數(shù),這大大減少了重復工作。多態(tài)性是指用個名字定義不同的函數(shù),這些函數(shù)執(zhí)行

不同但又類似的操作,從而實現(xiàn)“一個接口,多種方法”,通過函數(shù)名或運算符重載和虛

函數(shù)來實現(xiàn)。

在同一種語言下,面向?qū)ο蟪绦蛟O(shè)計為程序員的軟件開發(fā)提供了極大的方便,然而,

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

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

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

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

型、CORBA組件模型。

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

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

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

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

②CORBA(theCommonObjectRequestBrokerArchitecture)是OMG(theObject

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

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

之上,特別是在UNIX平臺上,它已經(jīng)成為編寫分布式應用程序以及中間件的標準組件

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

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

總之,軟件程序結(jié)構(gòu)設(shè)計思想的變化是計算機技術(shù)發(fā)展的反映和必然結(jié)果,程序結(jié)

構(gòu)的設(shè)計遠遠沒有達到完美的程度。從長遠看,目前程序結(jié)構(gòu)的設(shè)計還處于初級階段,

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

復制、繁殖、信息儲存等,未來計算機軟件結(jié)構(gòu)演變將會像生命進化一樣向前發(fā)展。

(4)計算機工作結(jié)構(gòu)的變化

計算機有兩種工作結(jié)構(gòu),即串行計算和并行計算。所謂串行計算就是指令只能串行

執(zhí)行,即指令序列只能按照事先安排好的次序順序地執(zhí)行。所謂并行計算分為時間上的

并行和空間上的并行。時訶上的并行就是指流水線技術(shù),而空間上的并行則是指用多個

處理器并發(fā)地執(zhí)行計算。處理器由單核向多核的轉(zhuǎn)變使并行計算成為可能。

并行算法的產(chǎn)生是與實際應用問題的需求緊密聯(lián)系的,其主要原因有兩個方面:一

是因為通過并行計算,可以提高計算速度:二是由于計算機電路設(shè)計有一定的物理極限。

單個處理器的線寬的擴展總有一天要達到物理極限,所以不得不轉(zhuǎn)向多核。

從歷史上看,20世紀70年代末至80年代初是并行算法研究的頂峰時期,獲得了遞

歸問題向量化的成果。隨著多向量處理并行計算機(以Cray公司為代表,中國的則是銀

河系列)的出現(xiàn),既要考慮多處理機間的任務(wù)級大粒度并行,又要考慮單處理機上向量

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

計的并行算法在20世紀80年代中期較熱門,但因缺乏通用性,過分依賴機器,程序設(shè)

計復雜,隨著20世紀80年代后期高性能計算機的發(fā)展,很快被淘汰。20世紀90年代

中期后,并行算法研究漸漸面向?qū)嶋H而內(nèi)容有所拓寬,不但研究并行算法的設(shè)計與分析,

同時也兼顧并行機體系結(jié)構(gòu)和并行程序設(shè)計。

與計算機硬件發(fā)展相比,自從1950年笫臺并行計算機EDVAC問世以來,并行軟

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

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

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

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

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

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

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

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

社會發(fā)展的需要相關(guān),而模式結(jié)構(gòu)的發(fā)展主要與計算機技術(shù)的發(fā)展相關(guān)。

(1)數(shù)值模式發(fā)展歷程

自20世紀20年代英國數(shù)學家Richardson提出數(shù)值預報思想后,在一段時間里,數(shù)

值模式的發(fā)展一直處于停滯狀態(tài),直到20世紀50年代數(shù)字電子計算機的出現(xiàn),才使數(shù)

值天氣預報成為可能。到20世紀50年代后期,美國和歐洲部分國家的天氣預報員開始

把由計算機產(chǎn)生的天氣圖作為參考基礎(chǔ)。

20世紀60年代,計算機的能力增強使區(qū)域天氣模擬變?yōu)橘谇虼髿饽M成為可能。

這使得科學家們能夠進行氣候模擬,即長期大氣平均狀態(tài)。大氣環(huán)流模式(GCMs)開

始在全世界傳播開來。

20世紀70年代,GCMs已成為氣候研究的主要工具,在這以前人們主要是通過地

區(qū)或區(qū)域氣象資料的收集整理并進行統(tǒng)計。在同一時期前后,氣候?qū)W家開始關(guān)心大氣中

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

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

模擬工作。因為海洋是氣候系統(tǒng)的主要組成部分,氣候模式工作者開始把OGCMs與

GCMs進行耦合,以便進行全球大氣研究。

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

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

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

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

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

PILPS、CMIP等)。

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

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

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

物理過程的復雜程度。

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

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

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

早期的模式既簡單又單?,很多模式計算方案都是針對某些物理化學過程而設(shè)計的,

如陸面模式、積雪模式、水文模式、水波模式等。隨著計算機技術(shù)的發(fā)展,這些單的

計算方案如今與大氣模式耦合在一起,逐步發(fā)展成為一種功能強大的集合模式。在這個

集合體中,不同的物理過程可能使用統(tǒng)一的計算模塊,同一物理化學過程可以有不同的

計算方法。隨著數(shù)值模式和計算機技術(shù)的發(fā)展,模式中考慮物理過程越來越精確,模式

的結(jié)構(gòu)越來越細,分辨率越來越高,模式積分的時間越來越長。

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

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

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

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

計算機對計算的影響包括計算速度和計算誤差。這兩個方面的影響又分別來自計算

機硬件和軟件。計算誤差產(chǎn)生的原因很多,如把方程式離散化后產(chǎn)生的截斷誤差、舍入

誤差(把兀看成3.14159)、人為過失誤差等。同樣,影響計算速度的因素也有很多,如

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

雖然計算機硬件對計算速度和精度的影響是客觀事實,然而可以從軟件方面彌補這

種不足。這里重點分析計算機程序?qū)τ嬎闼俣群途鹊挠绊憽?/p>

電7131計算方法對計算精度的影響

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

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

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

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

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

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

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

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

方程的當前與精確解的偏差。

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

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

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

如果迭代結(jié)果偏差不為0,就會產(chǎn)生截斷誤差。

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

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

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

誤差。

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

在編寫程序時,每個變量都有一種類型,如字符型、整型、實數(shù)型、雙精度型等。

每種類型規(guī)定了在程序運行時這些變量在計算內(nèi)存里所占的位數(shù),即內(nèi)存空間的大小。

例如,字符型占1個字節(jié),整型占2個字節(jié),實數(shù)類型占4個字節(jié),雙精度占8個字節(jié)。

一個字節(jié)占8bits。

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

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

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

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

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

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

計算結(jié)果是正確的,否則,不正確,因為超過了變量類型的容量。

程序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

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

當〃>13時,單精度的計算結(jié)果不正確。

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

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

13!

14!

15!0000

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

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

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

II1_.1/…、

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

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

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

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

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

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

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

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

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

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

于后者,只需6次操作,顯然,后者的計算速度快。

常見影響計算速度的另一種情況是,在程序設(shè)計時使用重復計算。在實際計算中,

重復計算的形態(tài)各種各樣,例如,在一個循環(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

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

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

程序1?3

x=10

y=f(x)*f(x)

可以看出,以上程序?qū)瘮?shù)f(x)進行了重復計算。因為對于一定的X值,f(x)的值是

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

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

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

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

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

這是因為低級語言與計算機機器語言比較接近,不需要過多地轉(zhuǎn)換翻譯過程,因此計算

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

計算速度相對較慢。

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

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

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

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

作類似。目前,各種單一模式之間沒有統(tǒng)一標準,在對它們進行耦合時,需要進行一些

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

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

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

學預測的準確性。

1.初始誤差與蝴蝶效應

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

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

蝴蝶效應是美國麻省理工學院氣象學家洛倫茲(Lorenz)1963年提出的一個觀點,

他通過對一個簡化的大氣動力學方程進行積分,計算后發(fā)現(xiàn),當對初始氣象場作微小的

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

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

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

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

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

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

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

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

蝴蝶效應是指微小的初始值變化,亦可以理解為,微小的初始誤差,可以導致不同

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

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

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

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

下掉落的小球,當碗口向下時?,小球掉到碗底部上,當受力不均衡時,它將會滑落到不

同的方向;相反,當碗口向上時,小球?qū)舻酵胫?,最后落在碗底。前者好比蝴蝶?/p>

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

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

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

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

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

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

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

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

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

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

2.避免先截斷后運算

在數(shù)值計算中,如果對一個變量值進行先截斷,然后再進行計算,就會產(chǎn)生誤差,

這種截斷是由于變量類型變換等原因引起的。例如,把一個雙精度的數(shù)賦值給單精度的

變量,然后又再采用雙精度計算。

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

3.避免使用復雜計算式

在計算時,有時為了方便,不對計算式進行化簡而直接計算,這樣就使計算復雜化,

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

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

4.正確處理小分母問題

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

天文學家在研究天體運動擾動時就發(fā)現(xiàn)了“小分母問題”。

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

在動力學中,共振方程解中帶來具有分母1/

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論