迭代法求信道容量(java实现)

  • b5_480449
    了解作者
  • 15.7KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-05-27 01:06
    上传日期
java实现迭代法求信道容量,虽然matlab实现更简单,但资源包含矩阵类的封装和一些操作的java实现,希望可以供java上使用到矩阵操作的朋友学习交流
The channel capacity.zip
内容介绍
package com.matrix; import java.util.Scanner; import com.myexception.*; public class Matrix { public double[][]m; int lineNum,columnNum; boolean flag=true; /** * 无参数构造方法 */ public Matrix() { // TODO Auto-generated constructor stub } /** * 含参数构造方法 */ public Matrix(double[][]d){ lineNum=d.length; columnNum=d[0].length; m=new double[lineNum][columnNum]; for(int i=0;i<lineNum;i++){ for(int j=0;j<columnNum;j++){ m[i][j]=d[i][j]; } } } /** * 定义一个二维矩阵Matrix(String s,int lineNum,int columnNum) * 输入字符串,同行元素用“,”隔开,行与行间用“;”隔开,支持分数和小数输入 */ public Matrix(String s,int lineNum,int columnNum) throws IllegalNumberException,ArraySizeException{ this.lineNum=lineNum; this.columnNum=columnNum; m=new double[lineNum][columnNum]; if(s!=null&&!s.equals("")){ String[]line=s.split(";"); if(line.length<=lineNum){ for(int i=0;i<lineNum;i++){ if(i<line.length){ String[]c=line[i].split(","); if(c.length>columnNum){ //列数超出标定值 flag=false; throw new ArraySizeException(); } for(int j=0;j<columnNum;j++){ try{ if(j<c.length)m[i][j]=fractions2decimals(c[j]); else m[i][j]=0.0;} catch(NumberFormatException nfe){ throw new IllegalNumberException(); } } } else { for(int j=0;j<columnNum;j++){ m[i][j]=0.0; } } } } else { //行数超出标定值 flag=false; throw new ArraySizeException(); } } } /** * 获取下标为i,j的元素 */ public double getelement(int i,int j){ return m[i][j]; } /** * 设置下表为in,j的元素为某个值 */ public void setelement(int i,int j,double d){ m[i][j]=d; } /** * 获得矩阵行数 */ public int getlineNum(){ return lineNum; } /** * 获得矩阵列数 */ public int getcolumnNum(){ return columnNum; } /** * 获得矩阵实例(返回一个二维数组) */ public double[][] getInstance(){ return m; } /** * 打印出矩阵 */ public void printmatrix(){ if(flag==false)System.out.println("矩阵输入错误!"); else{ for(int i=0;i<lineNum;i++){ for(int j=0;j<columnNum;j++){ System.out.print(m[i][j]+"\t"); } System.out.println(); } } } /** * 矩阵相乘 */ public static double[][] multiple(double[][] a,double[][] b)throws MatrixCanNotMultipleException{ if(a[0].length!=b.length)throw new MatrixCanNotMultipleException(); else{ double c[][] = new double[a.length][b[0].length]; int x,i,j; for(i = 0;i<a.length ;i++) { for(j = 0;j<b[0].length;j++) { double temp = 0; for(x = 0;x<b.length;x++) { temp+=a[i][x]*b[x][j]; } c[i][j] = temp; } } return c; } } /** * 矩阵转置 */ public static double[][] transformMatrix(double[][]d){ double[][]t=new double[d[0].length][d.length]; for(int i=0;i<d.length;i++){ for(int j=0;j<d[0].length;j++){ t[j][i]=d[i][j]; } } return t; } /** * 将含有“/”的分数转化为小数 */ public static double fractions2decimals(String fractions)throws IllegalNumberException{ double d=0.0,d1=0,d2=1; try{ if(!fractions.contains("/")) d= Double.parseDouble(fractions); else{ String []s=fractions.split("/"); if(s.length rel='nofollow' onclick='return false;'>2){ throw new IllegalNumberException(); } d1=Double.parseDouble(s[0]); d2=Double.parseDouble(s[1]); d=d1/d2;} } catch(NumberFormatException nfe){ throw new IllegalNumberException(); } return d; } /* * 主函数 */ public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(true){ try{ System.out.println("请输入矩阵一"); String s1=scan.next(); System.out.println("请输入行数"); int li1=Integer.parseInt(scan.next()); System.out.println("请输入列数"); int co1=Integer.parseInt(scan.next()); Matrix matrix1=new Matrix(s1, li1, co1); matrix1.printmatrix(); System.out.println("请输入矩阵二"); String s2=scan.next(); System.out.println("请输入行数"); int li2=Integer.parseInt(scan.next()); System.out.println("请输入列数"); int co2=Integer.parseInt(scan.next()); Matrix matrix2=new Matrix(s2, li2, co2); matrix2.printmatrix(); Matrix matrix3=new Matrix(Matrix.multiple(matrix1.getInstance(), matrix2.getInstance())); System.out.println("两矩阵相乘得:"); matrix3.printmatrix(); Matrix matrix4=new Matrix(Matrix.transformMatrix(matrix3.getInstance())); System.out.println("转置后为:"); matrix4.printmatrix();} catch(MatrixCanNotMultipleException mcnme){ System.out.println(mcnme); } catch(ArraySizeException ase){ System.out.println(ase); } catch(IllegalNumberException ine){ System.out.println(ine); } } } }
评论
    相关推荐
    • java简单矩阵相乘
      编写一程序,计算矩阵A={{7,9,4},{5,6,8}}与矩阵 B={{9,5,2,8},{5,9,7,2},{4,7,5,8}} 相乘,把结果存入矩阵C,并在屏幕输出结果。
    • java版本矩阵
      这是一个很经典的java版本的矩阵基础类,包括了复矩阵,QR分解,SVD分解,还有特征值特征向量的求解。
    • java 矩阵转置的代码
      java 矩阵转置 java 矩阵转置 java 矩阵转置
    • java 矩阵的加法
      java 矩阵的加法 java 矩阵的加法 java 矩阵的加法
    • java数组矩阵乘法
      java 矩阵乘法 通俗易懂非常适合初学者学习和交流,对java进一步了解
    • Java中的矩阵运算
      Java中的一组静态方法,在涉及矩阵的所有数学计算中都至关重要
    • java 矩阵的减法
      java 矩阵的减法 java 矩阵的减法 java 矩阵的减法
    • java矩阵找鞍点
      寻找矩阵的鞍点(满足在当前行中最小且在当前列中最大的元素)
    • java实验矩阵相乘
      里面包含好几个实验内容。。有矩阵对换。。相乘。。。
    • 幻方矩阵java源码
      中国科学技术大学软件学院《算法设计与分析》实验题目二