鄒工把公文包放在講臺上,開啟,從裡面拿出一樣東西。
不是檔案,是一臺筆記型電腦。
黑色的,大概一本《辭海》縮印本那麼大,螢幕合著,外殼上有一個紅綠藍三色組成的標誌。
他把螢幕掀開,按了一下側面的一個按鈕,機器發出一聲輕微的蜂鳴,螢幕上亮起了一片藍色的光。
活動室裡的空氣凝固了大概三秒鐘。
1990年,一臺真正的筆記型電腦,能掀開螢幕就能用的那種。
集訓隊裡大多數人只在《計算機世界》雜誌上見過照片。
鄒工把機器轉過來面朝大家,螢幕上是一個DOS命令列,游標一閃一閃的。
“這是我們公司跟香港合作開發的一款行動式微機。”
鄒工的聲音帶著一點南方口音,“80286的晶片,1兆記憶體,20兆硬碟,國內目前還沒有批次上市,這是工程樣機。”
他從公文包裡又掏出一張軟盤,三寸半的,黑色塑膠殼,貼著一張手寫的標籤——數學函式庫·測試版。
他把軟盤插進機器側面的驅動器裡,軟盤推進去的時候發出咔嗒一聲脆響。
螢幕上的游標閃了幾下,然後跳出一行字:“MathLib v0.1——中國計算機發展公司。”
“這個數學函式庫是我們公司正在開發的產品,主要是給國內的科研單位和大學用的。”
鄒工敲了幾個命令,螢幕上列出了一長串函式名——三角函式、指數對數、矩陣咚恪抵捣e分。“目前核心演算法部分基本完成了,但有一個模組一直沒達到預期的精度。”
他開啟了一個名為SPLINE.TST的檔案,螢幕上顯示出一組資料和對應的曲線擬合結果。
“三次樣條插值模組,在邊界條件比較複雜的情況下,誤差會放大,我們除錯了兩個月沒找到問題出在哪裡。”
鄒工轉過身看著活動室裡的隊員們。
“公司離這兒不遠,騎車二十分鐘,我們李總聽說集訓隊有一群數學底子紮實的年輕人,讓我帶著機器過來,看有沒有人願意幫忙看看。不是白乾,按專案外包算報酬。”
活動室裡響起一陣低低的議論聲。
報酬的事大家沒太在意,真正讓人興奮的是那臺機器。
一臺能掀開蓋子就能用的筆記型電腦,一張三寸半的軟盤,一個實實在在的、正在開發中的軟體產品。
不是課本上的例題,不是競賽捲上的試題,是出了這間屋子就要被千千萬萬人用的東西。
陸沉看著螢幕上那行SPLINE.TST的資料。
三次樣條插值,數值分析裡的經典內容。
邊界條件複雜時誤差放大,這個問題他前世見過。
通常不是插值演算法本身的問題,是邊界導數的估計方法在特定資料分佈下會產生病態。
標準做法是用自由邊界或者固定邊界的樣條,但實際工程資料往往既不滿足自由邊界也不滿足固定邊界,硬套標準方法就會在邊界附近出現振盪。
他站起來,走到講臺前面。
鄒工讓開鍵盤的位置。
陸沉調出樣條模組的原始碼,螢幕上的C語言程式碼一行一行地滾動。
他看程式碼的速度讓鄒工的眉毛微微揚了一下。
不是瀏覽,是在追蹤資料流和邊界處理的邏輯鏈條。
看到邊界導數估計那一段的時候他停下來。
“問題在這裡。”他指著螢幕上一段程式碼,“邊界導數的估計用的是三點差分公式,這個公式假設邊界附近的資料是光滑的,如果實際資料在邊界處有突變或者曲率很大,三點差分的截斷誤差會急劇上升。”
鄒工湊近螢幕看了一會兒。
“我們試過用五點差分,精度沒改善多少。”
“不是差分點數的問題。”
陸沉把程式碼往下翻了幾頁,找到邊界條件判斷的那一段,“是邊界條件的分類不夠細。標準樣條只分三種邊界——固定邊界、自由邊界、週期邊界。
但實際工程資料的邊界形態遠不止這三種。
你們這個模組在處理非標準邊界時,會自動歸到最近的標準型別裡,然後硬套標準公式,這才是誤差的根源。”
他在鍵盤上敲了幾行,在邊界條件判斷模組里加了一個新的分支——非標準邊界預處理。
思路很簡單:在進入樣條求解之前,先用一個低階多項式對邊界附近的幾個點做區域性擬合,用擬合曲線的端點導數代替原來的差分估計。
這樣做相當於在邊界處加了一個緩衝區,讓邊界條件從非標準平滑