本文實(shí)例講述了Java實(shí)現(xiàn)的矩陣乘法。分享給大家供大家參考,具體如下:
思路:
矩陣乘法的前提是:前一矩陣的行數(shù) == 后一矩陣的列數(shù)(rows == cols)
在滿足前提的情況下:前一矩陣的第一行 與 第二個(gè)矩陣的第一列 逐個(gè)相乘。將乘積求和 作為 結(jié)果矩陣的第一個(gè)元素
類(lèi)推刻得到:結(jié)果矩陣的 第 [row][col] 個(gè)元素 = 前一矩陣的第 row 行 與 后一矩陣的 col列上的元素 逐一相乘 后的乘積之和
代碼及解析:
一、算法剖析:
1.設(shè)置兩個(gè)for循環(huán)用來(lái)控制結(jié)果(輸出)矩陣的 待賦值元素位置 (即 matrix[i][j] )
2.在這兩個(gè)循環(huán)環(huán)中再嵌套上一個(gè)循環(huán) 這個(gè)循環(huán)起到關(guān)鍵作用 它用來(lái)控制 前一矩陣第 i 行元素的列數(shù) 以及 后一矩陣 第 j 列的行數(shù)
二、算法代碼:
?/* * 計(jì)算兩個(gè)矩陣相乘的方法 */public Matrix mutiply(Matrix m){ Matrix result = new Matrix(this.getRows(), m.getCols()); for (int i = 0 ; i < this.getRows() ; i++ ){ for(int j = 0 ; j < m.getCols() ; j++ ){//正好為矩陣大小,保證了每個(gè)元素都被賦值 for (int num = 0 ; num < this.getCols() ; num++){ result.setData(i, j, this.getData(i, num) * m.getData(num, j)); } } } return result;}
注:具體進(jìn)行計(jì)算時(shí),由于可能出現(xiàn) 前一矩陣行數(shù) 不等于 后一矩陣列數(shù)等異常情況
需要進(jìn)行異常處理,這里為了保證算法過(guò)程的清晰性暫不加上,希望讀者在具體使用中及時(shí)添加。
源碼即測(cè)試范例:
public class MatrixTest { public static void main(String[] args) { //矩陣測(cè)試范例 //僅為輸入?yún)⒖?無(wú)實(shí)際作用 double [][]array01 = { {1, 2, 3}, {4, 5, 6} }; double [][]array02 = { {1, 4}, {2, 5}, {3, 6} }; double [][] resultMatrix = new double[array01.length][array02[0].length]; for (int i = 0 ; i < resultMatrix.length ; i++ ){ for(int j = 0 ; j < resultMatrix[0].length ; j++ ){//正好為矩陣大小,保證了每個(gè)元素都被賦值 for (int num = 0 ; num < array02.length ; num++){ resultMatrix[i][j] = resultMatrix[i][j] + array01[i][num]*array02[num][j]; } } } for (int i = 0 ; i < resultMatrix.length ; i++ ){ for(int j = 0 ; j < resultMatrix[0].length ; j++ ){//正好為矩陣大小,保證了每個(gè)元素都被賦值 System.err.print(resultMatrix[i][j] + "/t"); } System.out.println(); } }}
輸出范例:
9.0 18.0
18.0 36.0
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選