「java矩阵相乘」java矩阵相乘算法

博主:adminadmin 2023-03-17 01:29:11 379

今天给各位分享java矩阵相乘的知识,其中也会对java矩阵相乘算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 求矩阵乘法及行列式的值

/**

 * 矩阵乘法

 * @param a

 * @param b

 * @return

 */

     public static double[][] mulMatrix(double[][] a,double[][] b){

      double[][] c=new double[a.length][b[0].length];

      //相乘的两个行列式需要满足,第一个行列式的列于第二个行列式的行相等

      if(a[0].length!=b.length){

      System.out.println("Wrong parameters.");

      return c;

      }

      //若A为mXn矩阵,B为nXp矩阵,返回一个mXp的矩阵

      for (int i = 0; i  c.length; i++) {

for (int j = 0; j  c[0].length; j++) {

               for (int j2 = 0; j2  a[0].length; j2++) {

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

}

}

}

      return c;

     }

/**

 * 计算行列式的值

 * @param a

 * @return

 */

    static double determinant(double[][] a){

        double result2 = 0;

        if(a.length2){

         //每次选择第一行展开

            for(int i=0;ia[0].length;i++){

                //系数符号

                double f=Math.pow(-1,i);

                //求余子式

                double[][] yuzs=new double[a.length-1][a[0].length-1];

                for (int j = 0; j  yuzs.length; j++) {

for (int j2 = 0; j2  yuzs[0].length; j2++) {

//去掉第一行,第i列之后的行列式即为余子式

if(j2i){

yuzs[j][j2]=a[j+1][j2];

}else {

yuzs[j][j2]=a[j+1][j2+1];

}

}

                //行列式的拉普拉斯展开式,递归计算

                result2+=a[0][i]*determinant(yuzs)*f;

            }

        }

        else{

         //两行两列的行列式使用公式

            if(a.length==2){

                result2=a[0][0]*a[1][1]-a[0][1]*a[1][0];

            }

            //单行行列式的值即为本身

            else{

                result2=a[0][0];

            }

        }

        return result2;

    }

转自

java编写程序实现两个矩阵相乘

private Matrix multiply(Matrix mat1, Matrix mat2) {

Matrix mat=new Matrix();

// TODO 自动生成方法存根

if(mat1.col==mat2.row){

double sum;

mat.data=new double[mat1.row][mat2.col];

for (int i = 0; i mat1.row; ++i) {

for (int j = 0; j mat2.col; ++j) {

sum = 0;

for (int k = 0; k mat1.col; ++k) {

sum += mat1.data[i][k] * mat2.data[k][j];

}

mat.data[i][j] = sum;

}

}

return mat;

}

return null;

}

java 矩阵相乘

有两个错误:

一、Matrix 类的构造方法写的有问题:改成这样:

public Matrix(int m, int n) {

this.m = m;

this.n = n;

this.ma = new int[m][n];

}

二、如果你发现输入和输出的不一致的话,把Matrix类的print()方法:

循环打印的那行代码改成 System.out.print(ma[i][j] + " ");

也就是单引号改成双引号 ,单引号空格 如果和数字相加回转成int,值为:32

java矩阵乘法

import java.util.Arrays;

public class Test {

static int[][] matrix1;

static int[][] matrix2;

public static void main(String[] args) {

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

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

if(matrix1.length!=matrix2[0].length){//若无法相乘则退出

System.out.println("ivalid input");

System.exit(0);

}

int[][] r = new int[matrix1[0].length][matrix2.length];

for(int i=0;ir.length;++i){

for(int j=0;jr[i].length;++j){//每一个r[i][j]的运算:

r[i][j]=0;//初始化

for(int k=0;kmatrix2.length;++k)

r[i][j]+=matrix1[i][k]*matrix2[k][j];

}

}

//输出结果

for(int i=0;ir.length;++i)

System.out.println(Arrays.toString(r[i]));

}

}

用Java编程实现矩阵连续相乘问题

代码如下:

//按照步骤查找矩阵相乘结果,i=1表示第一次结果,i=2表示第二次结果,以此类推,如果i不合法则返回null

private static int[][] getMatrixsMultiByStep(int i, int[][]... matrixs) {

MapString, int[][] result = getMatrixsMultiResult(matrixs);

if(i=0 || iresult.size()) {

return null;

}

return result.get("" + i);

}

//对个矩阵相乘,临时结果和最终结果保存在Map中

private static MapString, int[][] getMatrixsMultiResult(int[][]... matrixs) {

MapString, int[][] result = new HashMapString, int[][]();

int[][] param = matrixs[0];

for(int i=1; imatrixs.length; i++) {

int[][] matrix = matrixs[i];

param = getMatrixMultiResult(param, matrix);

if(param == null) {

return null;

}

result.put("" + i, param);

}

return result;

}

//两个矩阵相乘,结果为一个矩阵,返回值为空表示两个矩阵不能相乘

private static int[][] getMatrixMultiResult(int[][] matrix1, int[][] matrix2) {

if(matrix2.length = 0) {

return matrix1;

}

if(matrix1.length=0 || matrix1[0].length!=matrix2.length) {

return null;

}

int[][] result = new int[matrix1.length][matrix2[0].length];

for(int i=0; imatrix1.length; i++) {

for(int j=0; jmatrix2[0].length; j++) {

result[i][j] = 0;

for(int k=0; kmatrix1[0].length; k++) {

result[i][j] += matrix1[i][k]*matrix2[k][j];

}

}

}

return result;

}

测试程序:

public static void main(String[] args) {

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

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

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

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

int[][] value = getMatrixsMultiByStep(2, p1, p2, p3, p4);

if(value != null) {

for(int i=0; ivalue.length; i++) {

for(int j=0; jvalue[0].length; j++) {

System.out.print(value[i][j] + " ");

}

System.out.println();

}

} else {

System.out.println("矩阵无法相乘!");

}

}

输出结果:

218 293 368

412 553 694

509 683 857

PS:JDK要5.0以上,二维数组模拟矩阵,兼容普通矩阵相乘哦

用java怎么写矩阵乘法?

import java.util.Scanner; 

public class Matrix { 

public double[][] create() { 

Scanner sc = new Scanner(System.in) ; 

System.out.print("请输入矩阵的行高:"); 

int a = sc.nextInt() ; 

System.out.print("请输入矩阵的列宽:"); 

int b = sc.nextInt() ; 

double[][] x = new double[a][b] ; 

for(int i=0;ilt;a;i++){ 

for(int j=0;jlt;b;j++){ 

System.out.print("请输入元素x["+i+"]["+j+"]的值:" ); 

x[i][j] = sc.nextDouble() ; 

return x ; 

public double[][] multiply(double[][] x,double[][] y){ 

double[][] result = null ; 

int a = x[0].length ; 

int b = y.length ; 

if(a != b){ 

System.out.println("输入的维数不匹配,不能进行运算"); 

}else{ 

int c = x.length ; 

int d = y[0].length ; 

result = new double[c][d] ; 

for(int i=0;ilt;c;i++){ 

for(int j=0;jlt;d;j++){ 

double sum = 0 ; 

for(int k=0;klt;a;k++){ 

sum += x[i][k]*y[k][j] ; 

result[i][j] = sum ; 

return result ; 

public void print(double[][] x){ 

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

for(int i=0;ilt;x.length;i++){ 

for(int j=0;jlt;x[i].length;j++){ 

System.out.print(x[i][j] + " ") ; 

System.out.println(); 

测试类: 

public class TestMatrix { 

public static void main(String[] args) { 

Matrix m = new Matrix() ; 

//double[][] x = {{1,2},{3,2}} ; 

//double[][] y = {{1,2,1},{2,3,3}} ; 

System.out.println("创建第一个数组:") ; 

double[][] x = m.create() ; 

m.print(x) ; //用来验证输入的是否和你一样的,没啥作用 

System.out.println("创建第二个数组:"); 

double[][] y = m.create() ; 

m.print(y) ; //用来验证输入的是否和你一样的,没啥作用 

double[][] result = m.multiply(x, y) ; 

if(result == null){ 

return ; //如果输入的矩阵不能运算就不输出结果了。 

m.print(result) ; 

}

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

关于java矩阵相乘和java矩阵相乘算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。