Ваша целевая функция возвращает NaN в отрицательных позициях.Вы можете легко проверить это:
Сначала добавьте значения выборки в целевой диапазон (-10 ... 10) и вычислите результат целевой функции.
Array<double> bounds = new double[] { -10.0, 10.0 };
Array<double> start = new double[] { 1 };
Array<double> y = Optimization.fmin(myfunc, start, lowerBound: bounds[0], upperBound: bounds[1]);
Array<double> range = linspace(-10.0, 10, 100);
Array<double> YinRange = apply(range, range, (a,b) => (double)myfunc(a));
Console.WriteLine("The minimum is found at");
Console.WriteLine("{0}", y);
Console.WriteLine("The value is");
Console.WriteLine("{0}", myfunc(y));
Теперь актуальнаязначения могут быть визуализированы во время сеанса отладки с использованием ArrayVisualizer:
fmin
возвращено примерно 0
, что кажется разумным, учитывая, что он пытаетсяигнорировать значения NaN.Согласно этому графику 0
фактически является минимальным и минимизатором.
См. Также: MSDN на Math.Pow