40 #include "EST_DMatrix.h" 
   50     for(
int i=0; i<x.
n(); ++i)
 
   53     return polynomial_fit(x,y,co_effs,weights,order);
 
   61     cerr << 
"polynomial_fit : order must be >= 1" << endl;
 
   66     cerr << 
"polynomial_fit : x and y must have same dimension" << endl;
 
   70     if(weights.
n() != y.
n()){
 
   71     cerr << 
"polynomial_fit : weights must have same dimension as x and y" << endl;
 
   76     cerr << 
"polynomial_fit : x and y must have at least order+1 elements" 
   89     for(
int row=0;row<y.
n();row++)
 
   91     y1[row] = y[row] * weights[row];
 
   92     for(
int col=0;col<=order;col++){
 
   93         A(row,col) = pow(x[row],(
double)col) * weights[row];
 
  108     if(!inverse(At_A,At_A_inv,singularity))
 
  110     cerr << 
"polynomial_fit : inverse failed (";
 
  111     if(singularity == -2)
 
  112         cerr << 
"unspecified reason)" << endl;
 
  113     else if(singularity == -1)
 
  114         cerr << 
"non-square !!)" << endl;
 
  117         cerr << 
"singularity at point : " << singularity;
 
  118         cerr << 
" = " << x[singularity] << 
"," << y[singularity];
 
  119         cerr << 
" )" << endl;
 
  125     co_effs = At_A_inv * At_y1;
 
  166     cerr << 
"diagonalise: non-square matrix ";
 
  194     for (i = I = 0; i < n; ++i, ++I)
 
  198     for (j = J = 0; j < n; ++j, ++J)
 
  217     s(0, i) = a.a(row, i);
 
  228     s(i, 0) = a.a(i, col);
 
  261     for (i = 0; i < n; ++i)
 
  262     for (j = 0; j < n; ++j)
 
  263         t(n - i - 1, n - j - 1) = a.a(i, j);
 
  283 static void row_swap(
int from, 
int to, 
EST_DMatrix &a)
 
  302     return inverse(a,inv,singularity);
 
  321     int r=0,this_row,all_zeros;
 
  397         singularity = ((this_row > j) ? this_row : j);
 
  409     return pseudo_inverse(a,inv,singularity);
 
  420     return inverse(a,inv,singularity);
 
  427     transpose(a,a_trans);
 
  428     multiply(a_trans,a,atrans_a);
 
  429     if (!inverse(atrans_a,atrans_a_inverse,singularity))
 
  431     multiply(atrans_a_inverse,a_trans,inv);
 
  444     cerr << 
"Tried to take determinant of non-square matrix\n";
 
  458     for (i = 0; i < n; ++i)
 
  460     p = (double)(i + j + 2);    
 
  462     A[i] = pow(-1.0, p) * determinant(sub(a, i, j));
 
  468     for (i = 0; i < n; ++i)
 
  493     cerr << 
"Can't make non-square identity matrix !" << endl;
 
  510     cerr << 
"Can't subtract vectors of differing lengths !" << endl;
 
  531     cerr << 
"Can't subtract vectors of differing lengths !" << endl;
 
  550     cerr << 
"Can't extract diagonal of non-square matrix !" << endl;
 
  561 double polynomial_value(
const EST_DVector &coeffs, 
const double x)
 
  565     for(
int i=0;i<coeffs.
length();i++)
 
  581     cerr << 
"Can't symmetrize non-square matrix !" << endl;
 
  606 make_random_matrix(
EST_DMatrix &M, 
const double scale)
 
  610     for(
int row=0;row<M.
num_rows();row++)
 
  613         r = scale * ((double)rand()/(double)RAND_MAX);
 
  619 make_random_vector(
EST_DVector &V, 
const double scale)
 
  623     for(
int i=0;i<V.
length();i++)
 
  625     r = scale * ((double)rand()/(double)RAND_MAX);
 
  631 make_random_symmetric_matrix(
EST_DMatrix &M, 
const double scale)
 
  635     cerr << 
"Can't make non-square symmetric matrix !" << endl;
 
  641     for(
int row=0;row<M.
num_rows();row++)
 
  642     for(
int col=0;col<=row;col++)
 
  644         r = scale * ((double)rand()/(double)RAND_MAX);
 
  651 make_random_diagonal_matrix(
EST_DMatrix &M, 
const double scale)
 
  655     cerr << 
"Can't make non-square symmetric matrix !" << endl;
 
  660     for(
int row=0;row<M.
num_rows();row++)
 
  661     M.
a_no_check(row,row) = scale * ((double)rand()/(double)RAND_MAX);
 
  671     cerr << 
"Can't make polynomial basis function : dimension mismatch !" << endl;
 
  672     cerr << 
"t.length()=" << t.
length();
 
  673     cerr << 
"   T.num_rows()=" << T.
num_rows() << endl;
 
  676     for(
int row=0;row<T.
num_rows();row++)
 
  678         T.
a_no_check(row,col) = pow(t[row],(
double)col);
 
  705     for(
int i=0;i<v1.
length();i++)
 
  706     for(
int j=0;j<v2.
length();j++)