/// <summary> /// Gets the value at a specified time /// Currently, does not interpolate /// </summary> /// <param name="Time"></param> /// <param name="interpolate"></param> /// <returns></returns> public double GetValue(DateTime Time, InterpolationMethods interpolate) { double value = DeleteValue; int index = GetIndexOfValue(Time); switch (interpolate) { case InterpolationMethods.Linear: break; case InterpolationMethods.CubicSpline: break; case InterpolationMethods.DeleteValue: if (index < Count & index >= 0) { if (Items[index].Time == Time) //Time has to be correct { value = Items[index].Value; } } break; case InterpolationMethods.Nearest: break; default: break; } return(value); }
public void GapFill(InterpolationMethods Method, TimeSpan Timestep) { switch (Method) { case InterpolationMethods.Linear: break; case InterpolationMethods.CubicSpline: break; case InterpolationMethods.Nearest: break; case InterpolationMethods.DeleteValue: for (int i = Items.Count - 1; i > 0; i--) { while (Items[i - 1].EndTime != Items[i].StartTime) { double newvalue = DeleteValue; Items.Insert(i, new TimeSpanValue(Items[i].StartTime.Subtract(Timestep), Items[i].StartTime, newvalue)); } } break; default: break; } }
private List <double> _RadList; //For cressman analysis #endregion #region Constructor /// <summary> /// Constructor /// </summary> public InterpolationSetting() { _GridDataPara.XNum = 50; _GridDataPara.YNum = 50; _GridInterMethod = InterpolationMethods.IDW_Radius; _MinPointNum = 1; _Radius = 1; _RadList = new List <double>(); _RadList.AddRange(new double[] { 10, 7, 4, 2, 1 }); }
// CONSTRUCTORS public MainForm() { InitializeComponent(); a = -1.0; b = 1.0; n = 20; eps = 1e-15; f = (x) => x *Pow(3, x); interpolation = new InterpolationMethods(a, b, n, f); leastSquares = new LeastSquaresMethod(a, b, n, f); mistake = new CalcMistake(); DrawGraphics(); }
/// <summary> /// Set grid interpolation parameters /// </summary> /// <param name="minX">mininum x</param> /// <param name="maxX">maxinum x</param> /// <param name="minY">mininum y</param> /// <param name="maxY">maxinum y</param> /// <param name="xNum">x number</param> /// <param name="yNum">y nunmber</param> /// <param name="aInterMethod">interpolation method</param> /// <param name="radList">radius</param> public InterpolationSetting(double minX, double maxX, double minY, double maxY, int xNum, int yNum, string aInterMethod, List <double> radList) { GridDataSetting aGDP = new GridDataSetting(); aGDP.DataExtent.minX = minX; aGDP.DataExtent.maxX = maxX; aGDP.DataExtent.minY = minY; aGDP.DataExtent.maxY = maxY; aGDP.XNum = xNum; aGDP.YNum = yNum; _GridDataPara = aGDP; _GridInterMethod = (InterpolationMethods)Enum.Parse(typeof(InterpolationMethods), aInterMethod, true); _RadList = radList; _MinPointNum = 1; }
/// <summary> /// Set grid interpolation parameters /// </summary> /// <param name="minX">mininum x</param> /// <param name="maxX">maxinum x</param> /// <param name="minY">mininum y</param> /// <param name="maxY">maxinum y</param> /// <param name="xNum">x number</param> /// <param name="yNum">y nunmber</param> /// <param name="aInterMethod">interpolation method</param> /// <param name="radius">radius</param> /// <param name="minNum">mininum number</param> public InterpolationSetting(double minX, double maxX, double minY, double maxY, int xNum, int yNum, string aInterMethod, float radius, int minNum) { GridDataSetting aGDP = new GridDataSetting(); aGDP.DataExtent.minX = minX; aGDP.DataExtent.maxX = maxX; aGDP.DataExtent.minY = minY; aGDP.DataExtent.maxY = maxY; aGDP.XNum = xNum; aGDP.YNum = yNum; _GridDataPara = aGDP; _GridInterMethod = (InterpolationMethods)Enum.Parse(typeof(InterpolationMethods), aInterMethod, true); _Radius = radius; _MinPointNum = minNum; _RadList = new List <double>(); _RadList.AddRange(new double[] { 10, 7, 4, 2, 1 }); }
public void GapFill(InterpolationMethods Method) { if (this.TimeStepSize == TimeStepUnit.None) { throw new Exception("Cannot GapFill when the timestep unit is not set"); } List <int> Xvalues = new List <int>(); List <double> Yvalues = new List <double>(); Xvalues.Add(0); Yvalues.Add(Items.First().Value); int counter = 0; for (int i = 1; i < Items.Count; i++) { DateTime next = Items[i - 1].Time; while ((next = TSTools.GetNextTime(next, this.TimeStepSize)) <= Items[i].Time) { counter++; } Yvalues.Add(Items[i].Value); Xvalues.Add(counter); } if (Method == InterpolationMethods.DeleteValue) { for (int i = 1; i < Yvalues.Count; i++) { for (int j = Xvalues[i - 1] + 1; j < Xvalues[i]; j++) { Items.Insert(j, new TimeStampValue(TSTools.GetNextTime(Items[j - 1].Time, this.TimeStepSize), DeleteValue)); } } } else { throw new Exception("Not implemented yet"); } }