C#_大衛製作套件

此套件為大衞製作,方便未來的我可以直接套用套件。
若要使用,在 VS 上加入參考加入 gauss.dll 即可使用

C# 套件

此套可解決於多元一次方程式組解,快速且有效率解法
P.S. 技術僅限到更新日期

gauss 套件下載

必須加入 using guass;

高斯消去法

宣告物件

1
gauss test = new gauss(int n ,doublue[,]  douGauss , double[] ans )

n = 有多少階數
douGauss = 所有行係數的陣列
ans = 每元的係數

prepare() 測試用方法

1
gauss.prepare() ;

透過 console.wrire 來輸入 n , douGauss , ans
方便使用者加入 gauss 中的變數

elimindation() 高斯消元法

高斯消元法說明

1
gauss.elimindation() ;

seidel_method() 賽德爾疊代 and SOR 超鬆弛迭代法

賽德爾疊代說明
在 2020/06/08 時將 seidel_method() 優化,現在已經在任何情況下比消元速度還快

超鬆弛迭代法說明
在 2020/07/15 時由於 SOR 是找 omega 來進行鬆弛(P.S. seidel_method() 為 1),由於 omega 在每個多元一次方成組解時 omega 量為不固定,要找出對應的 omega 計算十分複雜(且我尚未讀熟,如果有大佬懂可以教我嗎 QQ) ,於是我目前先將 omega 定為 1.1。

Q: 為甚麼 omega 是 1.1?
A: 我曾訂過 0.658 , 1.658 發現都不如預期,在大多數情況下多元一次方成組 omega 大多分布在 1.1 ~ 1.3 之間,於是我選擇 1.1,如果大家不喜歡的話可以在裡面帶自訂數值。

Q: it 是甚麼? 可以吃嗎
A: 不行啦, it 是自訂迭代次數,你可以自己設定想迭代幾層,預設 -1 為完美迭代,即答案必求到絕對正確。

1
gauss.Seidel_method(double omega = 1.1 , int it = -1);

心得

在開發 gauss 套件時,其實花了很多時間在 Debug 與 效率優化,由於分手的關係,這真的是非常痛苦的過程阿…。工程師需要讓自己不被情緒給影響真的有些許的困難,我們也要能夠在 coding 過程中注意到女朋友,不可以讓女生感覺到自己已經不在意他,消耗愛的能量,導致愛情與悲劇收場。

然後再鑽寫程式的過程中,我發現出了一個極大的問題。使我的「賽德爾疊代」應該要能夠比「高斯消元法」速度還要快,但因為原先我的「賽德爾疊代」在陣列方式處理不佳,過程中浪費大量效率使我矩陣在 > 500 時速度會比「高斯消元法」過慢。

因為在 seidel_method 中每次都需要 k+1 的迭代,於是原先我的程式寫法是準備一個巨大的迭代陣列,但我發現 二維陣列 當索引值太大時,查找速度會過慢,在大量迭代之下就會將此問題放大。於是後來將迭代陣列弄成 二維,類似於 array[2][n] (因為每次迭代只需要 k+1 , k ),相對來說查找速度就快很多。在 500*500的陣列中,原先使用 seidel_method 未優化需使用 578s,優化後只需要 2s,二維陣列查找速度。

更新日誌

2020-05-18 14:30:21 - 完成 gauss 套件、 高斯消元法
2020-05-30 20:34:28 - 完成 seidel_method
2020-06-08 15:58:42 - 完成 seidel_method 優化
2020-07-15 00:23:42 - 將 Successive Over Relaxation 的 omega 鎖定為 1.1

  • 版權聲明: 本部落格所有文章除有特別聲明外,均採用 Apache License 2.0 許可協議。轉載請註明出處!
  • © 2020-2024 John Doe
  • Powered by Hexo Theme Ayer
  • PV: UV: