矩阵库

编写一个Matrix 库并实现以下API:
public class Matrix
static double dot(double[] x, double[] y) 向量点乘
static double[][] mult(double[][] a, double[][] b) 矩阵和矩阵之积
static double[][] transpose(double[][] a) 转置矩阵
static double[] mult(double[][] a, double[] x) 矩阵和向量之积
static double[] mult(double[] y, double[][] a) 向量和矩阵之积
编写一个测试用例,从标准输入读取矩阵并测试所有方法。

1.首先下载两个jar库:stdlib.jar和algs4.jar包
点击下载
2.将这两个包导入自己的Eclipse中:
步骤如下:
1、右键点击你需要添加jar包的项目。
2、选择“Properties”。
3、然后选择对话框中的“Java Build Path”。
4、选择“Libraries”选项卡,然后点击右边的“Add External JARS“,然后找到你的jar所存放的路径,选择需要添加的jar包。
5、点击“OK”完成。
经过以上步骤即可添加好jar包。
注意:如果是添加系统所带有的jar,在第4步的时候选择“Add JARS”,其他步骤相同。

进入正题:
直接上代码吧!

public class Matrix {
	public Matrix() {
		// TODO Auto-generated constructor stub
	}
	public static double dot(double[] x, double[] y)//向量点乘
	{
		double a=0;
		if(x.length!=y.length)
		{  return a; }//此处抛出异常
		for(int i=0;i<x.length;i++)
			a+=x[i]*y[i];
		return a;
	}
	public static double[][] transpose(double[][] a)// 转置矩阵
	{

		 for (int i=0;i<a.length;i++)
	    	{
	    	
	    	for(int j=i;j<a[0].length;j++)
	    	{
	    		double temp=a[i][j];
	    		a[i][j]=a[j][i];
	    		a[j][i]=temp;
	    		
	    	}
	    	}
		  return a;
	}
	/*
	 * 矩阵的乘积定义:一个n行m列的矩阵乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,
	 * 其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应
	 * 相乘后所有m个乘积的和。
	 * */
	static double[][] mult(double[][] a, double[][] b)// 矩阵和矩阵之积
	{
		
	
		int M=a[0].length;
		int N=a.length;
		int P=b[0].length;
		double[][] c=new double[M][P];
				if(M!=b.length)
				{}//此处抛出异常
		for(int i=0;i<N;i++)
			for(int j=0;j<P;j++)
			{for(int m=0;m<M;m++)
				c[i][j]+=a[i][m]*b[m][j];
			}
		return c;
	}
	public static double[] mult(double[][] a, double[] x)//矩阵和向量之积
	{
		int N=a.length;
		double[] c=new double[N];
		int M=a[0].length;
		if(M!=x.length)
		{}//此处抛出异常
		for(int i=0;i<N;i++)
			{for(int m=0;m<M;m++)
				c[i]+=a[i][m]*x[m];
			}
		return c;
	}
	public static double[] mult(double[] y, double[][] a) //向量和矩阵之积
	{
		int N=y.length;
		double[] c=new double[N];
		int M=y.length;
		if(M!=a[0].length)
		{}//此处抛出异常
		for(int i=0;i<N;i++)
			{for(int m=0;m<M;m++)
				c[i]+=a[i][m]*y[i];
			}
		return c;
		
	}
	public static void Print(double  [][] a , String name)
	{
		StdOut.println(name+":");
        for (int i=0;i<a.length;i++)
    	{
    	
    	for(int j=0;j<a[0].length;j++)
    	
    	{
    		StdOut.print(a[i][j]+" ");
    	}
    	StdOut.println();
        }
        StdOut.println();
	}
	public static void Print(double [][] a )
	{
		for (int i=0;i<a.length;i++)
    	{
    	
    	for(int j=0;j<a[0].length;j++)
    	
    	{
    		StdOut.print(a[i][j]+" ");
    	}
    	StdOut.println();
        }
		StdOut.println();
	}
	
	public static void Print(double [] a , String name)
	{
		StdOut.println(name+":");
        for (int i=0;i<a.length;i++)
    	{
    	
    	  StdOut.print(a[i]+" ");
    	  if((i+1)%10==0)
    	  StdOut.println();
        }
        StdOut.println();
	}
	public static void Print(double  [] a )
	{
		 for (int i=0;i<a.length;i++)
    	{
    	
    	  StdOut.print(a[i]+" ");
    	  if((i+1)%10==0)
    	  StdOut.println();
        }
		 StdOut.println();
	}
	public static double[][] randominti(double[][] a)
	{
		int N=a.length;
		int M=a[0].length;
		 for(int i=0;i<N;i++)
	      {
	    	  for(int j=0;j<M;j++)
	    	  {  
	    		  a[i][j]=StdRandom.uniform(N+M); 
	    	  }
	    	
	      }
		return a;
	}	
	public static double[] randominti(double[] a)
	{
		int N=a.length;
		
		 for(int i=0;i<N;i++)
	      {
	    	  a[i]=StdRandom.uniform(N); 	    	
	      }
		return a;
	}	
//测试用例
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       
	int N=5;
	int p=10;
	double[][] a=new double[N][N];
       double[][] b =new double[p][N];
       double[]   c=new double[N];
       double d =0;
     a=randominti(a);
     b=randominti(b);
     c=randominti(c);
      d=dot(c,c);
      Print(c,"c");
      StdOut.print("dot(c,c):d="+d);
            
      Print(a,"a");
      Print(b,"b");
      double[][] x=new double[a[0].length][a.length];
      x= transpose(a);
      Print(x,"transpose(a)to x");
      
      x=mult(a,b);
      Print(x,"mult(a,b)");
      
      double[] y=c;
      y=mult(a,c);
      Print(y,"mult(a,c)");
      
      y=mult(c,a);
      Print(y,"mult(c,a)");
      	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值