java 矩阵乘向量_矩阵乘法运算-JAVA实现

用JAVA写了个矩阵乘法运算.没什么好解释的.直接贴代码吧.

public class Matrix {

int row;

int col;

private int[][] array;

private Matrix(){

//构造函数私有化,使用setArray方法进行初始化

}

public int[][] getArray() {

return array;

}

public void setArray(int[][] array) {

//判断 二维数组是否为合法矩阵

int row = array.length;

int col = array[0].length;

for(int i = 1;i < row;i++){

if(col!=array[i].length){

System.out.println("输入的不是一个矩阵,请重新输入");

return;

}

}

this.row = row;

this.col = col;

this.array = array;

}

public String toString(){

if(array==null){

return "矩阵为空,请输入一个矩阵";

}

String s ="";

row = array.length;

col = array[row-1].length;

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

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

s+=array[i][j]+" ";

}

s+="\r\n";

}

return s;

}

public Matrix multip(Matrix x){

Matrix m = new Matrix();

m.setArray(multip(x.getArray()));

return m;

}

private int[][] multip(int[][] aim){

if(this.col!=aim.length){

System.out.println("两个矩阵不能相乘");

return null;

}

int[][] result = new int[this.row][aim[0].length];

for(int row = 0;row < this.row;row++){

for(int col = 0;col < aim[0].length;col++){

int num = 0;

for(int i = 0;i

num+=array[row][i]*aim[i][col];

}

result[row][col]=num;

}

}

return result;

}

public static void main(String[] args) {

Matrix m = new Matrix();

Matrix m2 = new Matrix();

int[][]rec = {{1,0,3},{2,1,3},{3,5,7}};

int[][]rec2 = {{4,1},{1,1},{2,0}};

m.setArray(rec);

m2.setArray(rec2);

System.out.println(m);

System.out.println(m2);

System.out.println(m.multip(m2));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * 基于数组的向量实现 */ package dsa; public class Vector_Array implements Vector { private final int N = 1024;//数组的容量 private int n = 0;//向量的实际规模 private Object[] A;//对象数组 //构造函数 public Vector_Array() { A = new Object[N]; n = 0; } //返回向量中元素数目 public int getSize() { return n; } //判断向量是否为空 public boolean isEmpty() { return (0 == n) ? true : false; } //取秩为r的元素 public Object getAtRank(int r)//O(1) throws ExceptionBoundaryViolation { if (0 > r || r >= n) throw new ExceptionBoundaryViolation("意外:秩越界"); return A[r]; } //将秩为r的元素替换为obj public Object replaceAtRank(int r, Object obj) throws ExceptionBoundaryViolation { if (0 > r || r >= n) throw new ExceptionBoundaryViolation("意外:秩越界"); Object bak = A[r]; A[r] = obj; return bak; } //插入obj,作为秩为r的元素;返回该元素 public Object insertAtRank(int r, Object obj) throws ExceptionBoundaryViolation { if (0 > r || r > n) throw new ExceptionBoundaryViolation("意外:秩越界"); if (n >= N) throw new ExceptionBoundaryViolation("意外:数组溢出"); for (int i=n; i>r; i--) A[i] = A[i-1];//后续元素顺次后移 A[r] = obj;//插入 n++;//更新当前规模 return obj; } //删除秩为r的元素 public Object removeAtRank(int r) throws ExceptionBoundaryViolation { if (0 > r || r >= n) throw new ExceptionBoundaryViolation("意外:秩越界"); Object bak = A[r]; for (int i=r; i<n; i++) A[i] = A[i+1];//后续元素顺次前移 n--;//更新当前规模 return bak; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值