public static IKrigingModel selectModel(KrigingModelType value) { IKrigingModel model; switch (value) { case KrigingModelType.circular: model = new ModelCircular(); break; case KrigingModelType.exponential: model = new ModelExponential(); break; case KrigingModelType.gaussian: model = new ModelGaussian(); break; case KrigingModelType.linear: model = new ModelLineal(); break; case KrigingModelType.spherical: model = new ModelSpherical(); break; default: model = new ModelExponential(); break; } return(model); }
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 IKrigingModel getFunctionDefault(KrigingModelType model) { return(getFunction(model, _spatial.getSemivarianceStatistic().Mean, _spatial.getLag().lagSize *_spatial.getLag().numLags / 2, 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); }