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

📄 example2_5.java

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

public boolean Mtinv(int n,double[] T,double[] TT,double[][] B)
{int i,j,k;double a,s;
 double[] c=new double[n];
 double[] r=new double[n];
 double[] p=new double[n];
// 矩阵非T型矩阵
    if(T[0]==0) return false;
  // 取初值
    a = T[0];c[0]=TT[1]/T[0];r[0]=T[1]/T[0];
    for(k=1;k<n-1;k++)
    {s=-TT[k+1];
     for(j=1;j<=k;j++)s+=c[k-j]*TT[j];
     s/=a;
     for(i=0;i<k;i++)p[i]=c[i]+s*r[k-i-1];
     c[k]=-s;s=-T[k+1];
     for(j=1;j<=k;j++)s+=r[k-j]*T[j];
     s/=a;
     for(i=0;i<k;i++){r[i]+=s*c[k-i-1];c[k-i-1]=p[k-i-1];}
     r[k]=-s;a=T[0];
     for(j=0;j<=k;j++)a-=T[j+1]*c[j];
     if(a==0)return false;}
     B[0][0]=1.0/a;
     for(i=1;i<n;i++){B[0][i]=r[i-1]/a;B[i][0]=-c[i-1]/a;}
     //计算逆矩阵中的各元素
     for(i=1;i<n;i++)
       for(j=1;j<n;j++)
       {B[i][j]=B[i-1][j-1]-c[i-1]*B[0][j]+c[n-j-1]*B[0][n-i];}
     return true;
     }


public void Mrcheng(double[][] a,double[][] b,double[][]c,int m,int n,int l)
  {double[][] d=new double[m][l];
   int i,j,k;
   for(i=0;i<m;i++)
     for(j=0;j<l;j++)
      {d[i][j]=0;
       for(k=0;k<n;k++)d[i][j]+=a[i][k]*b[k][j];}
  for(i=0;i<m;i++)
   for(j=0;j<l;j++)
    c[i][j]=d[i][j];
}

public String MRrowtoString(double[][] 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])<1e-8)a[i][j]=0;
   s2=String.valueOf(a[i][j]);
   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+"  ";
   }
  return s1;
}

public void paint(Graphics g)
{double[] T={10,5,4,3,2,1};
 double[] TT={0,-1,-2,-3,-4,-5};
 double[][] a=new double[6][6];
 double[][] b=new double[6][6];
 String s="";
 int i,j;
 for(i=0;i<6;i++)
 { for(j=i;j<6;j++)a[i][j]=T[j-i];
   for(j=0;j<i;j++)a[i][j]=TT[i-j];}
 g.drawString("A=",10,20);
 for(i=0;i<6;i++)
 {s=MRrowtoString(a,i,6);g.drawString(s,10,40+20*i);}
 Mtinv(6,T,TT,b);
 g.drawString("A的逆阵B为",10,160);
 for(i=0;i<6;i++)
 {s=MRrowtoString(b,i,6);g.drawString(s,10,180+20*i);}
   }
}

⌨️ 快捷键说明

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