📄 matrix.java
字号:
package matrix;
import gui.PepaConsole;
public class Matrix {
public int[] ija;
public double[] sa;
private int matDim;
private int size;
public Matrix(int size,int dim)
{
matDim=dim;
this.size=size;
ija=new int[size];
sa=new double[size];
}
public void setValue(int pos,int index,double value)
{
ija[pos]=index;
sa[pos]=value;
}
public boolean checkErgodicity(int[] newija)
{
boolean[] trace=new boolean[matDim+1];
int[] stack=new int[matDim+1];
trace[1]=true;
stack[0]=1;
int buttom=0;
int top=1;
int state,insert;
int pos_f,pos_s;
while(buttom<top)
{
state=stack[buttom];
buttom++;
pos_f=newija[state];
pos_s=newija[state+1];
for(int i=pos_f;i<pos_s;i++)
{
insert=newija[i];
if(!trace[insert])
{
trace[insert]=true;
stack[top]=insert;
top++;
}
}
}
for(int i=1;i<=matDim;i++)
if(trace[i]==false)
{
return false;
}
return true;
}
public void Trans()
{
int key=findKey();
int SIZE=size+matDim-key-1;
int[] newija=new int[SIZE];
double[] newsa=new double[SIZE];
trans(newija,newsa);
newija[matDim+1]=size;
PepaConsole.addArgument("--遍历性检查...\n");
if(checkErgodicity(newija))
PepaConsole.addArgument("--该pepa模型满足遍历性要求!\n");
else
PepaConsole.addArgument("--该pepa模型不满足遍历性要求!\n");
newsa[matDim]=1.0;
newija[matDim+1]=SIZE;
int i=1;
for(int j=size-key;j<SIZE;j++)
{
newija[j]=i++;
newsa[j]=1.0;
}
size=SIZE;
ija=newija;
sa=newsa;
System.gc();
}
private int findKey()
{
int num=0;
for(int i=matDim+2;i<size;i++)
{
if(ija[i]==matDim)
num++;
}
return num;
}
private void trans(int[] nija,double[] nsa)
{
int pos;
int j;
int insert=matDim+2;
for(int i=1;i<=matDim;i++)
{
pos=matDim+2;
nija[i]=insert;
nsa[i]=sa[i];
while(pos<size)
{
if(ija[pos]==i)
{
for(j=1;j<=matDim+1;j++)
{
int k=ija[j];
if(pos==ija[j])
break;
if(pos<ija[j])
{
j--;
break;
}
}
nija[insert]=j;
nsa[insert]=sa[pos];
insert++;
}
pos++;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -