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的其他部分一样。