# include"stdio.h"
# include"math.h"
# define m 3
# define n 4
# define eps 1e-10
main
{
static double a[m][n]={{1.0,0.0,-1.0,1.0},{0.0,2.0,2.0,2.0},{-1.0,4.0,5.0,3.0}};
static double b[m]={1.0,2.0,3.0};
double at[n][m],b1[n],u[m],v[n];
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
at[i][j]=a[i][j];
for(i=0;i<n;i++)
{
b1[i]=0.0;
for(j=0;j<m;j++)
b1[j]+=at[i][j]*b[j];
}
hclf(at,n,m,b1,u);
hclf(a,m,n,u,v);
printf("a=\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%lf",a[i][j]);
printf("\n");
}
printf("b=\n");
for(i=0;i<m;i++)
printf("%lf",b[i]);printf("\n");
for(j=0;j<n;j++)
printf("V[%d]=%if\n",j,V[j]);
{
hclf(a,m1,n1,b,x)
double a[],b[],x[];
int m1,n1;
}
int i,j;
double s,ss,max,t[10],wc[20];
for(j=0;j<n1;j++)
x[j]=0.0;
q:for(i=0;i<m1;i++)
{
s=b[i];
for(j=0;j<n1;j++)
s-=a[i*n1+j]*x[j];
ss=0.0;
for(j=0;j<n1;j++)
ss+=a[i*n1+j]*a[i*n1+j];
t[i]=s/ss;
}
for(j=0;j<n1;j++)
{
wc[j]=0.0;
for(i=0;i<m1;i++)
wc[j]+=(1.0/m1)*t[i]*a[i*n1+j];
x[j]+=wc[j];
}
max=fabs(wc[0]);
for(j=1;j<n1;j++)
if(fabs(wc[j])>max)max=fabs(wc[j]);
if(max>=eps)
goto q;
}