• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            CG@CPPBLOG

            /*=========================================*/
            隨筆 - 76, 文章 - 39, 評論 - 137, 引用 - 0
            數據加載中……

            計算科學數學理論淺談(轉)

            計算機自從其誕生之日起,它的主要任務就是進行各種各樣的科學計算。文檔處理,
            數據處理,圖像處理,硬件設計,軟件設計等等,都可以抽象為兩大類:數值計算與非
            數值計算。作為研究計算機科學技術的人員,我們大都對計算數學對整個計算機科學的
            重要性有一些了解。但是數學對我們這些專業的研究和應用人員究竟有多大的用處呢?
            我們先來看一下下面的一個流程圖:

            ─→數學模型─┬→數值計算方法──┐         
            │         ├→程序設計
            └→非數值計算方法─┘        │
                                                       ↓
                                              編譯程序,求計算結果


                  上圖揭示了利用計算機解決科學計算的步驟,實際問題轉換為程序,要經過一個對
            問題抽象的過程,建立起完善的數學模型,只有這樣,我們才能建立一個設計良好的程
            序。從中我們不難看出計算數學理論對用計算機解決問題的重要性。下面我們將逐步展
            開對這個問題的討論。

                  計算機科學的數學理論體系是相當龐雜的,筆者不敢隨意劃分,參考計算機科學理
            論的學科體系,我們談及的問題主要涉及:數值計算,離散數學,數論,計算理論四大
            方向。

            [一]數值計算(Numerical Computation)

            主要包括數值分析學、數學分析學、線性代數、計算幾何學、概率論與數理統計學。

                  數值分析學又常被稱為計算方法學,是計算理論數學非常重要的一個分支,主要研
            究數值型計算。研究的內容中首先要談談數值計算的誤差分析,誤差是衡量我們的計算
            有效與否的標準,我們的算法解決問題如果在誤差允許的范圍內,則算法是有效的,否
            則就是一個無效的問題求解。另外就是數值逼近,它研究關于如何使用容易數值計算的
            函數來近似地代替任意函數的方法與過程。感覺應用比較廣的不得不提切雪比夫逼近和
            平方逼近了。筆者曾經嘗試過的就是通過最佳平方逼近進行曲線的擬合,開發工具可以
            選擇VC++或者Matlab。插值函數是另外一個非常重要的方面,現代的計算機程序控制加
            工機械零件,根據設計可給出零件外形曲線的某些型值點,加工時走刀方向及步數,就
            要通過插值函數計算零件外形曲線及其他點函數值。至于方程求根、線性方程組求解,
            一般的計算性程序設計問題都會多多少少的涉及一些,我們這里就不贅述了。關于數值
            分析學的一個學習誤區就是僅僅學習理論知識,而很難和程序設計結合起來,實際上通
            過上面的論述,大家已經能夠初步地認識到這個學科是應當與程序設計緊密聯系才能夠
            體現它的重要性的。關于理論的學習,推薦華中科技大學李慶揚老師的《數值分析》。
            然而理論學習畢竟是個過程,最終的目標還是要用于程序設計解決實際的計算問題,向
            這個方向努力的書籍還是挺多的,這里推薦大家高等教育出版社(CHEP)和施普林格出
            版社(Springer)聯合出版的《計算方法(Computational Methods)》,華中理工大學數
            學系寫的(現華中科技大學),這方面華科大做的工作在國內應算是比較多的,而個人
            認為以這本最好,至少程序設計方面涉及了:任意數學函數的求值,方程求根,線性方
            程組求解,插值方法,數值積分,場微分方程數值求解。


                 數學分析學很多學校在近些年已經替代高等數學被安排到了本科教學當中。原因是
            很簡單的,高等數學雖然也是非常有用的工程數學,介紹的問題方法也被廣泛的應用,
            但是正如大家所知道的,高等數學不太嚴格的說,基本上就是偏向于計算的數學分析,
            當然省去了數學分析非常看重的推理證明,然而我們認為這一部分正是我們最需要的。
            這對我們培養良好的分析能力和推理能力極有幫助。我的軟件工程學導師北工大數理學
            院的王儀華先生就曾經教導過我們,數學系的學生到軟件企業中大多作軟件設計與分析
            工作,而計算機系的學生做初級程序員的居多,原因就在于數學系的學生分析推理能力
            ,從所受訓練的角度上要遠遠在我們平均水平之上。談到這方面的書籍,公認北京大學
            張筑生老師的《數學分析新講》為最好。張筑生教授一生寫的書并不太多,但是只要是
            寫出來的每一本都是本領域內的杰作,這本當然更顯突出些。這種老書看起來不僅是在
            傳授你知識,而是在讓你體會科學的方法與對事物的認識方法。現在多用的似乎是復旦
            大學的《數學分析》,高等教育出版社的,也是很好的教材。但關于如何去利用從中獲
            得的推理證明能力,我們在遇到具體問題的時候,可以在今后的文章詳細討論。

                  線性代數是我們在工科本科學習的必修課程,似乎大家找不到到底這個有什么用,
            其實很明顯,線性代數作為工程數學的重要分支,在計算機領域的研究有相當廣泛的應
            用。最為突出的可以談談數組和矩陣的相關知識:

            ①←—④
            ↑\      │
            ↓     \,↓
            ②←—③

            令aij=1,表示從i市到j市有1條航線
            令aij=0,表示從i市到j市沒有單項航線
            則圖可用矩陣表示:

                           ┌           ┐
                           │0 1 1 0 │
                           │1 0 0 0 │
            A= (aij) = │0 1 0 0 │
                           │1 0 0 0 │
                           │1 0 1 0 │
                           └           ┘

                  我們可以采用程序設計實現這個問題,如果輔以權值,可以轉化為最短路徑的問題
            ,再復雜化一點還可以轉化為具有障礙物的最短路徑問題,這就會涉及一些如Dijkstra
            算法等高級程序設計算法話題。這些都依靠著數組、矩陣的基本知識。數組的應用主要
            在圖像處理以及一些程序設計理論。矩陣的運算領域極為廣泛,比如在計算機圖形學當
            中曲線曲面的構造,圖像的幾何變換,包括平移、鏡像、轉置、縮放。在高級圖像問題
            更有廣泛應用,例如在圖像增強技術,投影技術中的應用。

                  計算幾何學研究的是幾何外形信息的計算機表示。包括幾何查找、多邊形、凸包問
            題、交與并、幾何體的排列、幾何拓撲網絡設計、隨機幾何算法與并行幾何算法。它構
            成了計算機圖形學中的基本算法,是動畫設計,制造業計算機輔助設計的基礎。如果從
            事這方面的深入研究,可以參考中國計算機學會周培德先生的《計算幾何——算法分析
            與設計》。

                  概率論與數理統計學是這個領域最后一門關鍵的課程。概率論部分提供了很多問題
            的基本知識描述,比如模式識別當中的概率計算,參數估計等等。數理統計部分有很多
            非常經典的內容,比如偽隨機數、蒙特卡羅法、回歸分析、排隊論、假設檢驗、以及經
            典的馬科夫過程。尤其是隨機過程部分,是分析網絡和分布式系統,設計隨機化算法和
            協議非常重要的基礎。

            二]離散數學(Discrete Mathematics)

            隨著計算機科學的出現與廣泛應用,人們發現利用計算機處理的數學對象與傳統的分析
            有明顯的區別:分析研究的問題解決方案是連續的,因而微分,積分成為基本的運算;
            而這些分支研究的對象是離散的,因而很少有機會進行此類的計算。人們從而稱這些分
            支為"離散數學"。離散數學經過幾十年發展,方向上基本上穩定下來。當然不同時期還
            有很多新內容補充進來。就學科方向而言,一般認為,離散數學包含:集合論、邏輯學
            、代數學、圖論、組合學。

                  邏輯學(Logics)我們主要指數理邏輯,形式邏輯在推理問題中也有比較廣泛的應
            用。(比如我們學校還為此專門開設了選修課程)這方面的參考推薦中科院軟件所陸鐘
            萬教授的《面向計算機科學的數理邏輯》。現在可以找到陸鐘萬教授的講課錄像,http
            ://www.cas.ac.cn/html/Dir/2001/11/06/3391.htm。總的來說,學集合/邏輯一定要站
            在理解的高度上去思考相關的問題。集合論(Set Theory)和邏輯學構成了計算機科學
            最重要的數學問題描述方式。

                  代數學(Algebra)包括:抽象代數、布爾代數、關系代數、計算機代數

            (1)抽象代數(Abstract Algebra)研究的主要內容涵蓋群、環、域。抽象代表的是
            將研究對象的本質提煉出來,加以高度概括,來描述其形象。“歐式環”就是在將整數
            和多項式的一些相同的特點加以綜合提煉引入的。抽象代數提供的一些結論為我們研究
            一些具體問題時所需使用的一些性質提供了依據。推薦一個最簡單的,最容易學的材料
            http://www.math.miami.edu/~ec/book/這本《Introduction to Linear and Abstra
            ct Algebra》非常通俗易懂,而且把抽象代數和線性代數結合起來,對初學者來說非常
            理想。

            (2)布爾代數(Boolean Algebra)是代數系統中最為基礎的部分,也是最核心的基本
            理論。主要包括了集合的基本概念與運算,自對偶的公理系統。是數據表示的重要基礎
            。相信大家都很清楚它的重要性。

            (3)關系代數(Relational Algebra)應用也是極為廣泛,比如數據庫技術中的關系數
            據庫的構建就要用到關系代數的相關理論。

            (4)計算機代數(Computer Algebra)大家可能比較生疏,其實它研究的主要內容即是
            圍繞符號計算與公式演算展開的。是研究代數算法的設計、分析、實現及其應用的學科
            。主要求解非數值計算,輸入輸出用代數符號表示。計算機代數的開發語言主要有:AL
            TRAN,CAMAL,FORMAL。主要應用于:射影幾何,工業設計,機器人手臂運動設計。

                  圖論(Graph Theory)主要研究的內容包括:圖的基本概念、基本運算、矩陣表示
            ,路徑、回路和連通性,二部圖、平面圖,樹,以及網絡流。圖論的應用領域太過廣泛
            ,僅舉兩個例子:比如在計算機網絡拓撲圖的設計與結構描述中,就必須用到相當多的
            圖的結構和基本概念。關于網絡流更是在電流網絡與信息網絡的流量計算當中廣泛應用
            。樹的相關應用則無須多言了。

                  組合學(Combinatorics)有兩部分單獨的研究領域:組合數學與組合算法。組合學
            問題的算法,計算對象是離散的、有限的數學結構。從方法學的角度,組合算法包括算
            法設計和算法分析兩個方面。關于算法設計,歷史上已經總結出了若干帶有普遍意義的
            方法和技術,包括動態規劃、回溯法、分支限界法、分治法、貪心法等。應用是相當廣
            泛的,比如旅行商問題、圖著色問題、整數規劃問題。關于組合數學,主要研究的內容有
            :鴿巢原理、排列與組合、二項式系數容斥原理及應用,遞推關系和生成函數、特殊計
            數序列、二分圖中的匹配、組合設計。推薦Richard A.Brualdi的《Introductory Comb
            inatorics》作為參考。

            [三]數論(Number Theory)

                 數論這門學科最初是從研究整數開始的,所以叫做整數論。后來更名為數論。它包括
            以下幾個分支:

                 初等數論是不求助于其他數學學科的幫助,只依靠初等方法來研究整數性質的數論分
            支。比如在數論界非常著名的“中國剩余定理”,就是初等數論中很重要的內容。對于
            程序設計來說這部分也是相當有價值的,如果你對中國剩余定理比較清楚,利用它,你
            可以將一種表達式經過簡單的轉換后得出另一種表達式,從而完成對問題分析視角的轉
            換。

                 解析數論是使用數學分析作為工具來解決數論問題的分支。是解決數論中比較深刻問
            題的強有力的工具。我國數學家陳景潤在嘗試解決“哥德巴赫猜想”問題中使用的就是
            解析數論的方法。以素數定理為基礎解決計算素數的問題及其算法實現應是我們多多關
            注的。

                  代數數論是把整數的概念推廣到一般代數數域上去,建立了素整數、可除性等概念
            。程序設計方面涉及的比較多的是代數曲線的研究,比如說橢圓曲線理論的實現。

                  幾何數論研究的基本對象是“空間格網”。空間格網就是指在給定的直角坐標系上
            ,坐標全是整數的點,叫做整點;全部整點構成的組就叫做空間格網。空間格網對計算
            幾何學的研究有著重大的意義。幾何數論涉及的問題比較復雜,必須具有相當的數學基
            礎才能深入研究。

                  總的說來,由于近代計算機科學的發展,數論得到了廣泛的應用。比如在計算方法
            、代數編碼、組合學理論等方面都廣泛使用了初等數論范圍內的許多研究成果;現在有
            些國家應用“孫子定理”來進行測距,用原根和指數來計算離散傅里葉變換等。如果你
            曾經系統的學習過數論算法,你會發現這個分支學科研究的一些基本問題對程序設計是
            相當有用的,比如說素數問題、素性測試、因子分解、最大公約數、模取冪運算、求解
            同余線性方程。其中的很多問題都是程序設計的基本問題。但這些問題都不能小視,舉
            個例子來說吧,關于求最大公約數的程序,筆者曾經嘗試的就可以采用循環語句結構和
            遞歸結構。另外,以大素數為基礎的密碼體系的建立是近些年數論算法廣泛應用的一個
            重要的原因。原理是大素數的乘積重新分解因數十分困難。RSA公鑰加密系統的構建就是
            基于這個原理的(三位發明人因此也獲得了2002年美國計算機協會頒發的圖靈獎)。


            四]計算理論(Theory of Computation)

                  涉及的內容是科學計算非常重要的一部分分支,也是大家研究相當多的一部分。主
            要包括:算法學,計算復雜性,程序理論。

                 算法學(Algorithms)在計算機科學理論中有著舉足輕重的地位。是解決很多數值
            型,非數值型問題的基礎。記得一次學校接收招標項目,很多中小型軟件廠商都無法完
            成一個軟件的功能模塊,就是因為當時他們對一個具體問題的算法不能做出正確的抽象
            ,最后由我們學校數理學院的一支軟件團隊承擔了這項任務,他們的最終報告體現出來
            ,問題的解決策略只有通過人工神經元網絡的反向傳播算法。可見在比較有深度的程序
            設計中,算法的重要性更為突出。學習算法學要有一個長期的理論和實踐的過程。遇到
            一個具體算法問題時,首先要通過自己描述的數學抽象步驟,看看自己以前有沒有處理過
            這種問題。如果沒有,很可能這個問題是多個算法的綜合,或者是需要我們自己去構造
            算法。這就需要我們有扎實的算法功底,為了打好這個功底,推薦兩套圣經級的書籍首
            先是Thomas H.Cormen等著的《Introduction to Algorithms》。對算法學習而言,這一
            本內容相當的全面。再深一點的就是大家作為常識都知道的《The Art of Computer Pr
            ogramming》,目前已經出版3冊。兩本書的價值大家應當都是清楚的。

                  計算復雜性研究的內容很廣,其中包括NP完全性理論,可計算性理論,自動機理論
            ,形式語言理論(包括廣泛應用于編譯原理領域的文法,還包括Petri網論的相關內容)
            以及大家熟知的復雜性度量。時間復雜度、空間復雜度的計算是度量算法非常重要的參
            數,也是我們衡量程序優劣程度的重要依據。

                  程序理論(Theory of programs)包含了形式語義學,程序驗證和并發模型的研究
            。關于程序驗證學習的重要性大家都很清楚,學習的方法自然也是多多結合具體的問題
            去分析。關于并發模型,主要研究的就是進程代數,通信系統演算,通信順序進程。這
            部分是研究操作系統理論與實現的重要基礎。

                  按照計算機科學數學理論的架構來談了各方面的內容和一些應用,下面我們再單獨
            來看一些上面沒有涉及到的學科與這些理論的具體結合情況:


                  設計方面的應用剛才談的很多,我只再說說數據庫原理與技術,這方面用到的重要
            數學基礎主要包括:集合論,二元關系及其推理(尤其是研究關系數據庫),研究數據
            分布與數據庫結構又涉及相當多的圖論知識。

                  計算機科學的發展有賴于硬件技術和軟件技術的綜合。在設計硬件的時候應當充分
            融入軟件的設計思想,才能使硬件在程序的指揮下發揮極致的性能。在軟件設計的時候
            也要充分考慮硬件的特點,才能沖破軟件效率的瓶頸。達到硬件和軟件設計的統一,嚴
            格的說這并不輕松,一般的程序設計者很難將這樣的思想貫穿在其程序設計當中。僅舉
            個簡單的例子:我們在寫一些C語言的程序,必要的時候都會采取內嵌一段匯編指令,這
            就是比較充分地考慮了硬件的工作情況,從而能夠提高程序運行的效率。所以我們也有
            必要了解一些硬件的基礎知識。關于學習硬件的時候常會用到的基本數學思想也是相當
            多的,拿電路基礎與模擬電路來說,我們就經常要利用多元函數,不等式計算進行電流
            電壓的計算。能量的計算還常常涉及微積分學的很多計算。在數字電子技術當中(有時
            也稱數字邏輯學)數理邏輯,尤其是邏輯演算部分運用相當廣泛,數制轉換更是非常重
            要的基礎,各種數字電路參數的計算則是多元函數,不等式的計算解決的問題。

                  從事計算機硬件程序設計的程序員,則不可回避的就是數字信號處理。這門科學所
            用到的數學基礎主要有:三角函數、微積分、高次方程求解、數值逼近,傅里葉變換。
            在濾波器的設計當中還會用到矩陣運算。筆者曾經研究過一個VC++環境下開發的濾波器
            的模擬軟件,就是利用萊文遜-杜賓遞推算法,在較大規模的矩陣運算基礎上進行的。當
            然,開發的環境不一定是這個,你也可以選擇MATLAB或者純C語言編譯器。如果我們不了
            解相關的數學基礎,不要說程序設計,就算是建立運算模型都是相當困難的。

                  一些周圍的同學和一些在職的程序員,大家經過一段時間的學習,普遍都覺得數學
            對學習計算機和研究計算機程序設計等問題來說非常重要,但是又苦于無從下手。上面
            比較全面地談及了計算機科學數學理論的相關內容。需要特別指明的是,我們研究問題
            的精力是有限的,如果您是在校的計算機系學生,則可以對上面的方方面面都有所涉及
            ,以嘗試計算數學這個強大的理論工具。為今后的工作奠定一個堅實的基礎。但是如果
            您研究的是比較具體的工作,我們并不推薦您研究所有的內容,最好的方法就是對上面
            的數學基礎都有些了解,然后遇到具體工作,需要哪部分內容,再進行深入的學習與研
            究。這樣針對性比較強的學習效果是會比較顯著的。對于上面推薦的一些參考材料,除
            非你要花相當長的一段時間來提高你的計算機數學理論。否則也沒必要每一頁,每一本
            都字字精讀,還是那個原則,按需索取其中的內容。學習的方法描述起來就一句話:結
            合具體的問題,深入的理解數學理論知識,將理論程序化,嘗試用程序設計實現理論原
            理。達到這樣的程度,問題基本上都可以解決的

            posted on 2008-04-04 01:12 cuigang 閱讀(1299) 評論(0)  編輯 收藏 引用 所屬分類: 轉帖

            国产成人久久精品一区二区三区| 久久久噜噜噜www成人网| 久久亚洲日韩看片无码| 久久精品国产免费| 伊人久久精品无码二区麻豆| 囯产精品久久久久久久久蜜桃 | 久久精品国产清自在天天线 | 久久久久99这里有精品10| 狠狠精品干练久久久无码中文字幕| 国内精品久久久久影院日本| 久久人人添人人爽添人人片牛牛| 国内精品九九久久久精品| 久久久久人妻精品一区三寸蜜桃 | 中文字幕亚洲综合久久菠萝蜜| 亚洲国产成人精品女人久久久| 久久久久无码国产精品不卡| 久久综合综合久久综合| 久久丫精品国产亚洲av| 国内精品伊人久久久久网站| 久久国产精品99精品国产| 亚洲国产成人久久综合区| 岛国搬运www久久| 亚洲国产天堂久久综合| 亚洲国产精品久久久久婷婷软件 | 久久国产乱子伦精品免费午夜| 久久综合香蕉国产蜜臀AV| 亚洲乱码日产精品a级毛片久久| 99久久精品免费看国产一区二区三区| 香蕉久久夜色精品升级完成| 成人妇女免费播放久久久| 久久丫忘忧草产品| 中文字幕久久亚洲一区| 亚洲国产成人精品女人久久久| 国产成人久久精品麻豆一区 | 国产精品久久新婚兰兰| 久久久精品午夜免费不卡| 国产福利电影一区二区三区久久老子无码午夜伦不 | 大伊人青草狠狠久久| 国内精品久久久久久久coent | 香港aa三级久久三级老师2021国产三级精品三级在 | 久久人人爽人人爽人人爽|