1.1.4 計算的方法和過程
計算方法是一種研究并解決數學問題的數值近似解方法,是在計算機上使用的用于求解數學問題的方法,既有數學類課程中理論上的抽象性和嚴謹性,又有實用性和實驗性的技術特征。計算方法在科學研究和工程技術中的應用非常廣泛。例如,在航天航空、地質勘探、汽車制造、橋梁設計、天氣預報和漢字字樣設計中都有計算方法的蹤影。因此,計算方法是一門理論性和實踐性都很強的學科。
計算方法研究的基本問題是如何把復雜數學模型的求解從實際問題中抽象出來,盡可能有效地轉化為對有限數位的數的有限次數的四則運算,在此基礎上再進一步研究如何結合計算機的特點進行數值計算的基本方法。
計算過程就是執行算法的過程,把問題轉化為一步一步按規則執行的機械求解過程,各種計算語言都是形式語言,軟件開發過程實質上就是程序員們對客觀世界問題域的形式化的過程。程序員們先建立問題的模型,再用計算機語言加以恰當的表達,最后輸入計算機進行計算。
計算的過程基本如下:
(1)需要對一個復雜的科學技術問題進行分析,根據提出的問題和條件進行約簡和抽象,從而建立數學模型。
隨著科學技術對研究對象的日益精確化、定量化和數學化,隨著計算機的廣泛應用,數學模型已成為處理科技領域中各種實際問題的重要工具,并在自然科學、社會科學與工程技術的各個領域中得到廣泛應用。數學模型是連接數學與實際問題的橋梁,對數學模型而言,數學是工具,解決問題是目的。在建模過程中,從要解決的問題出發,引出數學方法,最后再回到問題的解決中去。
(2)同一類問題的求解方法存在多種,因此需要根據實際問題對計算精度和計算效率的要求選擇合適的計算方法,根據采用的計算方法設計正確的算法。
(3)構建解決問題所需要的計算環境。包括計算機的硬件系統、軟件系統,所需要的數據以及所使用的網絡環境。
(4)運用程序設計方法學所闡明的原則、原理和技術編寫程序,要綜合考慮程序執行的時間、空間等問題。
用某種計算機語言寫出該算法的程序,并輸入計算機,計算機將按照程序指令的要求自動處理,并輸出計算結果。
使用計算機解決問題時需要用程序設計語言對問題的求解加以描述。實質上,軟件是問題求解的一種表述形式。顯然,如果軟件能夠直觀地表現求解問題的方法,則軟件不僅易于被人理解,而且易于維護和修改,從而提高了軟件的可靠性和可維護性。此外,如果按人們通常的思維方式來建立問題域的模型,則可以提高公共問題域中的軟件模塊化和重用化的可能性。軟件開發的過程就是使用各種計算機語言將人們關心的現實世界映射到計算機世界的過程。
(6)運行、調試和完善程序。查出程序執行過程中出現的錯誤并改正,使程序能夠順利通過并得出正確結果。程序測試則是使程序在各種可能情況下均能正確執行。
(7)文檔資料編寫。寫出程序的設計、維護和使用說明書。存檔和備查始終貫徹整個解題的過程。
可以看出,計算方法的運用過程本身就是一個將復雜任務分解為若干簡單任務的過程,并且每個任務都需要選擇合適的方法,按照一定的規范逐步處理,處理過程中需要根據具體情況對方法進行調整,甚至從頭再來。因此,計算方法運用的每個步驟都能體現計算思維的理念,學習計算方法對培養計算思維具有重要的意義和良好的作用。
隨著計算機的發展與普及,繼實驗方法、理論方法之后,計算已成為科學實踐的第三種手段,求解各種問題的計算方法已被廣泛應用于自然科學、社會科學等領域。
這里所談的計算方法是廣義上的計算方法,它是利用計算機求解問題的一般方法與過程,它的任務是提供在計算機上實際可行的、理論可靠的、計算復雜性好的各種方法。
利用計算機求解問題的一般過程如圖1.4所示。

圖1.4 問題求解的過程
狹義上的計算方法是研究怎樣通過計算機所能執行的基本運算,求解各種問題的解。更確切地說,它是對給定問題的輸入數據和所需計算結果之間關系的一種明確的描述。
對于許多問題的計算,既可以用類似于計算函數的方法來進行,也可以用表(一種數據結構)處理的方法進行,甚至還可以用邏輯公式演繹推導的方法來進行。在實現技術上,既可以用遞歸技術計算,也可以用迭代技術、程序變換技術或其他技術進行計算。
求解一個給定的可計算或可解的問題,不同的人常常編寫出不同的但都是正確的程序。這是由兩個問題所決定的:一是與計算方法密切相關的算法問題;二是程序設計的技術問題。
既然求解同一個問題可以有不同的方法、算法和程序,那么,怎樣來判斷算法和程序的優劣呢?如果依據一個算法設計了一個計算某一問題的程序,然后對其進行程序變換,假設經過程序變換得到的程序仍然是計算這個問題的,那么,這個新程序所對應的算法和原來的算法一樣嗎?即程序變換是否改變算法呢?如何確保算法和程序的正確性?從上述兩個例子,我們已認識到算法、程序與數學之間存在著密切的聯系。要解決上面的問題,沒有數學和計算科學理論的支持是不行的。
在計算科學中,人們已經認識到:一個問題,當它的描述及其求解方法或求解過程可以用構造性數學描述,而且該問題所涉及的論域為有窮,或雖為無窮但存在有窮表示時,那么,這個問題就一定能用計算機來求解;反過來凡是能用計算機求解的問題,也一定能對該問題的求解過程數學化,而且這種數學化是構造性的。這是由于構造性數學的構造性特征保證了計算方法的可行性,兩者之間是相容的。在計算科學的發展過程中,計算方法同算法始終是緊密聯系在一起的,有時候計算方法就是算法,有時候計算方法離算法還有一定的距離,如某一方法僅僅只能表示為一個過程而不能表示成算法。
當一個問題的求解有了計算方法和算法時并不等于就完事了。在許多情況下,找到求解一個問題的計算算法只是走完了第一步。至于現實是否可以計算,則取決于算法的存在性和計算的復雜性,即取決于該問題是否存在求解算法,算法所需要的時間和空間在數量級上能否接受。要注意的是:有的問題雖然存在求解問題的計算方法,但不存在算法。研究其原因,大致有兩種可能:一是計算方法可能不是構造性的;二是雖為構造性的,但計算方法不能保證計算過程在任何初值的情況下都能結束。
- Python編程自學手冊
- Learn to Create WordPress Themes by Building 5 Projects
- MySQL 8 DBA基礎教程
- 網頁設計與制作教程(HTML+CSS+JavaScript)(第2版)
- 新手學Visual C# 2008程序設計
- PhpStorm Cookbook
- 零基礎入門學習Python
- 軟件測試技術指南
- Getting Started with React Native
- 軟件供應鏈安全:源代碼缺陷實例剖析
- Mastering Python Design Patterns
- 軟件測試綜合技術
- AI自動化測試:技術原理、平臺搭建與工程實踐
- Tableau Dashboard Cookbook
- IBM RUP參考與認證指南