📄 backup.java
字号:
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)A1[j][i]=A[i][j];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)A2[j][i]=A[i+electrade][j];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)A3[j][i]=A[i+2*electrade][j];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)A4[j][i]=A[i+3*electrade][j];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)A5[j][i]=A[i+4*electrade][j];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)A6[j][i]=A[i+5*electrade][j];
/*
E=A0*R0+A1*R1+A2*R2+A3*R3+A4*R4+A5*R5+A6*R6;
*/
//System.out.print("E=A0*R0+A1*R1+A2*R2+A3*R3+A4*R4+A5*R5+A6*R6;\n");
double E[][]=new double[electrade+1][electrade+1];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=electrade;j++)
for(int x=1;x<=electrade;x++){
E[i][j]+=A0[i][x]*R0[x][j];
E[i][j]+=A1[i][x]*R1[x][j];
E[i][j]+=A2[i][x]*R2[x][j];
E[i][j]+=A3[i][x]*R3[x][j];
E[i][j]+=A4[i][x]*R4[x][j];
E[i][j]+=A5[i][x]*R5[x][j];
E[i][j]+=A6[i][x]*R6[x][j];
}
this.label8.setText("计算E完成,计算H......");
/**
w=1:50;
for j=1:50
temp(:,:)=A0+A1*exp(-1*i*w(j)*2*pi/250)+A2*exp(-2*i*w(j)*2*pi/250)+A3*exp(-3*i*w(j)*2*pi/250)+A4*exp(-4*i*w(j)*2*pi/250)+A5*exp(-5*i*w(j)*2*pi/250)+A6*exp(-6*i*w(j)*2*pi/250);
H(j,:,:)=inv(temp);
end
*/
//System.out.print("H(,,,)\n");
double tempRe[][]=new double[electrade][electrade];
double tempIm[][]=new double[electrade][electrade];
double Hre[][][]=new double[101][electrade+1][electrade+1];
double Him[][][]=new double[101][electrade+1][electrade+1];
for(int j=1;j<=50;j++){
for(int x=1;x<=electrade;x++)
for(int y=1;y<=electrade;y++){
tempRe[x-1][y-1]=A0[x][y];
//temp[x][y]+=A1[x][y]*Math.exp(-i*j*2*Math.PI/250);
tempRe[x-1][y-1]+=A1[x][y]*Math.cos(-j*2*Math.PI/250);
tempIm[x-1][y-1]+=A1[x][y]*Math.sin(-j*2*Math.PI/250);
//temp1[x][y]+=A2[x][y]*Math.exp(-2*i*j*2*Math.PI/250);
tempRe[x-1][y-1]+=A2[x][y]*Math.cos(-2*j*2*Math.PI/250);
tempIm[x-1][y-1]+=A2[x][y]*Math.sin(-2*j*2*Math.PI/250);
//temp1[x][y]+=A3[x][y]*Math.exp(-3*i*j*2*Math.PI/250);
tempRe[x-1][y-1]+=A3[x][y]*Math.cos(-3*j*2*Math.PI/250);
tempIm[x-1][y-1]+=A3[x][y]*Math.sin(-3*j*2*Math.PI/250);
//temp1[x][y]+=A4[x][y]*Math.exp(-4*i*j*2*Math.PI/250);
tempRe[x-1][y-1]+=A4[x][y]*Math.cos(-4*j*2*Math.PI/250);
tempIm[x-1][y-1]+=A4[x][y]*Math.sin(-4*j*2*Math.PI/250);
//temp1[x][y]+=A5[x][y]*Math.exp(-5*i*j*2*Math.PI/250);
tempRe[x-1][y-1]+=A5[x][y]*Math.cos(-5*j*2*Math.PI/250);
tempIm[x-1][y-1]+=A5[x][y]*Math.sin(-5*j*2*Math.PI/250);
//temp1[x][y]+=A6[x][y]*Math.exp(-6*i*j*2*Math.PI/250);
tempRe[x-1][y-1]+=A6[x][y]*Math.cos(-6*j*2*Math.PI/250);
tempIm[x-1][y-1]+=A6[x][y]*Math.sin(-6*j*2*Math.PI/250);
}
//
this.label8.setText("求temp的逆......");
int SIZE=electrade;
is=new int[SIZE];
js=new int[SIZE];
for(int k=0;k<=SIZE-1;k++){
is[k]=k;
js[k]=k;
double xx=0;
double mid1=0,mid2=0;;
for(int i=k;i<=SIZE-1;i++)
for(int jj=k;jj<=SIZE-1;jj++){
if((tempRe[i][jj]*tempRe[i][jj]+tempIm[i][jj]*tempIm[i][jj])>xx){
xx=tempRe[i][jj]*tempRe[i][jj]+tempIm[i][jj]*tempIm[i][jj];
is[k]=i;
js[k]=jj;
}
} //for i jj
// if(x==0)return 0;
if(is[k]!=k){
xx=0;
for(int i=0;i<=SIZE-1;i++){
mid1=tempRe[is[k]][i];mid2=tempIm[is[k]][i];
tempRe[is[k]][i]=tempRe[k][i];tempIm[is[k]][i]=tempIm[k][i];
tempRe[k][i]=mid1;tempIm[k][i]=mid2;
}
}
if(js[k]!=k){
xx=0;
for(int i=0;i<=SIZE-1;i++){
mid1=tempRe[i][k];mid2=tempIm[i][k];
tempRe[i][k]=tempRe[i][js[k]];
tempIm[i][k]=tempIm[i][js[k]];
tempRe[i][js[k]]=mid1;tempIm[i][js[k]]=mid2;
}
}
//fdet
//A[k][k]=1/A[k][k];
if(tempRe[k][k]==0&&tempIm[k][k]==0){
tempRe[k][k]=Math.pow(10,100);
tempIm[k][k]=Math.pow(10,100);
}
else{
mid1=tempRe[k][k];
tempRe[k][k]=tempRe[k][k]/(tempRe[k][k]*tempRe[k][k]+tempIm[k][k]*tempIm[k][k]);
tempIm[k][k]=-tempIm[k][k]/(mid1*mid1+tempIm[k][k]*tempIm[k][k]);
}
for(int i=0;i<=SIZE-1;i++){
if(i!=k){
//A[k][i]*=A[k][k];
mid1=tempRe[k][i];
tempRe[k][i]=tempRe[k][i]*tempRe[k][k]-tempIm[k][i]*tempIm[k][k];
tempIm[k][i]=mid1*tempIm[k][k]+tempIm[k][i]*tempRe[k][k];
}
}
for(int i=0;i<=SIZE-1;i++){
if(i!=k){
for(int jj=0;jj<=SIZE-1;jj++){
if(jj!=k){
//A[i][jj]=A[i][jj]-A[i][k]*A[k][jj];
mid1=tempRe[i][jj];
tempRe[i][jj]=tempRe[i][jj]-(tempRe[i][k]*tempRe[k][jj]-tempIm[i][k]*tempIm[k][jj]);
tempIm[i][jj]=tempIm[i][jj]-(tempRe[i][k]*tempIm[k][jj]+tempIm[i][k]*tempRe[k][jj]);
}
}//for jj
} //if i!=k
}// for i
for(int i=0;i<=SIZE-1;i++){
if(i!=k){
//A[i][k]*=-A[k][k];
mid1=tempRe[i][k];
tempRe[i][k]=-mid1*tempRe[k][k]+tempIm[i][k]*tempIm[k][k];
tempIm[i][k]=-mid1*tempIm[k][k]-tempIm[i][k]*tempRe[k][k];
}
}
} //for k++
for(int k=SIZE-1;k>=0;k--){
if(js[k]!=k){
for(int i=0;i<=SIZE-1;i++){
//float mid=A[k][i];
double mid1=tempRe[k][i];
double mid2=tempIm[k][i];
//A[k][i]=A[js[k]][i];
tempRe[k][i]=tempRe[js[k]][i];
tempIm[k][i]=tempIm[js[k]][i];
//A[js[k]][i]=mid;
tempRe[js[k]][i]=mid1;
tempIm[js[k]][i]=mid2;
}
}//if js
if(is[k]!=k){
for(int i=0;i<=SIZE-1;i++){
//float mid=A[i][k];
double mid1=tempRe[i][k];
double mid2=tempIm[i][k];
//A[i][k]=A[i][is[k]];
tempRe[i][k]=tempRe[i][is[k]];
tempIm[i][k]=tempIm[i][is[k]];
//A[i][is[k]]=mid;
tempRe[i][is[k]]=mid1;
tempIm[i][is[k]]=mid2;
}
}//if is
}//for k--
///////temp的逆矩阵求完了,实部在tempRe,虚部在tempIm
//System.out.print("temp的逆矩阵求完了,实部在tempRe,虚部在tempIm\n");
for(int ii=1;ii<=electrade;ii++)
for(int jj=1;jj<=electrade;jj++){
Hre[j][ii][jj]=tempRe[ii-1][jj-1];
Him[j][ii][jj]=tempIm[ii-1][jj-1];
}
}//for j=1:50
this.label8.setText("求temp的逆完成!求H完成......");
/*
for j=1:50
temp(:,:)=H(j,:,:);
S(j,:,:)=temp*E*temp';
end
*/
//因为此时的H(j,:,:)==temp(:,:),所以不用对temp进行初始化,直接相乘就可以了
//System.out.print("因为此时的H(j,:,:)==temp(:,:),所以不用对temp进行初始化,直接相乘就可以了\n");
Sre=new double[101][electrade+1][electrade+1];
Sim=new double[101][electrade+1][electrade+1];
double Re[][]=new double[electrade+1][electrade+1];//缓冲区,寄存temp
double Im[][]=new double[electrade+1][electrade+1];
for(int j=1;j<=50;j++){
for(int ii=1;ii<=electrade;ii++)
for(int jj=1;jj<=electrade;jj++)
for(int k=1;k<=electrade;k++){
Re[ii][jj]+=tempRe[ii-1][k-1]*E[k][jj];
Im[ii][jj]+=tempIm[ii-1][k-1]*E[k][jj];
}//temp*E 存于Re,Im
for(int ii=1;ii<=electrade;ii++)
for(int jj=1;jj<=electrade;jj++)
for(int k=1;k<=electrade;k++){
Sre[j][ii][jj]+=Re[ii][k]*tempRe[jj-1][k-1]-Im[ii][k]*tempIm[jj-1][k-1];
Sim[j][ii][jj]+=Re[ii][k]*tempIm[jj-1][k-1]+Im[ii][k]*tempRe[jj-1][k-1];
}
}//for j=1:50
/**
% compute coherence coeffient
for j=1:50
c(j)=(abs(S(j,27,13)))^2/abs(S(j,27,27)*S(j,13,13));
end
*/
int first=this.comboBox1.getSelectedIndex()+1;
int second=this.comboBox2.getSelectedIndex()+1;
for(int j=1;j<=50;j++){
C[j]=(Sre[j][first][second]*Sre[j][first][second]+Sim[j][first][second]*Sim[j][first][second])/Math.sqrt((Sre[j][first][first]*Sre[j][first][first]+Sim[j][first][first]*Sim[j][first][first])*(Sre[j][second][second]*Sre[j][second][second]+Sim[j][second][second]*Sim[j][second][second]));
//System.out.print("S["+j+"]["+first+"]["+second+"]=("+Sre[j][first][second]+")+i("+Sim[j][first][second]+"),");
// System.out.print("S["+j+"]["+first+"]["+first+"]=("+Sre[j][first][first]+")+i("+Sim[j][first][first]+"),");
//System.out.print("S["+j+"]["+second+"]["+second+"]=("+Sre[j][second][second]+")+i("+Sim[j][second][second]+"),");
System.out.print(C[j]+"\n");
}
draw=true;
this.panel1.invalidate();
this.panel2.invalidate();
/**
spectrum1(1:50)=S(1:50,2,2);
spectrum2(1:50)=S(1:50,3,3);
spectrum3(1:50)=S(1:50,2,3);
*/
this.label8.setText("计算结束!请观察输出结果。\n");
}//检验通过
else{//检验未通过
this.label8.setForeColor(Color.RED);
this.label8.setText("文件格式检验未通过!请检查输入的数据格式是否正确!\n");
}
}catch(NumberFormatException ee){
this.label8.setForeColor(Color.RED);
this.label8.setText("错误:datapoint处输入的不是整数!请检查后重新输入!\n");
}
}catch(NumberFormatException ee){
this.label8.setForeColor(Color.RED);
this.label8.setText("错误:electrade处输入的不是整数!请检查后重新输入!\n");
}
}catch(NumberFormatException ee){
this.label8.setForeColor(Color.RED);
this.label8.setText("错误:trail处输入的不是整数!请检查后重新输入!\n");
}
/*
/*for i=1:30
for j=1:trial
neeg(i,j,:)=(eeg(i,j,:)-eegmean(i,j))/eegstd(i,j);
end
end*/
/*double neeg[][][]=new double[electrade+1][trial+1][datapoint+1];
for(int i=1;i<=electrade;i++)
for(int j=1;j<=trial;j++)
for(int k=1;k<=datapoint;k++){
neeg[i][j][k]=(eeg[i][j][k]-eegmean[i][j])/eegstd[i][j];
}
sum=0;
double eegmean1[][]=new double[electrade+1][datapoint+1];
for(int i=1;i<=electrade;i++)
for(int k=1;k<=datapoint;k++){
for(int j=1;j<=trial;j++){
}
}*/
}
}
private void panel1_paint(Object source, PaintEvent e)
{
/*
int x0=20,y0=this.panel1.getHeight()-20;
e.graphics.setPen(new Pen(Color.DARKGRAY,PenStyle.DOT,1));
for(int i=0;i<=10;i++)
e.graphics.drawLine(x0,y0-(panel1.getHeight()-40)/10*i,panel1.getWidth()-20,y0-(panel1.getHeight()-40)/10*i);
for(int i=0;i<=100;i++)
e.graphics.drawLine(x0+(int)((double)(panel1.getWidth()-40)/100*i),y0,x0+(int)((double)(panel1.getWidth()-40)/100*i),20);
if(draw){
double step=(double)(this.panel1.getWidth()-40)/100;
e.graphics.setPen(new Pen(Color.WHITE,PenStyle.SOLID,3));
for(int i=1;i<100;i++){
e.graphics.drawLine(x0+(int)(step*(i-1)),y0-(int)(C[i]*(panel1.getHeight()-40)),x0+(int)(step*i),y0-(int)(C[i+1]*(panel1.getHeight()-40)));
}
}*/
}
private void button2_click(Object source, Event e)
{
int first=this.comboBox1.getSelectedIndex()+1;
int second=this.comboBox2.getSelectedIndex()+1;
for(int j=1;j<=100;j++){
C[j]=(Sre[j][first][second]*Sre[j][first][second]+Sim[j][first][second]*Sim[j][first][second])/Math.sqrt((Sre[j][first][first]*Sre[j][first][first]+Sim[j][first][first]*Sim[j][first][first])*(Sre[j][second][second]*Sre[j][second][second]+Sim[j][second][second]*Sim[j][second][second]));
//System.out.print("S["+j+"]["+first+"]["+second+"]=("+Sre[j][first][second]+")+i("+Sim[j][first][second]+"),");
//System.out.print("S["+j+"]["+first+"]["+first+"]=("+Sre[j][first][first]+")+i("+Sim[j][first][first]+"),");
//// System.out.print("S["+j+"]["+second+"]["+second+"]=("+Sre[j][second][second]+")+i("+Sim[j][second][second]+"),");
System.out.print(C[j]+"\n");
}
draw=true;
this.panel1.invalidate();
this.panel2.invalidate();
this.panel3.invalidate();
}
private void panel2_paint(Object source, PaintEvent e)
{
int x0=20,y0=this.panel2.getHeight()-20;
e.graphics.setPen(new Pen(Color.DARKGRAY,PenStyle.DOT,1));
for(int i=0;i<=10;i++)
e.graphics.drawLine(x0,y0-(panel2.getHeight()-40)/10*i,panel2.getWidth()-20,y0-(panel2.getHeight()-40)/10*i);
for(int i=0;i<=100;i++)
e.graphics.drawLine(x0+(int)((double)(panel2.getWidth()-40)/100*i),y0,x0+(int)((double)(panel2.getWidth()-40)/100*i),20);
if(draw){
double step=(double)(this.panel2.getWidth()-40)/100;
e.graphics.setPen(new Pen(Color.WHITE,PenStyle.SOLID,1));
double range=10;
int first=this.comboBox1.getSelectedIndex()+1;
int second=this.comboBox2.getSelectedIndex()+1;
for(int i=1;i<100;i++){
e.graphics.drawLine(x0+(int)(step*(i-1)),y0-(int)(Math.sqrt(Sre[i][first][first]*Sre[i][first][first]+Sim[i][first][first]*Sim[i][first][first])*(panel2.getHeight()-40)/range),x0+(int)(step*i),y0-(int)(Math.sqrt(Sre[i+1][first][first]*Sre[i+1][first][first]+Sim[i+1][first][first]*Sim[i+1][first][first])*(panel2.getHeight()-40)/range));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -