Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization ILNumerics:优化函数时返回意外的最小值_Optimization_Ilnumerics - Fatal编程技术网

Optimization ILNumerics:优化函数时返回意外的最小值

Optimization ILNumerics:优化函数时返回意外的最小值,optimization,ilnumerics,Optimization,Ilnumerics,我正在运行ILNumerics(发布时的最新版本)的试用版,但在运行Optimization.fmin优化器时得到了错误的最小值 最小值应为f(-5.218)=-3.342,搜索范围为-10目标函数在负位置返回NaN。您可以很容易地检查这一点: 首先,在目标范围(-10…10)上添加样本值,并计算目标函数的结果 Array<double> bounds = new double[] { -10.0, 10.0 }; Array<double> start = new do

我正在运行ILNumerics(发布时的最新版本)的试用版,但在运行
Optimization.fmin
优化器时得到了错误的最小值


最小值应为f(-5.218)=-3.342,搜索范围为-10目标函数在负位置返回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));
Array bounds=newdouble[]{-10.0,10.0};
数组开始=新的双精度[]{1};
数组y=Optimization.fmin(myfunc,start,lowerBound:bounds[0],upperBound:bounds[1]);
数组范围=linspace(-10.0,10100);
数组YinRange=apply(范围,范围,(a,b)=>(双精度)myfunc(a));
Console.WriteLine(“最小值位于”);
Console.WriteLine(“{0}”,y);
Console.WriteLine(“值为”);
Console.WriteLine(“{0}”,myfunc(y));
现在,可以使用ArrayVisualizer在调试会话期间可视化实际值:

fmin
返回了大致
0
,这似乎是合理的,因为它试图忽略NaN值。根据这个图,
0
实际上是最小值和最小值


另请参见:

您的价值是多少?对不起,您是对的。我使用了错误的目标函数。
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));