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); } }
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); }
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); }
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); } }
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 } }
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); } }
/// <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; }
public SurfaceRBF(IBasisFunction basis) { m_basis = basis; }
private RBFNetwork(IBasisFunction basis) { m_basis = basis == null ? new ThinPlateSpline() : basis; }
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); } }