示例#1
0
        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
            }
        }