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; }
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; }
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); }
/// <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); }
public void SetKrigingModel(IKrigingModel model) { this.KrigingModel = model; }
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); }
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++; } }
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; }
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; }
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; }