?? example3_3.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)
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))
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]);}
}
//調(diào)整次序
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("系數(shù)矩陣奇異",10,20);}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -