?? example2_17.java
字號:
import java.applet.*;
import java.awt.*;
public class Example2_17 extends Applet
{ public void MJacobiEigenv(double[][] a,double[][] J,int n,double eps)
{double t,s,c,max,temp;
int i,j,k=0,p,q;
double[] b1=new double[n];
double[] b2=new double[n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{if(i==j)J[i][j]=1;
else J[i][j]=0;}
while(true)
{max=0;p=0;q=0;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{temp=Math.abs(a[i][j]);
if(temp>max){max=temp;p=i;q=j;}
}
if(max<eps)break;
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];}
}
}
public void paint(Graphics g)
{double[][] a=new double[3][3];
double[][] J=new double[3][3];
int i,j;
double eps=1e-10;
a[0][0]=a[2][2]=1;a[1][1]=3;a[0][2]=a[2][0]=2;
a[0][1]=a[1][0]=a[1][2]=a[2][1]=Math.sqrt(2);
MJacobiEigenv(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 + -