资源简介
java实现迭代法求信道容量,虽然matlab实现更简单,但资源包含矩阵类的封装和一些操作的java实现,希望可以供java上使用到矩阵操作的朋友学习交流
代码片段和文件信息
package com.matrix;
import java.text.DecimalFormat;
import java.util.Scanner;
import com.myexception.ArraySizeException;
import com.myexception.IllegalNumberException;
import com.myexception.MatrixCanNotMultipleException;
/**
* 迭代法求信道容量
* 作者:John Luang
* 单位:北京邮电大学信息与通信工程学院
*/
public class Caculate {
public Caculate() {
// TODO Auto-generated constructor stub
}
/**
* 求ai
*/
public double[][] getAi(double pij[][]double qTran[][])throws MatrixCanNotMultipleException{
if(pij[0].length!=qTran.length)throw new MatrixCanNotMultipleException();
else{
double c[][] = new double[pij.length][qTran[0].length];
int xij;
for(i = 0;i {
for(j = 0;j {
double temp = 0;
for(x = 0;x {
/*
* 注意,此处如果pij[i][x]=0则pij[i][x]*ln(pij[i][x]/qTran[x][j])=0
* 但是直接算Math.log(pij[i][x]/qTran[x][j])会得到NaM无穷大就出错了
* 要在pij[i][x]=0是分开处理
*/
if(pij[i][x]!=0.0)
temp+=Math.log(pij[i][x]/qTran[x][j])*pij[i][x];
}
c[i][j] = Math.pow(2.718281828 temp);
}
}
return c;}
}
/**
* 求max(ai)
*/
public double max(double[][]a){
int n;
double max=a[0][0];
for(n=0;n<=a.length-1;n++) {
if(max max=a[n][0];
}
return max;
}
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
Caculate c=new Caculate();
//dalta和精确度有关,可以自己选取,一般在0.001到0.0001之间即可
double dalta=0.0001;
double cap=0;
try{
System.out.println(“请输入信道转移矩阵{pij}:“);
String s1=scan.next();
System.out.println(“请输入行数(输入符号集大小)r“);
int r=Integer.parseInt(scan.next());
System.out.println(“请输入列数(输出符号集大小)s“);
int s=Integer.parseInt(scan.next());
Matrix matrix1=new Matrix(s1 r s);
System.out.println(“信道转移矩阵{pij}:“);
matrix1.printmatrix();
System.out.println(“------------------------------“);
System.out.println(“取初始概率分布为均匀分布,pi=1/r“);
double[][]p=new double[1][r];
for(int i=0;i p[0][i]=1d/r;
}
new Matrix(p).printmatrix();
while(true){
double [][]q=Matrix.multiple(p matrix1.getInstance());
double [][]qTran=Matrix.transformMatrix(q);
//new Matrix(qTran).printmatrix();
double [][]a=c.getAi(matrix1.getInstance() qTran);
double [][]u=Matrix.multiple(p a);
double iL=Logarithm.log(u[0][0] 2);
//System.out.println(“IL=“+iL);
double iU=Logarithm.log(c.max(a) 2);
//System.out.println(“IU=“+iU);
if((iU-iL) cap=iL;
System.out.println(“---------------------------“);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-01-02 19:49 The channel capacity\
文件 301 2016-01-01 14:08 The channel capacity\.classpath
文件 396 2016-01-01 14:08 The channel capacity\.project
目录 0 2016-01-02 19:49 The channel capacity\.settings\
文件 598 2016-01-01 14:08 The channel capacity\.settings\org.eclipse.jdt.core.prefs
目录 0 2016-01-02 19:49 The channel capacity\bin\
目录 0 2016-01-02 19:49 The channel capacity\bin\com\
目录 0 2016-01-02 19:49 The channel capacity\bin\com\matrix\
文件 3947 2016-01-02 19:17 The channel capacity\bin\com\matrix\Caculate.class
文件 420 2016-01-01 22:16 The channel capacity\bin\com\matrix\Logarithm.class
文件 5214 2016-01-02 15:10 The channel capacity\bin\com\matrix\Matrix.class
目录 0 2016-01-02 19:49 The channel capacity\bin\com\myexception\
文件 464 2016-01-01 22:34 The channel capacity\bin\com\myexception\ArraySizeException.class
文件 453 2016-01-02 14:54 The channel capacity\bin\com\myexception\IllegalNumberException.class
文件 492 2016-01-01 22:34 The channel capacity\bin\com\myexception\MatrixCanNotMultipleException.class
目录 0 2016-01-02 19:49 The channel capacity\src\
目录 0 2016-01-02 19:49 The channel capacity\src\com\
目录 0 2016-01-02 19:49 The channel capacity\src\com\matrix\
文件 3847 2016-01-02 19:17 The channel capacity\src\com\matrix\Caculate.java
文件 155 2016-01-01 22:16 The channel capacity\src\com\matrix\Logarithm.java
文件 5296 2016-01-02 15:10 The channel capacity\src\com\matrix\Matrix.java
目录 0 2016-01-02 19:49 The channel capacity\src\com\myexception\
文件 242 2016-01-01 22:34 The channel capacity\src\com\myexception\ArraySizeException.java
文件 235 2016-01-02 14:54 The channel capacity\src\com\myexception\IllegalNumberException.java
文件 257 2016-01-01 22:34 The channel capacity\src\com\myexception\MatrixCanNotMultipleException.java
- 上一篇:编译OpenCV3.4.1生成C库Java库的方法
- 下一篇:图书销售系统项目
评论
共有 条评论