克利金等值線 DLL 初版建成

前篇:克利金法類別雛型開發完成 說到克利金法 (Kriging) 開發完成了,但是前篇開發完成的類別僅適合科學計算用,也就是說可以輸出任意指定點的推估值,但不會畫成圖,所以要用迴圈自己跑格網,跑完後存成 Surfer 支援的 ASCII Grid 格式,所以當然就沒辦法直接輸出圖形了。

先前開發格網等值線 (Contour) 時,用的是 GIS 裡面的 Point 類別,早期開發 GIS 類別時,是沿襲 VB6 開發慣例,所以裡面沒有運算子或型別轉換,這在 .Net 中十分不便,所以趁此機會把整個 GridContour 類別重整,然後合併克利金法建成 KrigingContour.dll ,再丟給 WinForm 來測試,測試結果如下:

以曾文溪流域為範疇,將周遭 79 個氣象局雨量站拿進來畫,使用的資料是 2008/9/14 15:00 的雨量。建構成 DLL 的好處就是程式碼照抄,就可以變成 ASP.NET 網頁輸出,先前有個風玫瑰圖的案例就是這樣處理,這樣比較方便視窗除錯。

目前效能還算差,大概上面這張圖要跑 15 秒,以一小時跑 15 秒算是還可以接受,但是相同的參數 Surfer 大概只要跑 2 秒,所以應該還有加速空間。一般來說,當點數過多時,通常推估目標點不會全取,而是取附近的鄰近點 10 ~ 20 點左右,我目前是使用所有雨量站資料推估,所以要建立 80×80 的反矩陣計算,且反矩陣計算目前是用高斯消去法,計算尺度是 O(2) ,也是慢的原因之一,接下來再考慮這部分的加速。風場推估則是同時做 u, v 兩向量的推估,再合併成方向與風力。

註:先前建立的即時玫瑰風圖網頁,直接從資料庫拉小時資料後進行統計分析繪圖:

廣告
Categories: 決策支援系統 | 1 則迴響

文章分頁導航

One thought on “克利金等值線 DLL 初版建成

  1. 子璉

    進行了一些加速測試大體上算是搞定一大部分了。
    狀況與問題:
    1. 我使用慣用的 DBArray ,建置與釋放多花了 2 秒 (2/15)。
    DBArray 的架構是:((Title0, Title1, …), (Row0Col0, Row0Col1, …), (Row1Col0, Row1Col1, …), …)
    2. 我自己寫的 QuickSort 是依據 DBArray 格式建構的,排序多花了 6 秒 (6/15)。
    3. 我自己建構矩陣類別,用反矩陣方式反算未知數矩陣,改用多元一次方程式算,雖然同樣使用高斯消去法,但是多元一次方程式是算 n x (n+1) ,反矩陣是算 n x 2n ,這部分差了 1 秒 (1/15)
    4. 格網推估從全部 79 雨量站改到最近 20 雨量站 (測試包含 10, 20, 40, 60, all) ,可節省 3 秒 (1/15) 。
    目前總運算時間約 3 秒,尚可再繼續針對程式碼最佳化,不過這樣就差不多了。依照矩陣數學式計算,還是比較慢啊~

    喜歡

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: