java二维数组实现矩阵相乘的问题

java二维数组实现矩阵相乘的问题,第1张

public class Matrix

{

private int value[][]; //存储矩阵元素的二维数组

public Matrix(int m, int n) //构造m行n列的空矩阵

{

thisvalue=new int[m][n];

}

public Matrix(int n) //构造n行n列的空矩阵

{

this(n,n);

}

public Matrix()

{

this(10,10);

}

public Matrix(int mat[][]) //构造矩阵,由数组mat提供矩阵元素

{

this(matlength,mat[0]length);

for (int i=0; i<matlength; i++)

for (int j=0; j<mat[i]length; j++)

thisvalue[i][j] = mat[i][j];

}

public int get(int i, int j) //获得矩阵第i行第j列的元素,O(1)

{

return value[i][j];

}

public void set(int i, int j, int k) //设置矩阵第i行第j列的元素,O(1)

{

value[i][j]=k;

}

public String toString() //行主序遍历,访问矩阵全部元素

{

String str="";

for (int i=0; i<valuelength; i++)

{

for (int j=0; j<value[i]length; j++)

str += " "+value[i][j];

str += "\n";

}

return str;

}

public void add(Matrix b) //this和b两个矩阵相加,改变当前矩阵

{

for (int i=0; i<thisvaluelength; i++)

for (int j=0; j<thisvalue[i]length; j++)

thisvalue[i][j] += bvalue[i][j];

}

public void minus(Matrix b) //this和b两个矩阵相减,改变当前矩阵

{

for (int i=0; i<thisvaluelength; i++)

for (int j=0; j<thisvalue[i]length; j++)

thisvalue[i][j] -= bvalue[i][j];

}

public void multi(Matrix b)//当前矩阵=当前矩阵b

{

if(thisvalue[0]length != bvaluelength )

{

Systemoutprintln("这两个矩阵不能相乘");

return ;}

Matrix temp=new Matrix(valuelength,bvalue[0]length);

for(int i=0;i<valuelength;i++)

for(int j=0;j<bvalue[0]length;j++)

{

tempvalue[i][j]=0;

for(int k=0;k<value[0]length;k++)

tempvalue[i][j] +=value[i][k]bvalue[k][j];

}

thisvalue=tempvalue;

}

public Matrix transpose() //返回转置矩阵

{

Matrix trans = new Matrix(value[0]length, valuelength);

for (int i=0; i<thisvaluelength; i++)

for (int j=0; j<thisvalue[i]length; j++)

transvalue[j][i]=thisvalue[i][j];

return trans;

}

}

class Matrix_ex

{

public static void main(String args[])

{

int m1[][]={{1,2,3},

{4,5,6}};

Matrix a=new Matrix(m1);

int m2[][]={{1,2},

{3,4},

{5,6}

};

Matrix b=new Matrix(m2);

Systemoutprint("Matrix a:\n"+atoString());

Systemoutprint("Matrix b:\n"+btoString());

//aadd(b);

amulti(b);

Systemoutprint("Matrix ab:\n"+atoString());

// Systemoutprintln("a的转置矩阵:\n"+atranspose()toString());

}

}

你把结果放到a里了

你的代码 a[i][j] += (a[i][k] c[k][j]);

如果a是2行4列,b是4行8列,结果应该是2行8列

a[0][7]就不存在,下标超界

应该先构造出一个结果矩阵,算完再赋值给a

//每一行(Row)数据用空格隔开,结束后回车 import javaio; import javautil; public class Arrtest{ public static void main(String args[]){ try{ Systemoutprint("set the row of the arr:\n"); BufferedReader in=new BufferedReader( new InputStreamReader(Systemin)); String row=inreadLine(); Systemoutprint("set the line of the arr:\n"); BufferedReader in2=new BufferedReader( new InputStreamReader(Systemin)); String line=in2readLine(); int R=IntegerparseInt(row); int L=IntegerparseInt(line); Arr arr=new Arr(); Systemoutprint("Great the first arr:\n"); double arr1[][]=arrgreatArr(R,L); Systemoutprint("Great the second arr:\n"); double arr2[][]=arrgreatArr(R,L); arrshowArr(arraddArr(arr1,arr2,R,L),R,L); }catch(Exception e){egetMessage(); } } } class Arr { double[][] greatArr(int row,int line){ double arr[][]=new double[row][line]; for(int i=0;i<row;i++){ try{ Systemoutprint("input the row("+(i+1)+") numbers:\n"); BufferedReader in=new BufferedReader( new InputStreamReader(Systemin)); String s=inreadLine(); StringTokenizer s_part=new StringTokenizer(s," "); for(int j=0;j<line;j++){ arr[i][j]=DoubleparseDouble(s_partnextToken()); } }catch(Exception e){egetMessage(); } } return arr; } double[][] addArr(double[][] arr1,double[][] arr2,int row,int line){ for(int i=0;i<row;i++){ for(int j=0;j<line;j++){ arr1[i][j]=arr1[i][j]+arr2[i][j]; } } return arr1; } void showArr(double[][] arr,int row,int line){ Systemoutprint("the result:\r\n"); for(int i=0;i<row;i++){ for(int j=0;j<line;j++){ Systemoutprint(arr[i][j]+" "); } Systemoutprint("\r\n"); } } }

这应该是线性数学的矩阵

逻辑思路是:取A矩阵的每一行的各个项去乘以B矩阵每个列的各个项

为了测试,我现在假设A矩阵是43, B矩阵是32, 你要做的乘 *** 作是432=24次

import javautil;

import javalang;

import javaio;

/ Name of the class has to be "Main" only if the class is public /

class Ideone

{

public static void main (String[] args) throws javalangException

{

int[][]A=new int[][]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}};

int[][]B=new int[][]{{1,2},{3,4},{5,6}};

int len_A=A[0]length;//a每行元素数,这里是3

int col_A=Alength;//a每列元素数,这里是4

int len_B=B[0]length;//b每行元素数,这里是2

int col_B=Blength;//b每列元素数,这里是3

int len_a=0;

int col_a=0;

int len_b=0;

int col_b=0;

int sum=0;

while(len_b<len_B)//使B的下一列被A乘

{

col_a=0;

while(col_a<col_A)//使A可以移动至下一行

{

len_a=0;

col_b=0;

while(len_a<len_A)//使A的当前行乘以B的当前列

{

sum+=A[col_a][len_a]B[col_b][len_b];

len_a++;

col_b++;

}

col_a++;

}

len_b++;

}

Systemoutprintln(sum);

}

}

以上就是关于java二维数组实现矩阵相乘的问题全部的内容,包括:java二维数组实现矩阵相乘的问题、谁会Java编程啊,要求随即产生两个矩阵,并实现两个矩阵的加法和乘法、用java语言做矩阵运算,输入一个m×n的矩阵,再输入一个n×o的矩阵,求其乘积。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10115556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存