public static void fit_mat(out double[,] A, CenterArrayNode CenterNode, IBasisFunction rbf, IRBFPolynomial Poly, double Relaxation) { // find out int dim = CenterNode.Centers.Count; int fits = dim; fits += Poly.Terms;// for polynomial terms A = new double[fits, fits]; // create A matrix double r; double a = 0;//for scaling relaxation parameter int i, j; for (i = 0; i < dim; ++i) { for (j = i + 1; j < dim; ++j) { // PHI11 - PHINN r = CenterNode[j].radius(CenterNode[i].ToArray()); A[i, j] = A[j, i] = rbf.val(r); // symmetric a += 2 * r; } } a /= dim * dim; // calculate relaxation normalizer //a /= fits * fits; // fits = dims + Poly.Terms(3) //a /= Math.Pow(fits, 2); // calculate fit mat diagonals and poly terms double relax = Relaxation; for (i = 0; i < dim; ++i) { //A[i, i] = BLAS.is_equal(relax, 0) ? 1 : a * a * relax; A[i, i] = a * a * relax; for (j = 0; j < Poly.Terms; j++) A[i, dim + j] = A[dim + j, i] = Poly.FitMat(i, j); #region old //A[i, dim + 0] = A[dim + 0, i] = Centers[i][0]; //A[i, dim + 1] = A[dim + 1, i] = Centers[i][1]; //// poly values: Ax + By + C POLY //A[i, dim + 2] = A[dim + 2, i] = 1; // poly values: Ax + By + Cxy POLY //A[i, dim + 2] = A[dim + 2, i] = Centers[i][1] * Centers[i][0]; // parabaloid values: A(x-h)^2 + B(y-k)^2 POLY //A[i, dim + 0] = A[dim + 0, i] = Math.Pow(Centers[i][0] - middle[0],2); //A[i, dim + 1] = A[dim + 1, i] = Math.Pow(Centers[i][1] - middle[1], 2); #endregion } }