iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Software Development

練習java30天系列 第 11

Day12 練習java-矩陣乘法

  • 分享至 

  • xImage
  •  

昨天已經挑戰完矩陣的加和減了,今天來挑戰稍難一點的矩陣乘法,再開始之前先來簡單介紹矩陣的乘法吧~~
對於矩陣來說跟一般數字的四則運算有著很大的差異,就是加或減與乘跟除的不同,矩陣的乘除比較複雜,除法是要乘上反方陣,這個內容還蠻難的,我們先來討論乘法,但是要小心兩個矩陣相乘並不是隨便大小都能夠相乘而是要滿足
MXN X NXM = MXM (M:代表列的數目 N:代表行的數目) 這個規則,因為矩陣是有兩個維度並不能只用一個維度來判斷是否能相乘。乘法簡單來說就是第一個矩陣的列乘上第二個矩陣的行,依照這個規則我寫出以下的程式

https://ithelp.ithome.com.tw/upload/images/20200928/20130684qf1jM8ZCYX.png
這是我一開始寫的感覺想法應該是對的但怎麼答案怪怪的
https://ithelp.ithome.com.tw/upload/images/20200928/201306848nl4WV5Tsi.png

基本上看到第一個元素就感覺有問題了,因此為了想清楚這題我把所有元素列出來了https://ithelp.ithome.com.tw/upload/images/20200928/20130684AnTLraROlD.jpg
基本上就是一個元素一個個乘再加起來,至於a[0][0],a[0][1],a[1][0].....都是代表在二維陣列當中的位置
索引值都是從0開始,前面的數字代表列後面代表行,以a[0][1]為例,代表的是第一列第二行;a[1][0]代表的是第二列第一行依此類推。
從上面的圖片能知道一件事,二個迴圈不夠,為什麼呢?
因為兩個迴圈頂多只能從二個二維陣列當中找出值來做相乘,但是矩陣乘法是要將相乘完的結果再做相加,因此需要用到第三個迴圈

https://ithelp.ithome.com.tw/upload/images/20200928/20130684j5GXJ4mXMp.png

看起來很複雜對吧,很少會用到三層迴圈,因此我們必須來好好談談這三個迴圈分別代表什麼
第一層代表的是找a的列;第二層代表的是找b的行;第三層代表的是需要加幾次
從我手寫的那張可以發現需要加3次,而3又是從而來的呢?不就是a的行或是b的列數嗎發現了嗎,兩個數目必須相同否則無法做矩陣相乘,因為要滿足MXN X NXM = MXM 這個規則
因此迴圈裡的內容就簡單啦 a[i][k]*b[k][j]是不是就能寫出來了呢,最後只要把它們加起來存入result[i][j]484就搞定了!!!!

https://ithelp.ithome.com.tw/upload/images/20200928/20130684edPBDCg3dF.png


上一篇
Day11 練習java-矩陣加減法
下一篇
Day13 練習java-氣泡排序法
系列文
練習java30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言