⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backup.java

📁 Java实现的快速自相关算法:提供交互界面,可读入外部数据文件
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
								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 + -