Dyhg::Dyhg( int m, int n )
{
hcount = m;
wcount = n;
dat = new DatArray[m];
jg = new double[n];
for( int i = 0; i < hcount; i ++ )
dat[i].Init( n );
}
void Dyhg::Let( int x, double *s )
{
for( int i = 0; i < wcount; i ++ )
Let( x, i, s[i] );
}
double Dyhg::SumPf( int x, int y )
{
double a = 0.0;
for( int i = 0; i < hcount; i ++ )
a += ( dat[i].sj[x] * dat[i].sj[y] );
return a;
}
void Dyhg::Sum()
{
int i, j, n = wcount - 1;
double a, b;
FcArray fc( wcount );
fc.Let( 0, 0, hcount );
for( i = 0; i < n; i ++ )
{
a = b = 0.0;
for( j = 0; j < hcount; j ++ )
{
a += dat[j].sj[i];
b += ( dat[j].sj[i] * dat[j].sj[i] );
}
fc.Let( 0, i + 1, a );
fc.Let( i + 1, 0, a );
fc.Let( i + 1, i + 1, b );
for( j = i + 1; j < n; j ++ )
{
a = SumPf( i, j );
fc.Let( i + 1, j + 1, a );
fc.Let( j + 1, i + 1, a );
}
}
a = 0.0;
for( i = 0; i < hcount; i ++ )
a += dat[i].sj[n];
fc.Let( 0, wcount, a );
for( i = 0; i < n; i ++ )
{
a = 0.0;
for( j = 0; j < hcount; j ++ )
a += ( dat[j].sj[i] * dat[j].sj[n] );
fc.Let( i + 1, wcount, a );
}
// fc.Print(cout);
fc.Sum();
for( i = 0; i < wcount; i ++ )
jg[i] = fc.Value( i );
}
void Dyhg::Print( ostream &f )
{
f << "回归方程式:\n";
f << " Y = " << jg[0];
for( int i = 1; i < wcount; i ++ )
f << " + " << jg[i] << 'X' << i;
f << endl;
}