数组实现矩阵相乘的问题

我做了一个有异常,哪位帮忙写个比较简单的。
设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols,矩阵数据数组double data[][],构造方法Matrix()、Matrix(int rows,int cols)、Matrix(int rows,int cols,double data[][]),获取某元素值的方法getData(int row,int col),设置某元素值的方法setData(int row,int col,double value),计算两个矩阵的乘积的方法multiply(Matrix m)以及toString()等内容。
编写MatrixTest类。在该类中通过键盘输入方式确定所要创建的两个矩阵的行列数,根据行列数随机生成数据或键盘输入,并通过setData方法生成矩阵的内容。
[b]问题补充:[/b]
我做了一个有异常,哪位帮忙写个比较简单的。
设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols,矩阵数据数组double data[][],构造方法Matrix()、Matrix(int rows,int cols)、Matrix(int rows,int cols,double data[][]),获取某元素值的方法getData(int row,int col),设置某元素值的方法setData(int row,int col,double value),计算两个矩阵的乘积的方法multiply(Matrix m)以及toString()等内容。
编写MatrixTest类。在该类中通过键盘输入方式确定所要创建的两个矩阵的行列数,根据行列数随机生成数据或键盘输入,并通过setData方法生成矩阵的内容。

感谢cats_tiger的回复,我用构造方法传参数没有问题,用setdata就出数组越界的异常
[b]问题补充:[/b]
我做了一个有异常,哪位帮忙写个比较简单的。
设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols,矩阵数据数组double data[][],构造方法Matrix()、Matrix(int rows,int cols)、Matrix(int rows,int cols,double data[][]),获取某元素值的方法getData(int row,int col),设置某元素值的方法setData(int row,int col,double value),计算两个矩阵的乘积的方法multiply(Matrix m)以及toString()等内容。
编写MatrixTest类。在该类中通过键盘输入方式确定所要创建的两个矩阵的行列数,根据行列数随机生成数据或键盘输入,并通过setData方法生成矩阵的内容。
问题补充:
我做了一个有异常,哪位帮忙写个比较简单的。
设计和编写代表矩阵的Matrix类。该类包括矩阵行列数变量int rows和int cols,矩阵数据数组double data[][],构造方法Matrix()、Matrix(int rows,int cols)、Matrix(int rows,int cols,double data[][]),获取某元素值的方法getData(int row,int col),设置某元素值的方法setData(int row,int col,double value),计算两个矩阵的乘积的方法multiply(Matrix m)以及toString()等内容。
编写MatrixTest类。在该类中通过键盘输入方式确定所要创建的两个矩阵的行列数,根据行列数随机生成数据或键盘输入,并通过setData方法生成矩阵的内容。

感谢cats_tiger的回复,我用构造方法传参数没有问题,用setdata就出数组越界的异常
cats_tiger能帮忙写个吗
谢谢了
说是实在没办法解决

oo

6个回答

这个关键是求逆矩阵,你在google查“高斯主选消元法”,能够找到C的代码,可以很轻松的改成java的,我以前做过一个,如果不行明天给你找找。

setData的时候需要同步cols和rows,没有代码只能瞎猜了。

既然构造函数没有问题,说明算法正确,也就好办了:
1.把setData方法删除,只允许用构造函数,偷懒的办法
2.把构造函数执行之后的状态记录下来(就是类的属性的当前值),然后和setData之后的比较一下,需要debug。

等等...
矩阵乘!不是解线性方程?晕了,sorry。
矩阵乘如果让键盘输入,是容易出错,这通常不是程序的问题,而是键盘输入错了,因为乘法要求乘数和被乘数的行列交叉相同,这个键盘输入容易出错。至于算法,这个比逆矩阵简单多了。
你可以在setData中检查输入数组的维数,确保附和乘法的要求。
实际应用中很少有键盘输入的要求,所以删除set/getData是应该的,这样可以确保实例是只读的。

明天给你找我以前写的吧,除了乘法,还包括逆矩阵和矢量计算。今天我连编程环境都没有。
其实算法很简单的,一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。
计算前需要验证乘数、被乘数、乘积数组的维数是否附和要求。

矩阵乘法的两个重要性质:一,矩阵乘法不满足交换律;二,矩阵乘法满足结合律。
这是google出来的,呵呵

[b]计算前需要验证乘数、被乘数、乘积数组的维数是否附和要求。[/b]
这个应该是你程序的问题所在吧?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问