📄 example2_18.java
字号:
import java.applet.*;
import java.awt.*;
public class Example2_18 extends Applet
{ public void HbergEigenv2(double[][] a,double[][] J,int n,double eps)
{double t,s,c,max,temp,alpha=0;
int i,j,p,q;
double[] b1=new double[n];
double[] b2=new double[n];
for(i=0;i<n;i++)
{ J[i][i]=1;
for(j=i+1;j<n;j++)
{J[j][i]=J[i][j]=0;alpha+=a[i][j]*a[i][j];}
}
alpha=Math.sqrt(2*alpha);
while(alpha>eps)
{ for(p=0;p<n-1;p++)
for(q=p+1;q<n;q++)
{if(Math.abs(a[p][q])<alpha)continue;
t=(a[p][p]-a[q][q])/a[p][q];
if(t==0)c=s=Math.sqrt(2)/2;
else
{if(t<0)t=-1/(-t+Math.sqrt(1+t*t));
else t=1.0/(t+Math.sqrt(1+t*t));
c=1.0/Math.sqrt(1+t*t);s=t*c;}
for(i=0;i<n;i++)
{if(i==p)b1[i]=a[p][p]*c*c+a[q][q]*s*s+a[p][q]*2*s*c;
else if(i==q)b1[i]=(a[q][q]-a[p][p])*s*c+a[p][q]*(2*c*c-1);
else b1[i]=a[i][p]*c+a[i][q]*s;}
for(i=0;i<n;i++)
{if(i==p)b2[i]=b1[q];
else if(i==q)b2[i]=a[p][p]*s*s+a[q][q]*c*c-a[p][q]*2*s*c;
else b2[i]=-a[i][p]*s+a[i][q]*c;}
for(i=0;i<n;i++){a[i][p]=a[p][i]=b1[i];a[i][q]=a[q][i]=b2[i];}
for(i=0;i<n;i++){b1[i]=J[i][p]*c+J[i][q]*s;b2[i]=-J[i][p]*s+J[i][q]*c;}
for(i=0;i<n;i++){J[i][p]=b1[i];J[i][q]=b2[i];}
}
alpha/=n;
}
}
public void paint(Graphics g)
{double[][] a={{1,2,3},{2,4,6},{3,6,9}};
double[][] J=new double[3][3];
int i,j;
double eps=1e-6;
HbergEigenv2(a,J,3,eps);
g.drawString("特征值为"+a[0][0]+"和"+a[1][1]+"和"+a[2][2],10,20);
g.drawString("特征向量为:",10,40);
g.drawString(""+J[0][0]+" "+J[0][1]+" "+J[0][2],10,60);
g.drawString(""+J[1][0]+" "+J[1][1]+" "+J[1][2],10,80);
g.drawString(""+J[2][0]+" "+J[2][1]+" "+J[2][2],10,100);}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -