Matlab fmincon拟合参数值略超出范围;这在允许范围内吗?
我使用的是Matlab fmincon拟合参数值略超出范围;这在允许范围内吗?,matlab,double,precision,Matlab,Double,Precision,我使用的是fmincon下限lb=[0,0,0]和上限ub=[1,1,5] 对于其中一次运行,我返回了第一个参数值-2e-16,其他运行的第二个参数值顺序为-1e-11 现在,我认为这些值实际上等于零,在浮点比较的公差范围内。但是我很不安,fmincon实际上返回了负数 为什么会这样?是因为我的边界不是用整数指定的吗?你说的“是因为我的边界不是用整数指定的吗?”是什么意思?你所有的边界都是整数。中间迭代。如果没有可运行的代码来查看您的函数以及如何准确调用fmincon,很难说真正发生了什么。相对
fmincon
下限lb=[0,0,0]
和上限ub=[1,1,5]
对于其中一次运行,我返回了第一个参数值-2e-16
,其他运行的第二个参数值顺序为-1e-11
现在,我认为这些值实际上等于零,在浮点比较的公差范围内。但是我很不安,fmincon
实际上返回了负数
为什么会这样?是因为我的边界不是用整数指定的吗?你说的“是因为我的边界不是用整数指定的吗?”是什么意思?你所有的边界都是整数。中间迭代。如果没有可运行的代码来查看您的函数以及如何准确调用
fmincon
,很难说真正发生了什么。相对于1
,值-2e-16
较小,但根据目标函数的缩放方式,它可能更重要。这是最终参数值,因此违反约束会令人不安。我认为提供给Matlab的所有数字在默认情况下都是双精度的?顺便说一句,关于目标函数在点0附近的行为,我认为它是零。同样,如果没有可运行的代码来查看您的函数以及如何准确调用fmincon
,很难说真正发生了什么。如果除上限和下限外还有其他约束,或者目标函数比较敏感(例如,三维具有完全不同的梯度或非线性),则解算器可能无法返回满足所有维度中所有要求的值(并且不知道哪些对您最重要)。是的,fmincon
默认情况下使用双精度,就像Matlab的其他部分一样。您所说的“这是因为我的边界没有使用整数指定吗?”是什么意思?您所有的边界都是整数。中间迭代。如果没有可运行的代码来查看您的函数以及如何准确调用fmincon
,很难说真正发生了什么。相对于1
,值-2e-16
较小,但根据目标函数的缩放方式,它可能更重要。这是最终参数值,因此违反约束会令人不安。我认为提供给Matlab的所有数字在默认情况下都是双精度的?顺便说一句,关于目标函数在点0附近的行为,我认为它是零。同样,如果没有可运行的代码来查看您的函数以及如何准确调用fmincon
,很难说真正发生了什么。如果除上限和下限外还有其他约束,或者目标函数比较敏感(例如,三维具有完全不同的梯度或非线性),则解算器可能无法返回满足所有维度中所有要求的值(并且不知道哪些对您最重要)。是的,fmincon
默认情况下使用双精度,就像Matlab的其他部分一样。