Exemplo n.º 1
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);
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 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);
        }
Exemplo n.º 4
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);
        }
Exemplo n.º 5
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;
        }
Exemplo n.º 6
0
 public static int Find(ValueIs guessIs, int target, Func <int, int> function)
 {
     return((int)Find(guessIs, target, (long x) => function((int)x)));
 }