矩阵相乘怎么算java_java计算两个n阶矩阵相乘

这篇博客展示了如何使用Java编程实现两个N阶矩阵相乘的算法,包括矩阵的乘法操作和打印矩阵的方法。博主在代码中还包含了矩阵行列互换的功能,但在测试过程中发现计算结果并未按照行列互换后的矩阵进行,可能存在逻辑错误。
摘要由CSDN通过智能技术生成

自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:

package com.shujujiegou01;

public class JuZhenChengFa {

// 计算两个N阶矩阵相乘

public static void squareMult(int[][] a, int[][] b, int[][] c, int n) {

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

c[i][j] = 0;

for (int k = 0; k < n; k++) {

c[i][j] += a[i][k] * b[k][j];

}

}

}

}

// 打印矩阵

public static void printArray(int a[][]) {

for (int k = 0; k < a.length; k++) {

for (int l = 0; l < a[k].length; l++) {

// 打印每一个元素及其所在坐标位置

System.out.print(a[k][l] + "-" + "(" + k + "," + l + ")" + ",");

}

System.out.println();

}

}

// 矩阵行列互换

public static void swapRowCloumn(int a[][]) {

int num = a.length;

//是为了方便自己调试,才这么定义的

int e[][] = new int[num][num];

for (int k = 0; k < num; k++) {

for (int l = 0, x = a[k].length; l < x; l++) {

// 打印每一个元素及其所在坐标位置

e[k][l] = a[l][k];

System.out.print(e[k][l] + "-" + "(" + k + "," + l + ")" + ",");

}

System.out.println();

}

}

// 主函数测试

public static void main(String[] args) {

// TODO Auto-generated method stub

int a[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

int b[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

int c[][] = new int[3][3];

System.out.println("矩阵A:");

printArray(a);

System.out.println("互换行和列后的A矩阵:");

swapRowCloumn(a);

// printArray(a);

System.out.println("矩阵B:");

printArray(b);

System.out.println("互换行和列后的A矩阵:");

swapRowCloumn(b);

// printArray(b);

// 调用

squareMult(a, b, c, 3);

// 打印

System.out.println("矩阵C:");

printArray(c);

// 调换过后计算的结果

System.out.println("调换行和列的矩阵C:");

swapRowCloumn(c);

}

}

附上运行结果截图:

0ed2d434a2728fd971f57e4101516903ad1.jpg

标红的部分,个人感觉有问题,调用了行列互换方法了,按理来说应该计算c矩阵是按照行列互换后的A矩阵和B矩阵来计算的,应该直接得到红框的答案;但是计算出来发现还是根据旧的A,B矩阵的乘积来计算的。感觉哪里有问题,但是说不上来!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值