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

📄 example2_18.java

📁 清华大学2002年出版的《科学与工程数值计算算法Java》配套源码
💻 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 + -