[問題] 高斯消去求反矩陣

作者: j0958322080 (Tidus)   2017-12-07 18:34:32
開發平台(Platform): (Ex: Win10, Linux, ...)
win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
NO
問題(Question):
在使用高斯消去求反矩陣時,如果遇到很多無窮小數的加減,
那算出來整個數值就會跟正確的差很多
餵入的資料(Input):
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
例如上述矩陣,利用高斯消去從左邊往下消,再從右邊往上消
第一行跟第二行因做太多次計算所以數值會差很多,
但是第五行跟第四行誤差就會很小,
有什麼比較好的方法可以減少誤差呢??
作者: yeebon   2016-07-22 16:41:00
chx64的1/2悖論真的很經典呢
作者: hsnuyi (羊咩咩~)   2017-12-07 19:02:00
CS開的數值方法會討論 或是數學系的數值線代 網路上有講義
作者: school4303 (某爬蟲類)   2017-12-07 19:42:00
資工的numerical analysis 中文是數值分析
作者: j0958322080 (Tidus)   2017-12-07 19:47:00
我有修物理系的沒教到,比較注重解微分方程
作者: caras   2017-12-07 20:21:00
讀數值方法 Numerical Method 會講這個或是把你的程式貼出來讓大家吐槽
作者: LPH66 (-6.2598534e+18f)   2017-12-07 20:26:00
你應該聽過每次 pivot 時找絕對值最大的列 pivot這就是為了數值穩定度的考慮的選擇
作者: j0958322080 (Tidus)   2017-12-07 22:12:00
樓上我沒聽過耶,可是如果數值過大也是誤差會很大吧
作者: Lipraxde (Lipraxde)   2017-12-07 23:15:00
挑大的出來當pivot不會讓你越算數字越大吧?
作者: LPH66 (-6.2598534e+18f)   2017-12-07 23:29:00
我以前貼過一個小例子在 #1EnRlkgw (Prob_Solve)
作者: j0958322080 (Tidus)   2017-12-08 09:49:00
那這樣還要在裡面加個氣泡排序法?
作者: Lipraxde (Lipraxde)   2017-12-08 09:57:00
挑最大做,順便把順序記下來,應該是可以不用排序吧?
作者: j0958322080 (Tidus)   2017-12-08 11:32:00
因為目前只有想到照順序做,如果不照順序還沒想到
作者: Lipraxde (Lipraxde)   2017-12-08 12:39:00
那你把大的那行跟你準備要做的那行交換不就好了
作者: j0958322080 (Tidus)   2017-12-08 13:17:00
是說如果用LU分解來求反矩陣可以避開上述的問題嗎
作者: LPH66 (-6.2598534e+18f)   2017-12-08 13:44:00
LU/LUP 分解跟高斯消去法其實是一體兩面可以說 LU/LUP 就是把高斯消去法給紀錄下來的分解
作者: j0958322080 (Tidus)   2017-12-08 13:57:00
但是這兩種方法在計算反矩陣我看資料好像都是分開講然後會說LU分解是算反矩陣的首選
作者: Lipraxde (Lipraxde)   2017-12-08 14:01:00
想要0誤差可以用分數做啊
作者: DJWS (...)   2017-12-09 12:33:00
什麼資料這樣寫 可以提供一下嗎?
作者: j0958322080 (Tidus)   2017-12-09 12:42:00
就是單純要求反矩陣,矩陣數太大誤差就明顯了
作者: hsnuyi (羊咩咩~)   2017-12-09 16:10:00
... 出現一堆上古神獸...
作者: rex0707 (我就是我)   2017-12-13 01:08:00
partial-pivoting

Links booklink

Contact Us: admin [ a t ] ucptt.com