示例#1
0
        public RBFSurface(IList<double[]> fitpoints, IBasisFunction basis,  PolyTypes poly, double relax)
        {
            switch (poly)
            {
                case PolyTypes.Plane:
                    Poly = new RBFPolynomials.Plane(this);
                    break;
                case PolyTypes.Paraboloid:
                    Poly = new RBFPolynomials.Paraboloid(this);
                    break;
                case PolyTypes.ParaboloidC:
                    Poly = new RBFPolynomials.ParaboloidConst(this);
                    break;
                case PolyTypes.Conic:
                    Poly = new RBFPolynomials.Conic(this);
                    break;
            }
            Basis = basis != null ? basis : new ThinPlateSpline();
               Relaxation = relax;

               if (fitpoints != null)
               {
                    Fit(fitpoints, null);
               }
        }
示例#2
0
 public RBFCurve(NsNode parent, string label, List<double[]> fitPoints, IBasisFunction basis, IRBFPolynomial poly, double relaxation)
     : base(label, parent)
 {
     Add(new CenterArrayNode(this));
     basis.CopyTo(this);
     poly.CopyTo(this);
     Relaxation = relaxation;
        OriginalFitPoints = fitPoints;
     Fit(fitPoints, relaxation);
 }
示例#3
0
        public RBFCurve(string label, List<double[]> fitPoints, IBasisFunction basis, IRBFPolynomial poly, double relaxation)
        {
            Basis = basis;
            Poly = poly;
            Relaxation = relaxation;

            if (fitPoints == null)
                return;

            Fit(fitPoints, relaxation);
        }
示例#4
0
        public RBFSurface(IList<double[]> fitpoints, IBasisFunction basis, IRBFPolynomial poly, double relax)
        {
            Basis = basis != null ? basis : new ThinPlateSpline();
            Poly = poly != null ? poly : new Plane(this);
               Relaxation = relax;

               if (fitpoints != null)
               {
                    Fit(fitpoints, null);
               }
        }
示例#5
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
            }
        }
示例#6
0
        public SurfaceRBF(NsNode parent, string label, List<double[]> fitpoints, IBasisFunction basis, IRBFPolynomial poly, double relax)
            : base(label, parent)
        {
            Add(new CenterArrayNode(this));
               basis.CopyTo(this);
               poly.CopyTo(this);
               Relaxation = relax;

               //double relaxation = LoadRBFData();

              // Add(new MeshNode("Surface", this));

               if (fitpoints != null)
               {
                    Regen(fitpoints, null);
               }
        }
示例#7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="pnt"></param>
 /// <param name="centers"></param>
 /// <param name="rbf"></param>
 /// <param name="doneEvent"></param>
 public PointThread(double[] pnt, List<IAttribute> centers, IBasisFunction rbf, ManualResetEvent doneEvent)
 {
     m_p = pnt;
        Rbf = rbf;
        List<ICenter<double>> tmp = new List<ICenter<double>>(centers.Count);
        centers.ForEach(delegate(IAttribute atr) { tmp.Add(atr as ICenter<double>); });
        m_centers = new CenterArrayNode(null, tmp);
        m_doneEvent = doneEvent;
 }
示例#8
0
 public SurfaceRBF(IBasisFunction basis)
 {
     m_basis = basis;
 }
示例#9
0
 private RBFNetwork(IBasisFunction basis)
 {
     m_basis = basis == null ? new ThinPlateSpline() : basis;
 }
示例#10
0
 private RBFNetwork2(uint nDim, IBasisFunction basis, PolyTypes poly)
 {
     m_rbfs = new RBFSurface[nDim];
     for (uint i = 0; i < nDim; i++)
     {
         m_rbfs[i] = new RBFSurface(null, basis, poly, 0);
     }
 }