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

📄 example3_3.java

📁 清华大学2002年出版的《科学与工程数值计算算法Java》配套源码
💻 JAVA
字号:
import java.applet.*;
import java.awt.*;

class Complex
{ double real=0,image=0;
  public static void init(Complex a,double b,double c)
  {a.real=b;a.image=c;}
  public static double abs(Complex a)
  {double w;
   w=a.real*a.real+a.image*a.image;
   w=Math.sqrt(w);
   return w;}
   public static void swap(Complex a,Complex b)
   {double u;
    u=a.real;a.real=b.real;b.real=u;
    u=a.image;a.image=b.image;b.image=u;}
  public static void  jia(Complex a,Complex b,Complex c)
  {c.real=a.real+b.real;c.image=a.image+b.image;}
  public static void  jian(Complex a,Complex b,Complex c)
  {c.real=a.real-b.real;c.image=a.image-b.image;}
  public static void  cheng(Complex a,Complex b,Complex c)
  {c.real=a.real*b.real-a.image*b.image;
   c.image=a.image*b.real+b.image*a.real;}
  public static void chu(Complex a,Complex b,Complex c)
    { double w;
      if(Math.abs(b.real)>Math.abs(b.image))
      {w=b.real+b.image*(b.image/b.real);
       c.real=(a.real+a.image*(b.image/b.real))/w;
       c.image=(a.image-a.real*(b.image/b.real))/w;
      }
      else
  	{w=b.real*(b.real/b.image)+b.image;
  	 c.real=(a.real*(b.real/b.image)+a.image)/w;
  	 c.image=(a.image*(b.real/b.image)-a.real)/w;
     }
   }
  public static void  equal(Complex a,Complex b)
  {a.real=b.real;a.image=b.image;}
}

public class Example3_3 extends Applet
{
  public static boolean GaussComplex(Complex[][] a,Complex[] b,int n)
   { int i,j,k,row,col;
     double temp,max;
     int[] p=new int[n];
     Complex ctemp=new Complex();
     Complex[] c=new Complex[n];
     for(i=0;i<n;i++)p[i]=i;
       for(i=0;i<n-1;i++)
       { //找主元
 		row=i;col=i;max=Complex.abs(a[i][i]);
 	    for(j=i;j<n;j++)
          for(k=i;k<n;k++)
           {temp=Complex.abs(a[j][k]);
            if(temp>max){max=temp;row=j;col=k;}
 	      }
 	    if (max==0){return false;}
 	    //第row行、第i行互换
	    if(row!=i)
	    { for(k=i;k<n;k++)Complex.swap(a[i][k],a[row][k]);
	      Complex.swap(b[i],b[row]);}
	    //第col列、第i列互换
	    if(col!=i)
	    { for(j=0;j<n;j++)Complex.swap(a[j][i],a[j][col]);}
	    k=p[i];p[i]=p[col];p[col]=k;
	    //第i行归一化
	    for(k=i+1;k<n;k++)
	    {Complex.chu(a[i][k],a[i][i],ctemp);
	     Complex.equal(a[i][k],ctemp);}
		Complex.chu(b[i],a[i][i],ctemp);
		Complex.equal(b[i],ctemp);
		Complex.init(a[i][i],1,0);
	    //消元
	    for(j=i+1;j<n;j++)
	     { for(k=i+1;k<n;k++)
	       {Complex.cheng(a[j][i],a[i][k],ctemp);
	        Complex.jian(a[j][k],ctemp,a[j][k]);}
	       Complex.cheng(a[j][i],b[i],ctemp);
	       Complex.jian(b[j],ctemp,b[j]);
		   Complex.init(a[j][i],0,0);
		 }
	 }
	   //回代
        Complex.chu(b[n-1],a[n-1][n-1],ctemp);
        Complex.equal(b[n-1],ctemp);
        for(i=n-2;i>=0;i--)
          {for(j=i+1;j<n;j++)
            {Complex.cheng(a[i][j],b[j],ctemp);
             Complex.jian(b[i],ctemp,b[i]);}
          }
       //调整次序
       for(i=0;i<n;i++)
       {c[p[i]]=new Complex();Complex.equal(c[p[i]],b[i]);}
       for(i=0;i<n;i++)Complex.equal(b[i],c[i]);
       return true;
  }

public void paint(Graphics g)
{ double[][] a ={{1,3,2,13},{7,2,1,-2},{9,15,3,-2},{-2,-2,11,5}};
  double[][] b ={{3,-2,1,6},{-2,7,5,8},{9,-3,15,1},{-2,-2,7,6}};
  double[] c={2,7,3,9};
  double[] d={1,2,-2,3};
  int i,j;
  Complex[][] e=new Complex[4][4];
  Complex[] f=new Complex[4];
  for(i=0;i<4;i++)
  {f[i]=new Complex();Complex.init(f[i],c[i],d[i]);
   for(j=0;j<4;j++)
   {e[i][j]=new Complex();Complex.init(e[i][j],a[i][j],b[i][j]);}
  }
  if (GaussComplex(e,f,4))
  { g.drawString("求解成功",10,20);
    g.drawString("x1=("+f[0].real+")+("+f[0].image+")I",10,40);
    g.drawString("x2=("+f[1].real+")+("+f[1].image+")I",10,60);
    g.drawString("x3=("+f[2].real+")+("+f[2].image+")I",10,80);
    g.drawString("x4=("+f[3].real+")+("+f[3].image+")I",10,100);}
 else {g.drawString("系数矩阵奇异",10,20);}
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -