作者j0958322080 (Tidus)
看板C_and_CPP
標題[問題] 高斯消去求反矩陣
時間Thu Dec 7 18:34:32 2017
開發平台(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
例如上述矩陣,利用高斯消去從左邊往下消,再從右邊往上消
第一行跟第二行因做太多次計算所以數值會差很多,
但是第五行跟第四行誤差就會很小,
有什麼比較好的方法可以減少誤差呢??
--
!!!!!!!!!!!!!簽名檔破530000點擊率啦!!!!!!!!!!!!!!!
Fw: [問卦] 電影:決勝21點的機率問題
https://goo.gl/2BpbB7 #1MfN3FgZ (joke)
1F:→ yeebon: chx64的1/2悖論真的很經典呢07/22 16:41
!!!!!!!!!!!!!!簽名檔破530000點擊率啦!!!!!!!!!!!!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.8.169.63
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1512642876.A.BCA.html
2F:→ hsnuyi: CS開的數值方法會討論 或是數學系的數值線代 網路上有講義 12/07 19:02
3F:→ school4303: 資工的numerical analysis 中文是數值分析 12/07 19:42
4F:→ j0958322080: 我有修物理系的沒教到,比較注重解微分方程 12/07 19:47
5F:→ caras: 讀數值方法 Numerical Method 會講這個 12/07 20:21
6F:→ caras: 或是把你的程式貼出來讓大家吐槽 12/07 20:22
7F:推 LPH66: 你應該聽過每次 pivot 時找絕對值最大的列 pivot 12/07 20:26
8F:→ LPH66: 這就是為了數值穩定度的考慮的選擇 12/07 20:26
9F:→ j0958322080: 樓上我沒聽過耶,可是如果數值過大也是誤差會很大吧 12/07 22:12
10F:推 Lipraxde: 挑大的出來當pivot不會讓你越算數字越大吧? 12/07 23:15
12F:→ j0958322080: 那這樣還要在裡面加個氣泡排序法? 12/08 09:49
13F:→ Lipraxde: 挑最大做,順便把順序記下來,應該是可以不用排序吧? 12/08 09:57
14F:→ j0958322080: 因為目前只有想到照順序做,如果不照順序還沒想到 12/08 11:32
15F:→ Lipraxde: 那你把大的那行跟你準備要做的那行交換不就好了 12/08 12:39
16F:→ j0958322080: 是說如果用LU分解來求反矩陣可以避開上述的問題嗎 12/08 13:17
17F:推 LPH66: LU/LUP 分解跟高斯消去法其實是一體兩面 12/08 13:44
18F:→ LPH66: 可以說 LU/LUP 就是把高斯消去法給紀錄下來的分解 12/08 13:44
19F:→ j0958322080: 但是這兩種方法在計算反矩陣我看資料好像都是分開講 12/08 13:57
20F:→ j0958322080: 然後會說LU分解是算反矩陣的首選 12/08 13:58
21F:→ Lipraxde: 想要0誤差可以用分數做啊 12/08 14:01
22F:推 DJWS: 什麼資料這樣寫 可以提供一下嗎? 12/09 12:33
23F:→ j0958322080: 就是單純要求反矩陣,矩陣數太大誤差就明顯了 12/09 12:42
24F:→ hsnuyi: ... 出現一堆上古神獸... 12/09 16:10
25F:→ rex0707: partial-pivoting 12/13 01:08