?? example2_3.java
字號:
import java.applet.*;
import java.awt.*;
class Complex
{ double real=0,image=0;
public static void init(double a,double b,Complex c)
{c.real=a;c.image=b;}
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 double abs(Complex a)
{double x,y,r;
x=Math.abs(a.real);y=Math.abs(a.image);
if(x>y)r=x*Math.sqrt(1+(y/x)*(y/x));
else r=y*Math.sqrt(1+(x/y)*(x/y));
return r;
}
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)
{ double p,q,s;
c.real=a.real*b.real-a.image*b.image;
c.image=a.real*b.image+a.image*b.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 Example2_3 extends Applet
{
public static void Mcinv(Complex[][] a,int n)
{int i,j,row,col,k;
double max,temp;
int[] p=new int[n];
Complex[][] b=new Complex[n][n];
Complex ctemp=new Complex();
for(i=0;i<n;i++)p[i]=i;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{b[i][j]=new Complex();
if(i!=j)Complex.init(0,0,b[i][j]);
else Complex.init(1,0,b[i][i]);}
for(k=0;k<n;k++)
{//找主元
max=0;row=col=k;
for(i=k;i<n;i++)
for(j=k;j<n;j++)
{temp=Complex.abs(a[i][j]);
if(max<temp){max=temp;row=i;col=j;}
}
//交換行列,將主元調整到k行k列上
if(row!=k)
{for(j=0;j<n;j++)
{Complex.swap(a[row][j],a[k][j]);
Complex.swap(b[row][j],b[k][j]);}
}
if(col!=k)
{for(i=0;i<n;i++)Complex.swap(a[i][col],a[i][k]);
j=p[col];p[col]=p[k];p[k]=j;}
//處理
for(j=k+1;j<n;j++){Complex.chu(a[k][j],a[k][k],ctemp);Complex.equal(a[k][j],ctemp);}
for(j=0;j<n;j++){Complex.chu(b[k][j],a[k][k],ctemp);Complex.equal(b[k][j],ctemp);}
for(j=k+1;j<n;j++)
{for(i=0;i<k;i++){Complex.cheng(a[i][k],a[k][j],ctemp);Complex.jian(a[i][j],ctemp,a[i][j]);}
for(i=k+1;i<n;i++){Complex.cheng(a[i][k],a[k][j],ctemp);Complex.jian(a[i][j],ctemp,a[i][j]);}
}
for(j=0;j<n;j++)
{for(i=0;i<k;i++){Complex.cheng(a[i][k],b[k][j],ctemp);Complex.jian(b[i][j],ctemp,b[i][j]);}
for(i=k+1;i<n;i++){Complex.cheng(a[i][k],b[k][j],ctemp);Complex.jian(b[i][j],ctemp,b[i][j]);}
}
for(i=0;i<n;i++)Complex.init(0,0,a[i][k]);
Complex.init(1,0,a[k][k]);
}
//恢復行列次序;
for(j=0;j<n;j++)
for(i=0;i<n;i++)Complex.equal(a[p[i]][j],b[i][j]);
}
public void Mccheng(Complex[][] a,Complex[][] b,Complex[][] c,int m,int n,int l)
{Complex[][] d=new Complex[m][l];
Complex temp=new Complex();
int i,j,k;
for(i=0;i<m;i++)
for(j=0;j<l;j++)
{d[i][j]=new Complex();
for(k=0;k<n;k++){Complex.cheng(a[i][k],b[k][j],temp);Complex.jia(d[i][j],temp,d[i][j]);}
}
for(i=0;i<m;i++)
for(j=0;j<l;j++)
Complex.equal(c[i][j],d[i][j]);
}
public String MCrowtoString(Complex[][] a,int i,int col)
{String s1="",s2="",s3="";
int j,k,l;
for(j=0;j<col;j++)
{ if(Math.abs(a[i][j].real)<1e-8)a[i][j].real=0;
if(Math.abs(a[i][j].image)<1e-8)a[i][j].image=0;
s1=s1+"(";s2=String.valueOf(a[i][j].real);
k=s2.length();l=s2.indexOf("E",k-4);
if(l==-1)s3="";
else s3=s2.substring(l);
if(k>10)s2=s2.substring(0,9)+s3;
s1+=s2+")+(";
s2=String.valueOf(a[i][j].image);
k=s2.length();l=s2.indexOf("E",k-4);
if(l==-1)s3="";
else s3=s2.substring(l);
if(k>10)s2=s2.substring(0,9)+s3;
s1=s1+s2+")I ";
}
return s1;
}
public void paint(Graphics g)
{double[][] ar={{0.2368,0.2471,0.2568},{1.1161,0.1254,0.1397},{0.1582,1.1675,0.1768}};
double[][] ai={{0.1345,0.1678,0.1825},{1.2671,0.2017,-0.7024},{-0.2836,-1.1977,0.3558}};
Complex[][] a=new Complex[3][3];
Complex[][] b=new Complex[3][3];
String s1="";
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{a[i][j]=new Complex();b[i][j]=new Complex();
Complex.init(ar[i][j],ai[i][j],a[i][j]);Complex.equal(b[i][j],a[i][j]);}
g.drawString("A=",10,20);
for(i=0;i<3;i++)
{ s1=MCrowtoString(a,i,3);g.drawString(s1,10,40+20*i);}
Mcinv(a,3);
g.drawString("A的逆陣B為",10,100);
for(i=0;i<3;i++)
{ s1=MCrowtoString(a,i,3);g.drawString(s1,10,120+20*i);}
Mccheng(b,a,a,3,3,3);
g.drawString("A*B=",10,180);
for(i=0;i<3;i++)
{ s1=MCrowtoString(a,i,3);g.drawString(s1,10,200+20*i);}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -