public class MatrixHessenberg {
public static int Hessenberg(double[][] Matrix,int n,double[][]ret)
{
int i;
int j;
int k;
double temp;
int MaxNu;
n-=1;
for(k=1;k<=n-1;k++)
{
i=k-1;
MaxNu=k;
temp=Math.abs(Matrix[k][i]);
for(j=k+1;j<=n;j++)
{
if(Math.abs(Matrix[j][i])>temp)
{
MaxNu=j;
}
}
ret[0][0]=Matrix[MaxNu][i];
i=MaxNu;
if(ret[0][0]!=0)
{
if(i!=k)
{
for(j=k-1;j<=n;j++)
{
temp=Matrix[i][j];
Matrix[i][j]=Matrix[k][j];
Matrix[k][j]=temp;
}
for(j=0;j<=n;j++)
{
temp=Matrix[j][i];
Matrix[j][i]=Matrix[j][k];
Matrix[j][k]=temp;
}
}
for(i=k+1;i<=n;i++)
{
temp=Matrix[i][k-1]/ret[0][0];
Matrix[i][k-1]=0;
for(j=k;j<=n;j++)
{
Matrix[i][j]-=temp*Matrix[k][j];
}
for(j=0;j<=n;j++)
{
Matrix[j][k]+=temp*Matrix[j][i];
}
}
}
}
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
ret[i][j]=Matrix[i][j];
}
}
return n+1;
}
public static void main(String[]args)//测试
{
double[][] TestMatrix = {
{1, 22, 34,22},
{1, 11,5,21} ,
{0,1,5,11},
{7,2,13,19}};
double[][] TMatrix1={
{1,2,3},{2,1,1},{2,2,2}
};
double[][]TMatrix2={
{1,2},{2,3}
};
double[][]TestH=new double[4][4];
Hessenberg(TestMatrix,4,TestH);
String Strr=new String("");
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
String str=String.valueOf(TestH[i][j]);
Strr+=str;
Strr+=" ";
}
Strr+="\n";
}
System.out.println(Strr);
}
}
运行结果如下: