private double[,] GetArray(FunctionTableItem[] fun, ValueIs value = ValueIs.Magnitude) { double[,] temp = new double[2, fun.Length]; for (int i = 0; i < fun.Length; i++) { switch (value) { case ValueIs.Magnitude: temp[0, i] = fun[i].Value.Magnitude; break; case ValueIs.Real: temp[0, i] = fun[i].Value.Real; break; case ValueIs.Img: temp[0, i] = fun[i].Value.Imaginary; break; case ValueIs.Phase: temp[0, i] = fun[i].Value.Phase; break; } temp[1, i] = fun[i].Arg; } return(temp); }
public static long Find(ValueIs guessIs, long target, Func <long, long> function) { for (var scale = 1L; scale > 0; scale *= 10) { var result = function(scale); if (result == target) { return(target); // quite unlikely } if (result > target) { return(Find(scale / 10, scale)); } } throw new Exception("Number too high to guess"); long Find(long begin, long end) { //Console.WriteLine($"Guess: Find {begin} {end}"); var guess = (end + begin) / 2; var result = function(guess); if (result == target) { return(guess); // bingo } if (guess == begin) { // No more guesses - we didn't find it switch (guessIs) { case ValueIs.Exactly: throw new Exception("No exact match"); case ValueIs.ExactOrHigherThan: while (result < target) { result = function(++guess); } return(guess); case ValueIs.ExactOrLowerThan: while (result > target) { result = function(--guess); } return(guess); } } return(result > target ? Find(begin, guess) : Find(guess, end)); } }
public void AddInfo(FunctionTableItem[] fun, ValueIs value = ValueIs.Magnitude, bool addChart = false) { Excel.Series series; Excel.Range temp; range = range.get_Resize(2, fun.Length); range.set_Value(Missing.Value, GetArray(fun, value)); if (addChart) { LastIndex += chartHeight + 10; chartObject = charts.Add(400, LastIndex, chartWidth, chartHeight); } currentChart = chartObject.Chart; series = ((Excel.SeriesCollection) currentChart.SeriesCollection(Type.Missing)).NewSeries(); temp = range.get_Resize(1, fun.Length); series.Values = temp; series.XValues = temp.get_Offset(1, 0); currentChart.ChartType = Excel.XlChartType.xlXYScatterSmoothNoMarkers; range = range.get_Offset(3, 0); }
public void AddInfo(FunctionTableItem[] fun, ValueIs value = ValueIs.Magnitude, bool addChart = false) { Excel.Series series; Excel.Range temp; range = range.get_Resize(2, fun.Length); range.set_Value(Missing.Value, GetArray(fun, value)); if (addChart) { LastIndex += chartHeight + 10; chartObject = charts.Add(400, LastIndex, chartWidth, chartHeight); } currentChart = chartObject.Chart; series = ((Excel.SeriesCollection)currentChart.SeriesCollection(Type.Missing)).NewSeries(); temp = range.get_Resize(1, fun.Length); series.Values = temp; series.XValues = temp.get_Offset(1, 0); currentChart.ChartType = Excel.XlChartType.xlXYScatterSmoothNoMarkers; range = range.get_Offset(3, 0); }
private double[,] GetArray(FunctionTableItem[] fun, ValueIs value = ValueIs.Magnitude) { double[,] temp = new double[2, fun.Length]; for(int i = 0; i < fun.Length ; i++) { switch(value) { case ValueIs.Magnitude: temp[0, i] = fun[i].Value.Magnitude; break; case ValueIs.Real: temp[0, i] = fun[i].Value.Real; break; case ValueIs.Img: temp[0, i] = fun[i].Value.Imaginary; break; case ValueIs.Phase: temp[0, i] = fun[i].Value.Phase; break; } temp[1, i] = fun[i].Arg; } return temp; }
public static int Find(ValueIs guessIs, int target, Func <int, int> function) { return((int)Find(guessIs, target, (long x) => function((int)x))); }