[問題] 矩陣乘法

看板C_and_CPP作者 (M7)時間14年前 (2010/05/11 02:13), 編輯推噓4(4015)
留言19則, 6人參與, 最新討論串1/1
我又來問問題了,這次是矩陣乘法>"< code: http://paste.plurk.com/show/250403/ 這次指定要做A[5][4] * B[4][5] = C[5][5] 爬了版上一些文,然後做了一些code的修改 可以順利的跑出來結果了,但是卻計算錯誤>"< 我測試的是這兩個矩陣的相乘: A[5][4] = {{4, 3, 2, 1}, {3, 4, 1, 2}. {2, 3, 4, 1}, {1, 2, 3, 4}, {4, 1, 2, 3}} B[4][5] = {{5, 4, 3, 2, 1}, {4, 5, 1, 2, 3}, {3, 4, 5, 1, 2}, {2, 3, 4, 5, 1}} 正確的C[5][5] = {{40, 42, 29, 21, 18}, {38, 42, 26, 25, 19}, {36, 42, 33, 19, 20}, {30, 38, 36, 29, 17}, {36, 38, 35, 27, 14}} 可是我跑出來的是C[5][5] = {{2, 3, 4, 5, 1}, {4, 6, 8, 10, 2}, {2, 3, 4, 5, 1}, {8, 12, 16, 20, 4}, {6, 9, 12, 15, 3}} 找了很久還是不知道是哪裡出錯..... 麻煩請各位前輩解答>"< -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.219.129

05/11 02:23, , 1F
你得把每個 A[i][k]*B[k][j] 全部「加」起來啊 XD
05/11 02:23, 1F

05/11 02:56, , 3F
↑ 找 MMULT function.
05/11 02:56, 3F

05/11 03:05, , 4F
補充:以上code, a:m*n, b:n*p
05/11 03:05, 4F

05/11 09:58, , 5F
可是我改成C[i][j]+之後,數字變得莫名其妙的大耶@@
05/11 09:58, 5F

05/11 10:04, , 6F
C[i][j]在 += 之前有記得init成0嗎??
05/11 10:04, 6F

05/11 12:11, , 7F
有耶
05/11 12:11, 7F

05/11 12:14, , 8F
C[i][j]=0; 這行怎麼沒看到和他搭配的loop?
05/11 12:14, 8F

05/11 12:27, , 9F
我是先宣告他為0然後才開始用for @@
05/11 12:27, 9F

05/11 12:28, , 10F
看你原來的code, 你在for迴圈的外面寫 C[i][j]=0; 不但
05/11 12:28, 10F

05/11 12:29, , 11F
是錯的沒有用, 還可能存取到不正確的記憶體位址....
05/11 12:29, 11F

05/11 12:29, , 12F
想想看你 C[i][j]=0; 那行當時的i,j是多少?? 這樣整個
05/11 12:29, 12F

05/11 12:29, , 13F
C[][]會init成0到嗎:)
05/11 12:29, 13F

05/11 12:38, , 14F
真的耶!! 我又錯了愚蠢的地方了= =
05/11 12:38, 14F

05/11 12:40, , 15F
不過我改了之後還是跑不出來正確的那個矩陣....
05/11 12:40, 15F

05/11 12:41, , 16F
跟我scanf有關嗎? 因為每個數字之間會打空格
05/11 12:41, 16F

05/11 12:41, , 17F
會不會因為這樣所以抓到不對的數字@@
05/11 12:41, 17F

05/11 12:45, , 18F
05/11 12:45, 18F

05/11 12:49, , 19F
耶解決了:D 謝謝樓上各位的指教!!!
05/11 12:49, 19F
文章代碼(AID): #1Bw4pbMd (C_and_CPP)