[問題] 矩陣!!限定只能用兩個矩陣...

看板C_and_CPP作者 (~輝~)時間16年前 (2009/11/10 23:14), 編輯推噓8(8022)
留言30則, 8人參與, 最新討論串1/4 (看更多)
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int matA[3][3] = { {1,0,3}, {0,1,4}, {5,0,1} }; int matB[3][3] = { {1,0,0}, {0,1,0}, {0,0,1} }; for(int i=1; i<=3 ;i++){ //執行for迴圈用於控制i列 for(int j=1; j<=3 ;j++){ //執行for迴圈用於控制j行 matA[i][j]=matA[i][j]*matB[j][i]; //矩陣相乘 cout<<matA[i][j]; //印出值 } cout<<endl; } system("PAUSE"); return EXIT_SUCCESS; } -- 題目是要求用兩個矩陣A.B 做出A=A*B (把A的矩陣替換成A*B) 我寫的程式... 跑出來都是錯的... 有請版大指點@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.221.28

11/10 23:17, , 1F
matA[0][0]還要用在後面幾輪的計算時就已經被你第一輪的
11/10 23:17, 1F

11/10 23:17, , 2F
計算改掉了, 這樣寫鐵定是錯的啊. 話說, 就只能有AB兩個
11/10 23:17, 2F

11/10 23:18, , 3F
二維陣列嗎??這樣要做A=A*B有點麻煩說, 不然就開九個一
11/10 23:18, 3F

11/10 23:18, , 4F
般變數存每一輪的結果, 再統一寫回matA[][]去吧....XD
11/10 23:18, 4F

11/10 23:22, , 5F
我有想過~~你說的建議!!可是這樣就等同於開三個矩陣...@@
11/10 23:22, 5F

11/10 23:22, , 6F
五樓的你說說 這個問題有沒有可能不用額外記憶體就辦到
11/10 23:22, 6F

11/10 23:26, , 7F
...痾...我也很想知道= =__這是老師出的題目...悶ˊˋ
11/10 23:26, 7F

11/10 23:28, , 8F
矩陣一定是這兩個嗎?? 是的話B是I啊, 直接回傳A就好XDDD
11/10 23:28, 8F

11/10 23:28, , 9F
對了, 我注意到一個問題, 你兩個array都用爆了....
11/10 23:28, 9F

11/10 23:29, , 10F
mat[3][3], 只有[0~2][0~2]可以用....~_~
11/10 23:29, 10F

11/10 23:32, , 11F
不是I...I是因為我方便檢查是否錯誤....
11/10 23:32, 11F

11/10 23:35, , 12F
用 , operator一次把九個全寫出來行不行....XDDD
11/10 23:35, 12F

11/11 00:54, , 13F
matA[i][j]=matA[i][j]*matB[j][i];<==最後為什麼是[j][i]
11/11 00:54, 13F

11/11 01:10, , 14F
這題不用做吧 A=A*B iff. B==I 得證
11/11 01:10, 14F

11/11 01:22, , 15F
他是要將AXB結果存在A吧
11/11 01:22, 15F

11/11 01:51, , 16F
回rnc: 矩陣的乘法本來就這樣啊, 雖然說我搞不太清楚這
11/11 01:51, 16F

11/11 01:51, , 17F
樣寫column major / row major的部份有沒有寫對....Orz
11/11 01:51, 17F

11/11 01:52, , 18F
等等~~好像真的不對, 只用雙層迴圈這樣寫不是矩陣乘法,
11/11 01:52, 18F

11/11 01:53, , 19F
A[0][0]=A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*
11/11 01:53, 19F

11/11 01:54, , 20F
B[2][0] 才對吧; 當然, major與暫存空間的問題請另外克
11/11 01:54, 20F

11/11 01:54, , 21F
服....Orz
11/11 01:54, 21F

11/11 09:46, , 22F
他的意思應該是題目不準另外開矩陣暫存的話有沒有辦法做
11/11 09:46, 22F

11/11 09:47, , 23F
吧 有點類似 swap(a,b) 不能用tmp暫存這樣
11/11 09:47, 23F

11/11 10:29, , 24F
for i = 0~2
11/11 10:29, 24F

11/11 10:29, , 25F
for j = 0~2
11/11 10:29, 25F

11/11 10:30, , 26F
for k = 0~2
11/11 10:30, 26F

11/11 10:30, , 27F
A[i][k] * B[k][j] 應該是這樣乘吧
11/11 10:30, 27F

11/11 10:31, , 28F
不過要存到哪....
11/11 10:31, 28F

11/11 10:32, , 29F
想到了XOR 晚點寫看看
11/11 10:32, 29F

11/11 13:04, , 30F
寫不出來ˊˋ..
11/11 13:04, 30F
文章代碼(AID): #1A-ODOqy (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1A-ODOqy (C_and_CPP)