Ejemplo n.º 1
0
        private IKrigingModel SelectModel(Model value)
        { 
            IKrigingModel model;
            switch (value)
            {
                case Model.Circular:
                     model = new ModelCircular();
                    break;
                case Model.Exponential:
                    model= new ModelExponential();
                    break;
                case Model.Gaussian:
                    model= new ModelGaussian();
                    break;
                case Model.Linear:
                    model = new ModelLineal();
                    break;
                case Model.Spherical:
                    model= new ModelSpherical();
                    break;
                default:
                    model= new ModelExponential();
                    break;
            }
            return model;


        }
Ejemplo n.º 2
0
 public FitModel(SpatialContinuity spatial, Model initialModel)
 {
     this.model = SelectModel(initialModel);
     this.model.C0 = 0;
     this.model.C1 = spatial.SemivarianceStatistic.Max;
     this.model.Range = spatial.NumberOfLags * spatial.LagSize / 3;
 }
Ejemplo n.º 3
0
 public IKrigingModel setFunction(KrigingModelType model, double sill, double range, double nugget)
 {
     _krigingModel        = selectModel(model);
     _krigingModel.Nugget = nugget;
     _krigingModel.Sill   = sill;
     _krigingModel.Range  = range;
     onChangedKriginParameter(EventArgs.Empty);
     return(_krigingModel);
 }
        public void DrawCurve(IKrigingModel method)
        {
            double maxDist = spatial.GetDistancesValues().Max()/ 150;
            double[] dist = new double[150];
            double[] sem = new double[150];

            for (int i = 0; i < 150; i++) {
                dist[i] = i * maxDist;
                sem[i] = method.GetValue(dist[i]);
            }
            DrawCurve("Model", dist, sem, Color.Red);


        }
        public void DrawCurve(IKrigingModel method, string name, Color color)
        {
            double maxDist = spatial.GetDistanceStatistic().Max / 150;
            double[] dist = new double[150];
            double[] sem = new double[150];

            for (int i = 0; i < 150; i++)
            {
                dist[i] = i * maxDist;
                sem[i] = method.GetValue(dist[i]);
            }
            DrawCurve(name , dist, sem, color);


        }
Ejemplo n.º 6
0
 /// <summary>
 /// Initializes a new instance of the Kriging class
 /// </summary>
 /// <param name="shapeLayer">Shapefile (POINTS)</param>
 /// <param name="idField">Position of field that contains the Z value</param>
 /// <param name="model">This class provides the model that will be used</param>
 public UniversalKriging(IFeatureSet shapeLayer, int idField, IKrigingModel model)
     : base(shapeLayer, idField)
 {
     this.method = "Universal Kriging";
     if (model != null)
     {
         this.mmodel = model;
     }
     this.CalculateDistances();
     //  this.CreatePoints(shapeLayer, idField);
     ////  GenerateMatrix(ref msemiVarTeo, ref inverMatrix, ref mdistances);
 }
Ejemplo n.º 7
0
 public void SetKrigingModel(IKrigingModel model)
 {
     this.KrigingModel = model;
 }
Ejemplo n.º 8
0
        public IKrigingModel getFunction(KrigingModelType model, double sill, double range, double nugget)
        {
            _msill    = new Parameter(sill);
            _mrange   = new Parameter(range);
            _mnugget  = new Parameter(nugget);
            _distance = new Parameter();


            // Parameter[] regressionParameters=null;
            //  Parameter[] observedParameters = null; ;
            _observedParameters = new[] { _distance };
            // regressionParameters = new Parameter[] { mrange, msill,mnugget };
            defineParametersCalculation();
            switch (model)
            {
            case KrigingModelType.circular:
                _krigingModel       = new ModelCircular();
                _regressionFunction = () =>
                                      _distance > 0 && _distance <= Math.Abs(_mrange)
                            ? _mnugget +
                                      (((2 * Math.Abs(_msill)) / Math.PI) *
                                       (((_distance / Math.Abs(_mrange)) *
                                         Math.Sqrt(1 - ((_distance * _distance) / (Math.Abs(_mrange) * Math.Abs(_mrange))))) +
                                        Math.Asin(_distance / Math.Abs(_mrange))))
                            : _distance > Math.Abs(_mrange) ? _mnugget + Math.Abs(_msill) : 0
                ;
                break;

            case KrigingModelType.exponential:
                _krigingModel       = new ModelExponential();
                _regressionFunction = () => _distance > 0 ?
                                      Math.Abs(_mnugget) + (Math.Abs(_msill) * (1 - Math.Exp(-3 * Math.Abs(_distance) / Math.Abs(_mrange))))
                        : 0;
                break;

            case KrigingModelType.gaussian:
                _krigingModel       = new ModelGaussian();
                _regressionFunction = () => _distance > 0 ?
                                      Math.Abs(_mnugget) +
                                      (Math.Abs(_msill) *
                                       (1 -
                                        Math.Exp(-3 * (Math.Abs(_distance) / Math.Abs(_mrange)) * (Math.Abs(_distance) / Math.Abs(_mrange)))))
                        : 0;
                break;

            case KrigingModelType.spherical:
                _krigingModel       = new ModelSpherical();
                _regressionFunction = () =>
                                      _distance > 0 && _distance <= Math.Abs(_mrange) ?
                                      Math.Abs(_mnugget) + (Math.Abs(_msill) * ((1.5 * (_distance / Math.Abs(_mrange))) -
                                                                                (0.5 * (_distance / Math.Abs(_mrange)) *
                                                                                 (_distance / Math.Abs(_mrange)) *
                                                                                 (_distance / Math.Abs(_mrange))))) :
                                      _distance > Math.Abs(_mrange) ?
                                      Math.Abs(_mnugget) + Math.Abs(_msill) :
                                      0;

                break;

            case KrigingModelType.linear:
                _krigingModel       = new ModelLineal();
                _regressionFunction = () =>
                                      _distance < _mrange ?  _mnugget + ((_msill / _mrange) * Math.Abs(_distance)): _mnugget + _msill;

                break;
            }

            if (_regressionParameters.Length == 0)
            {
                _krigingModel.Range = range;
                _krigingModel.Sill  = sill;
                if (nugget < 0)
                {
                    _krigingModel.Nugget = 0;
                }
                else
                {
                    _krigingModel.Nugget = nugget;
                }
                onChangedKriginParameter(EventArgs.Empty);
                return(_krigingModel);
            }

            if (_regressionParameters != null)
            {
                try {
                    var levenbergMarquardt = new LevenbergMarquardt(_regressionFunction, _regressionParameters,
                                                                    _observedParameters, _z);

                    for (int i = 0; i < 50; i++)
                    {
                        levenbergMarquardt.Iterate();
                    }
                    defineParametersCalculationValues(sill, range, nugget);
                } catch {
                    _krigingModel.Range = range;
                    _krigingModel.Sill  = sill;
                    if (nugget < 0)
                    {
                        _krigingModel.Nugget = 0;
                    }
                    else
                    {
                        _krigingModel.Nugget = nugget;
                    }
                    onChangedKriginParameter(EventArgs.Empty);
                    return(_krigingModel);
                }
            }

            onChangedKriginParameter(EventArgs.Empty);
            return(_krigingModel);
        }
Ejemplo n.º 9
0
        private void uxModels_SelectedIndexChanged(object sender, EventArgs e)
        {

            int j = 0;
            foreach (Model i in Enum.GetValues(typeof(Model)))
            {
                if (uxModels.SelectedIndex == j)
                {
                    modTemp = TheoreticalModel.SelectModel(i);
                    if (uxRangeMajor.Text != "" && uxPartialSill.Text != "" && uxNugget.Text != "")
                    {
                        modTemp.Range = Convert.ToDouble(uxRangeMajor.Text);
                        modTemp.C1 = Convert.ToDouble(uxPartialSill.Text);
                        modTemp.C0 = Convert.ToDouble(uxNugget.Text);
                    }
                }
                j++;
            }

        }
Ejemplo n.º 10
0
        private void FillModelForm()
        {
         if(this.theo == null)
                return;


            this.SetModel(this.theo.KrigingModel.ModelType);
            MajorRange = this.theo.KrigingModel.Range.ToString();
            Nugget = this.theo.KrigingModel.C0.ToString();
            Sill = this.theo.KrigingModel.C1.ToString();
            modTemp = this.theo.KrigingModel;

        }
Ejemplo n.º 11
0
        public IKrigingModel GetFunction(Model model, double sill, double range, double nugget)
        {


             msill = new Parameter(sill);
             mrange = new Parameter(range);
             mnugget = new Parameter(nugget);
             distance = new Parameter();


            // Parameter[] regressionParameters=null;
           //  Parameter[] observedParameters = null; ;
             observedParameters = new Parameter[] { distance };
            // regressionParameters = new Parameter[] { mrange, msill,mnugget };
            DefineParametersCalculation();
            switch (model)
            { 
                case Model.Circular:
                    krigingModel = new ModelCircular();
                    regressionFunction =  () =>
                         distance > 0 && distance <= Math.Abs(this.mrange) ? this.mnugget + (((2 * Math.Abs(this.msill)) / Math.PI) * (((distance / Math.Abs(this.mrange)) * Math.Sqrt(1 - ((distance * distance) / (Math.Abs(this.mrange) * Math.Abs(this.mrange))))) + Math.Asin(distance / Math.Abs(this.mrange)))) : distance >Math.Abs(this.mrange)?this.mnugget +Math.Abs(this.msill):0
                         ;
                    break;
                case Model.Exponential:
                    krigingModel = new ModelExponential();
                    regressionFunction = () =>distance>0?
                   Math.Abs(this.mnugget) + (Math.Abs(this.msill) * (1 - Math.Exp(-3 * Math.Abs(distance) / Math.Abs(this.mrange)))):0;
                    break;
                case Model.Gaussian:
                    krigingModel = new ModelGaussian();
                    regressionFunction = () =>distance>0?
                    Math.Abs(this.mnugget) + (Math.Abs(this.msill) * (1 - Math.Exp(-3 * (Math.Abs(distance) / Math.Abs(this.mrange)) * (Math.Abs(distance) / Math.Abs(this.mrange))))):0;
                    break;
                case Model.Spherical:
                    krigingModel = new ModelSpherical();
                    regressionFunction = () =>

                                    distance > 0 && distance <= Math.Abs(this.mrange) ?
                                             Math.Abs(this.mnugget) + (Math.Abs(this.msill) * ((1.5 * (this.distance / Math.Abs(this.mrange))) -
                                             (0.5 * (this.distance / Math.Abs(this.mrange)) * (this.distance / Math.Abs(this.mrange)) * (this.distance / Math.Abs(this.mrange))))) :
                                             distance > Math.Abs(this.mrange) ?
                                                  Math.Abs(this.mnugget) + Math.Abs(this.msill) :
                                                  0; 

                    break;
            }

            if (regressionParameters.Length == 0)
            {
                krigingModel.Range =range;
                krigingModel.C1 = sill ;
                if (nugget < 0)
                {
                    krigingModel.C0 = 0;
                }
                else
                {
                    krigingModel.C0 = nugget;
                }
                OnChangedKriginParameter(EventArgs.Empty);
                return krigingModel;

            }

             LevenbergMarquardt levenbergMarquardt;

             if (regressionParameters != null)
             {
                 try
                 {

                     levenbergMarquardt = new LevenbergMarquardt(regressionFunction, regressionParameters, observedParameters, z,2);

                     for (int i = 0; i < 50; i++)
                     {
                         levenbergMarquardt.Iterate();
                     }
                     DefineParametersCalculationValues(sill, range, nugget);
                
                 }
                 catch
                 {

                     DefineParametersCalculationValues(sill, range, nugget);
                     krigingModel.Range = range;
                     krigingModel.C1 = sill;
                     if (nugget < 0)
                     {
                         krigingModel.C0 = 0;
                     }
                     else
                     {
                         krigingModel.C0 = nugget;
                     }
                     OnChangedKriginParameter(EventArgs.Empty);
                     return krigingModel;
                 
                 }

             }

             OnChangedKriginParameter(EventArgs.Empty);
             return krigingModel;

        }
Ejemplo n.º 12
0
 public IKrigingModel SetFunction(Model model, double sill, double range, double nugget)
 {
     krigingModel = SelectModel(model);
     krigingModel.C0=nugget;
     krigingModel.C1=sill;
     krigingModel.Range=range;
     OnChangedKriginParameter(EventArgs.Empty);
     return krigingModel;
 }