📄 backup.java
字号:
for(int xx=1;xx<=electrade;xx++)//for 17
for(int yy=1;yy<=electrade;yy++){
r3[i][xx][yy]/=(double)(electrade-3);
}//for 17 compute R(3) for each trial
for(int j=1;j<=electrade-4;j++){//for 18
for(int xx=1;xx<=electrade;xx++)//for 19
for(int yy=1;yy<=electrade;yy++){
temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+4+j];
}//for 19
for(int xx=1;xx<=electrade;xx++)//for 20
for(int yy=1;yy<=electrade;yy++){
r4[i][xx][yy]+=temp[i][xx][yy];
}//for 20
}//for 18
for(int xx=1;xx<=electrade;xx++)//for 21
for(int yy=1;yy<=electrade;yy++){
r4[i][xx][yy]/=(double)(electrade-4);
}//for 21 compute R(4) for each trial
for(int j=1;j<=electrade-5;j++){//for 22
for(int xx=1;xx<=electrade;xx++)//for 23
for(int yy=1;yy<=electrade;yy++){
temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+5+j];
}//for 23
for(int xx=1;xx<=electrade;xx++)//for 24
for(int yy=1;yy<=electrade;yy++){
r5[i][xx][yy]+=temp[i][xx][yy];
}//for 24
}//for 22
for(int xx=1;xx<=electrade;xx++)//for 25
for(int yy=1;yy<=electrade;yy++){
r5[i][xx][yy]/=(double)(electrade-5);
}//for 25 compute R(5) for each trial
for(int j=1;j<=electrade-6;j++){//for 26
for(int xx=1;xx<=electrade;xx++)//for 27
for(int yy=1;yy<=electrade;yy++){
temp[i][xx][yy]=neeg[xx][i][t+j]*neeg[yy][i][t+6+j];
}//for 27
for(int xx=1;xx<=electrade;xx++)//for 28
for(int yy=1;yy<=electrade;yy++){
r6[i][xx][yy]+=temp[i][xx][yy];
}//for 28
}//for 26
for(int xx=1;xx<=electrade;xx++)//for 29
for(int yy=1;yy<=electrade;yy++){
r6[i][xx][yy]/=(double)(electrade-6);
}//for 29 compute R(6) for each trial
}//初始化协方差矩阵
////////////// i的作用域结束//////////////////////////////
this.label8.setText("初始化协方差矩阵完成!\n");
///average covariance matrix across trials
/*
temp=mean(r0,1);
R0(:,:)=temp(1,:,:);
temp=mean(r1,1);
R1(:,:)=temp(1,:,:);
temp=mean(r2,1);
R2(:,:)=temp(1,:,:);
temp=mean(r3,1);
R3(:,:)=temp(1,:,:);
temp=mean(r4,1);
R4(:,:)=temp(1,:,:);
temp=mean(r5,1);
R5(:,:)=temp(1,:,:);
temp=mean(r6,1);
R6(:,:)=temp(1,:,:);
*/
double R0[][]=new double[electrade+1][electrade+1];
double R1[][]=new double[electrade+1][electrade+1];
double R2[][]=new double[electrade+1][electrade+1];
double R3[][]=new double[electrade+1][electrade+1];
double R4[][]=new double[electrade+1][electrade+1];
double R5[][]=new double[electrade+1][electrade+1];
double R6[][]=new double[electrade+1][electrade+1];
//temp=new double[electrade+1][electrade+1];
double sum=0;
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r0[k][i][j];
R0[i][j]=sum/(double)trial;
sum=0;
}
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r1[k][i][j];
R1[i][j]=sum/(double)trial;
sum=0;
}
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r2[k][i][j];
R2[i][j]=sum/(double)trial;
sum=0;
}
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r3[k][i][j];
R3[i][j]=sum/(double)trial;
sum=0;
}
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r4[k][i][j];
R4[i][j]=sum/(double)trial;
sum=0;
}
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r5[k][i][j];
R5[i][j]=sum/(double)trial;
sum=0;
}
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++){
for(int k=1;k<=trial;k++)
sum+=r6[k][i][j];
R6[i][j]=sum/(double)trial;
sum=0;
}
/**
% solve the linear equation group
L=[R0, R1', R2', R3', R4', R5';
R1, R0, R1', R2', R3', R4';
R2, R1, R0, R1', R2', R3';
R3, R2, R1, R0, R1', R2';
R4, R3, R2, R1, R0, R1';
R5, R4, R3, R2, R1, R0];
R=[R1;
R2;
R3;
R4;
R5;
R6];
R=R*(-1);
A=inv(L)*R; */
this.label8.setText("正在初始化L,请稍候......\n");
double L[][]=new double[electrade*6+1][electrade*6+1];
double R[][]=new double[electrade*6+1][electrade+1];
for(int i=1;i<=electrade;i++){
for(int j=1;j<=electrade;j++) L[j][i]=R0[j][i];
for(int j=1+electrade;j<=2*electrade;j++)L[j][i]=R1[j-electrade][i];
for(int j=1+2*electrade;j<=3*electrade;j++)L[j][i]=R2[j-2*electrade][i];
for(int j=1+3*electrade;j<=4*electrade;j++)L[j][i]=R3[j-3*electrade][i];
for(int j=1+4*electrade;j<=5*electrade;j++)L[j][i]=R4[j-4*electrade][i];
for(int j=1+5*electrade;j<=6*electrade;j++)L[j][i]=R5[j-5*electrade][i];
}
for(int i=1+electrade;i<=2*electrade;i++){
for(int j=1;j<=electrade;j++) L[j][i]=R1[i-electrade][j];
for(int j=1+electrade;j<=2*electrade;j++) L[j][i]=R0[j-electrade][i-electrade];
for(int j=1+2*electrade;j<=3*electrade;j++)L[j][i]=R1[j-2*electrade][i-electrade];
for(int j=1+3*electrade;j<=4*electrade;j++)L[j][i]=R2[j-3*electrade][i-electrade];
for(int j=1+4*electrade;j<=5*electrade;j++)L[j][i]=R3[j-4*electrade][i-electrade];
for(int j=1+5*electrade;j<=6*electrade;j++)L[j][i]=R4[j-5*electrade][i-electrade];
}
for(int i=1+2*electrade;i<=3*electrade;i++){
for(int j=1;j<=electrade;j++)L[j][i]=R2[i-2*electrade][j];
for(int j=1+electrade;j<=2*electrade;j++)L[j][i]=R1[i-2*electrade][j-electrade];
for(int j=1+2*electrade;j<=3*electrade;j++)L[j][i]=R0[j-2*electrade][i-2*electrade];
for(int j=1+3*electrade;j<=4*electrade;j++)L[j][i]=R1[j-3*electrade][i-2*electrade];
for(int j=1+4*electrade;j<=5*electrade;j++)L[j][i]=R2[j-4*electrade][i-2*electrade];
for(int j=1+5*electrade;j<=6*electrade;j++)L[j][i]=R3[j-5*electrade][i-2*electrade];
}
for(int i=1+3*electrade;i<=4*electrade;i++){
for(int j=1;j<=electrade;j++)L[j][i]=R3[i-3*electrade][j];
for(int j=1+electrade;j<=2*electrade;j++)L[j][i]=R2[i-3*electrade][j-electrade];
for(int j=1+2*electrade;j<=3*electrade;j++)L[j][i]=R1[i-3*electrade][j-2*electrade];
for(int j=1+3*electrade;j<=4*electrade;j++)L[j][i]=R0[j-3*electrade][i-3*electrade];
for(int j=1+4*electrade;j<=5*electrade;j++)L[j][i]=R1[j-4*electrade][i-3*electrade];
for(int j=1+5*electrade;j<=6*electrade;j++)L[j][i]=R2[j-5*electrade][i-3*electrade];
}
for(int i=1+4*electrade;i<=5*electrade;i++){
for(int j=1;j<=electrade;j++)L[j][i]=R4[i-4*electrade][j];
for(int j=1+electrade;j<=2*electrade;j++)L[j][i]=R3[i-4*electrade][j-electrade];
for(int j=1+2*electrade;j<=3*electrade;j++)L[j][i]=R2[i-4*electrade][j-2*electrade];
for(int j=1+3*electrade;j<=4*electrade;j++)L[j][i]=R1[i-4*electrade][j-3*electrade];
for(int j=1+4*electrade;j<=5*electrade;j++)L[j][i]=R0[j-4*electrade][i-4*electrade];
for(int j=1+5*electrade;j<=6*electrade;j++)L[j][i]=R1[j-5*electrade][i-4*electrade];
}
for(int i=1+5*electrade;i<=6*electrade;i++){
for(int j=1;j<=electrade;j++)L[j][i]=R5[i-5*electrade][j];
for(int j=1+electrade;j<=2*electrade;j++)L[j][i]=R4[i-5*electrade][j-electrade];
for(int j=1+2*electrade;j<=3*electrade;j++)L[j][i]=R3[i-5*electrade][j-2*electrade];
for(int j=1+3*electrade;j<=4*electrade;j++)L[j][i]=R2[i-5*electrade][j-3*electrade];
for(int j=1+4*electrade;j<=5*electrade;j++)L[j][i]=R1[i-5*electrade][j-4*electrade];
for(int j=1+5*electrade;j<=6*electrade;j++)L[j][i]=R0[j-5*electrade][i-5*electrade];
}//inlize L
this.label8.setText("初始化L完成!正在初始化R,请稍候......");
for(int i=1;i<=electrade;i++){
for(int j=1;j<=electrade;j++)R[j][i]=-R1[j][i];
for(int j=1+electrade;j<=2*electrade;j++)R[j][i]=-R2[j-electrade][i];
for(int j=1+2*electrade;j<=3*electrade;j++)R[j][i]=-R3[j-2*electrade][i];
for(int j=1+3*electrade;j<=4*electrade;j++)R[j][i]=-R4[j-3*electrade][i];
for(int j=1+4*electrade;j<=5*electrade;j++)R[j][i]=-R5[j-4*electrade][i];
for(int j=1+5*electrade;j<=6*electrade;j++)R[j][i]=-R6[j-5*electrade][i];
}
this.label8.setText("初始化R完成!计算L的逆矩阵......");
/**
R=R*(-1);%each element multi -1//这一步已经在初始化R的时候完成了(每一个元素前面加了负号)
*/
//用“全选主元高斯-约旦法”计算L的逆矩阵
/*
高斯-约旦法(全选主元)求逆的步骤如下:
首先,对于 k 从 0 到 n - 1 作如下几步:
从第 k 行、第 k 列开始的右下角子阵中选取绝对值最大的元素,并记住次元素所在的行号和列号,在通过行交换和列交换将它交换到主元素位置上。这一步称为全选主元。
m(k, k) = 1 / m(k, k)
m(k, j) = m(k, j) * m(k, k),j = 0, 1, ..., n-1;j != k
m(i, j) = m(i, j) - m(i, k) * m(k, j),i, j = 0, 1, ..., n-1;i, j != k
m(i, k) = -m(i, k) * m(k, k),i = 0, 1, ..., n-1;i != k
最后,根据在全选主元过程中所记录的行、列交换的信息进行恢复,恢复的原则如下:在全选主元过程中,先交换的行(列)后进行恢复;原来的行(列)交换用列(行)交换来恢复。
*/
//因为已经搞出来的持续数组序号是从0开始的,故进行预处理,将序号该为0开始
for(int i=1;i<=electrade*6;i++)
for(int j=1;j<=electrade*6;j++)L[j][i-1]=L[j][i];
for(int i=1;i<=electrade*6;i++)
for(int j=0;j<=electrade*6-1;j++)L[i-1][j]=L[i][j];
//预处理完成!开始计算inv(L),结果仍在L
//System.out.print("预处理完成!开始计算inv(L),结果仍在L\n");
int is[]=new int[electrade*6];
int js[]=new int[electrade*6];
for(int k=0;k<=electrade*6-1;k++){
is[k]=k;
js[k]=k;
double xx=0,mid=0;
for(int i=k;i<=electrade*6-1;i++)
for(int j=k;j<=electrade*6-1;j++){
if(Math.abs(L[i][j])>xx){
xx=Math.abs(L[i][j]);
is[k]=i;
js[k]=j;
}
} //for i j
// if(x==0)return 0;
if(is[k]!=k){
xx=0;
for(int i=0;i<=electrade*6-1;i++){
mid=L[is[k]][i];
L[is[k]][i]=L[k][i];
L[k][i]=mid;
}
}
if(js[k]!=k){
xx=0;
for(int i=0;i<=electrade*6-1;i++){
mid=L[i][k];
L[i][k]=L[i][js[k]];
L[i][js[k]]=mid;
}
}
//fdet
if(L[k][k]!=0)
L[k][k]=1/L[k][k];
else L[k][k]=Math.pow(10,100);
for(int i=0;i<=electrade*6-1;i++){
if(i!=k)
L[k][i]*=L[k][k];
}
for(int i=0;i<=electrade*6-1;i++){
if(i!=k){
for(int j=0;j<=electrade*6-1;j++){
if(j!=k)
L[i][j]=L[i][j]-L[i][k]*L[k][j];
}
} //if
}// for i
for(int i=0;i<=electrade*6-1;i++){
if(i!=k)
L[i][k]*=-L[k][k];
}
} //for k++
for(int k=electrade*6-1;k>=0;k--){
if(js[k]!=k){
for(int i=0;i<=electrade*6-1;i++){
double mid=L[k][i];
L[k][i]=L[js[k]][i];
L[js[k]][i]=mid;
}
}//if js
if(is[k]!=k){
for(int i=0;i<=electrade*6-1;i++){
double mid=L[i][k];
L[i][k]=L[i][is[k]];
L[i][is[k]]=mid;
}
}//if is
}//for k--
//System.out.print(" 处理完成!将序号重新改为1开始\n");
//处理完成!将序号重新改为1开始
for(int i=electrade*6-1;i>=0;i--)
for(int j=0;j<=electrade*6-1;j++){
L[j][i+1]=L[j][i];
}
for(int i=electrade*6-1;i>=0;i--)
for(int j=1;j<=electrade*6;j++){
L[i+1][j]=L[i][j];
}
this.label8.setText("计算L的逆矩阵完成!计算A=inv(L)*R;......");
/**
* A=inv(L)*R;%nijuzhen
*/
//System.out.print("A=inv(L)*R;%nijuzhen\n");
double A[][]=new double[electrade*6+1][electrade+1];
for(int i=1;i<=electrade*6;i++)
for(int j=1;j<=electrade;j++)
for(int x=1;x<=electrade*6;x++)
A[i][j]+=L[i][x]*R[x][j];
/**
A0=eye(30);%单位矩阵
A1=A(1:30,1:30)';
A2=A(31:60,1:30)';
A3=A(61:90,1:30)';
A4=A(91:120,1:30)';
A5=A(121:150,1:30)';
A6=A(151:180,1:30)';
*/
// System.out.print("A0~A6\n");
this.label8.setText("计算A=inv(L)*R完成!计算E......");
double A0[][]=new double[electrade+1][electrade+1];
double A1[][]=new double[electrade+1][electrade+1];
double A2[][]=new double[electrade+1][electrade+1];
double A3[][]=new double[electrade+1][electrade+1];
double A4[][]=new double[electrade+1][electrade+1];
double A5[][]=new double[electrade+1][electrade+1];
double A6[][]=new double[electrade+1][electrade+1];
for(int i=1;i<=electrade;i++)A0[i][i]=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -