[問題] 高斯喬登消去法

看板C_and_CPP (C/C++)作者 (Yel.)時間15年前 (2010/11/29 19:18), 編輯推噓2(2016)
留言18則, 5人參與, 最新討論串1/1
我寫了個高斯喬登消去法的C code 但是跑出來的反矩陣大部分是0還有-0 希望得到的正確結果:算出正確的反矩陣 程式跑出來的錯誤結果:很多元素值是0 開發平台:C 有問題的code: int x, y, k; for (k = 0; k < N; k++) R[k][k] = 1; for (k = 0; k < N; k++) { for (x = 0; x < N; x++) { if (x <= k) continue; for (y = 0; y < N; y++) { M[x][y] -= (M[x][k] / M[k][k]) * M[k][y]; R[x][y] -= (M[x][k] / M[k][k]) * R[k][y]; } } } for (k = N - 1; k >= 0; k--) { for (x = N - 1; x >= 0; x--) { if (x >= k) continue; for (y = 0; y < N; y++) { M[x][y] -= (M[x][k] / M[k][k]) * M[k][y]; R[x][y] -= (M[x][k] / M[k][k]) * R[k][y]; } } } for (k = 0; k < N; k++) { for (y = 0; y < N; y++) { R[k][y] /= M[k][k]; } } for (x = 0; x < N; x++) { for (y = 0; y < N; y++) printf("%.f ", R[x][y]); printf("\n"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.109.89

11/29 19:35, , 1F
趁機會學一下debugger的用法吧
11/29 19:35, 1F

11/29 19:37, , 2F
不是每個矩陣都存反矩陣,先測你的測資是否存在.
11/29 19:37, 2F

11/29 19:40, , 3F

11/29 19:40, , 4F
第一個是反矩陣主程式,第二個是會用到的sub-function.
11/29 19:40, 4F

11/29 20:04, , 5F
行列式我不打算寫了...目前功力尚弱且時間已然不足0.0
11/29 20:04, 5F

11/29 20:08, , 6F
行列式不打算寫?指的是不打算寫反矩陣的意思嗎?
11/29 20:08, 6F

11/29 20:11, , 7F
不打算判斷有沒有反矩陣的意思...不是用高斯就可求出反
11/29 20:11, 7F

11/29 20:12, , 8F
矩陣嗎?(出門 半夜回)
11/29 20:12, 8F

11/29 20:15, , 9F
你誤會大了,我給的第一個網址所寫的內容就是要高斯求
11/29 20:15, 9F

11/29 20:16, , 10F
反矩陣,然而就如我跟你所說,不是所有得行列式都有反矩
11/29 20:16, 10F

11/29 20:16, , 11F
陣的存在,所以我在傳回值時才又考濾了三種情形.而你說
11/29 20:16, 11F

11/29 20:17, , 12F
你會跑出一堆零出來,所以我才先請你去算你原本測試的資
11/29 20:17, 12F

11/29 20:17, , 13F
料到底有沒有反矩陣的存在,別先假設你的測資是存在的.
11/29 20:17, 13F

11/29 23:43, , 14F
推樓上..永遠不要假設你的測資或你寫的矩陣存在反矩陣..y
11/29 23:43, 14F

11/30 02:58, , 15F
tropical大貼的網址我之前有看過了...因為我還沒學
11/30 02:58, 15F

11/30 02:59, , 16F
動態宣告,所以看不懂@@
11/30 02:59, 16F

11/30 03:07, , 17F
也許該研究一下...
11/30 03:07, 17F

11/30 11:36, , 18F
同為天涯打CODE人 淚推T.T
11/30 11:36, 18F
文章代碼(AID): #1CyumNbO (C_and_CPP)
文章代碼(AID): #1CyumNbO (C_and_CPP)