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的矩阵,求其乘积。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)