全世界的計算機 95% 的時間都在解線性方程,這句話現在還對嗎?
記得小時候看科普讀物(大概是《數學:新的黃金時代》)看到過類似於「全世界的計算機 95% 的時間都在解線性方程」(比如 Linear Programing)這樣一個陳述。驚訝之餘想想也可以接受,比如線性規劃,當年計算機搞出來就是干這個的,不少問題也可以轉化成線性規劃,或者矩陣來處理。你要說登月或者造核彈,95%的計算量是在解線性方程,完全可能。
但今天我意識到,那本書是1986年左右寫的。這句話到今天還對不對?(或者範圍放寬廣一點,處理矩陣相關的運算。)比如,那本書寫作的時候,還沒有 1995 年的 GIMPS,這裡提供的分散式計算,規模可以匹配當時的超級計算機,似乎乾的也不是解線性方程。Facebook 的伺服器每天處理那麼多請求,不是在解線性方程吧。說 iPhone 的計算能力和 NASA 在 1969 年擁有的一樣,也不是每個 iPhone 95% 的時間都在解方程吧?(Google 給大量網頁排 Page Rank,倒是很多矩陣運算)
謝邀。我覺得這個問題有點沒有問好。
1. 解線性方程這個說法稍微有點狹窄。例如說求 y = ax + b 裡面的y,這個算解線性方程么?按定義說估計也算,於是其實所有線性運算都算了。2. 既然所有線性運算都算,那就可以說計算機100%都在解線性方程了。難道計算機現在不是只能做加減乘除?
3. 答主唯一的顧慮估計在非線性運算。想想一個非線性運算,例如求個什麼的幾次方,或者開個方,做過程序員就知道也是靠加減乘除弄出來的。4. 那非線性優化呢?想想牛頓法,用的是迭代的方法,每一步迭代裡頭也不過是線性運算。結論是:如果能看得稍微底層一點,其實計算機都在搞線性運算。那假如求 y = ax + b 裡面的y不算解線性方程,那麼其實這世界上就有很多時候不是在解線性方程了。其它答主提到過很多,像儲存,文本處理,我相信計算機的常規工作並不只在計算,特別是現在多了那麼多高科技公司。想想亞馬遜的雲服務部分為什麼不叫雲計算部門就能感受得到。
另外我是學運籌學的,圈子裡幾十年前就在搞半正定優化了,只不過很多工程學科都沒有用過來,畢竟線性的簡單,很多時候也能解決問題了,不過這個情況慢慢在改變,非線性優化有越來越多應用場景了,最常見的是魯棒優化,很多時候約束條件改成二次的比一次的算起來要快得多。還有很多黑箱的優化問題,就更不好說是在解線性方程了。
你的問題非常有趣,你說的那本書我也沒看過。但是我就引用一下wikipedia上的話,來給點參考:
見 http://zh.wikipedia.org/wiki/%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E7%BB%84
&> 現實中的問題大多數是連續的,例如工程中求解結構受力後的變形,空氣動力學中計算機翼周圍的流場,氣象預報中計算大氣的流動。這些現象大多是用若干個微分方程描述。用數值方法求解微分方程(組),不論是差分方法還是有限元方法, 通常都是通過對微分方程(連續的問題, 未知數的維數是無限的)進行離散,得到線性方程組(離散問題, 因為未知數的維數是有限的)。因此線性方程組的求解在科學與工程中的應用非常廣泛。你說道的facebook之類的計算機處理請求,我以http為例來說,當你訪問一個網頁的時候,
其實是訪問的是一個網站的鏈接地址(URL),這可以認為是一個自變數x,那麼伺服器收到這個x之後,是需要進行計算,針對這個x,以及後面隱藏的其他變數(例如你的登錄狀態、你的個人信息)
來計算出返回給你的因變數y。對於常規的一個頁面請求而言,似乎很多都是流水作業,應該是線性的為主。請其他人拍磚。服務端現在很大一部分工作簡單描述其實是文本處理和存儲服務,非要算的話確實隱含線性模型。
至於iPhone和桌面計算機,幹得最多的其實是繪圖到緩存送到顯卡里繼續做線性計算。而顯卡這玩意可以說就是用來做矩陣運算的……
再退一步,計算機處理任何非線性問題,實質都是做線性運算,從這個角度講哪怕說100%的線性計算都不為過……有點意思的問題。試著來回答一下。
首先,我們日常生活中所用的通用計算機都是基於馮氏架構之上的,其CPU的運算單元(ALU)所執行的指令都可以看作是基於傳統的四則運算和邏輯代數範疇內的,即加減乘除乘方開方,以及與或非異或移動等等。
從四則運算的角度來說,可以認為是計算機把複雜的運算簡化成了大規模的四則運算,例如使用拉格朗日多項式來近似計算三角函數之類。對於這部分來說,視作在解線性方程是可以的。
但是,邏輯代數並不是線性方程呀,因為其並不符合線性方程基礎的性質,如f(x+y)=f(x)+f(y)之類,也無法用任何手段簡化成線性方程。例如最簡單的例子,Not(1+0)=Not(1) = 0,而Not(1)+Not(0)=0+1=1。考慮到邏輯運算(位運算)在計算機內部的巨大數量,我認為這句話從一開始就不是準確的。說100%都沒什麼大問題。這跟人的思維方式和電子硬體的固有特點有關係線性思維是可以被相對準確的表達出來的,也就是說它可以被固化,它在某種規則下,就是合理的,那麼電子硬體就可以代替人類去處理線性思維模式能夠解決的問題。而非線性思維是相對來說比較難以準確表達和固化,它符合人類的神經系統特點,是一種難以模擬的思維方式,它處在合理性的邊緣,可能是合理的,也可能是不合理的。而電子硬體是無法實現這種模糊定義的,除非它能夠同時表現兩個方面。也就是說以現有的計算機的硬體特點來說,它只能執行邏輯合理和正確的線性程序,也就是說它只能「正確」或者「錯誤」。從邏輯上來說,非線性思維某種程度上不是「正確的」,它是模糊的。或者再說,人類之所以是人類,就是因為人類具有非線性思維能力的物質基礎--神經系統而計算機再怎麼模擬,它的硬體基礎是只有準確的0和1的。線性思維「政治正確」卻片面機械,是能夠「準確的」產生錯誤的,而非線性思維模糊全面卻不夠準確,是能夠」差不多「產生正確的。
可能只是現在更高次
推薦閱讀:
※EECS 做的博弈論,機制設計和 Econ 做的有什麼區別?
※為什麼computer music會成為一個研究方向 ,或者說它到底是一個怎麼樣的學科?
※被自己寫的代碼丑哭是一種什麼樣的體驗?