请注意,fmincom
这不一定给出精确的解决方案,而是根据特定标准对解决方案的良好近似。
结果的差异是合理的,因为fmincon
它是一种迭代算法,并且这些矩阵乘法(即使主要有零)最终将以不同的结果结束。Matlab 实际上会做这些矩阵乘法,直到他找到最好的结果。所以这些结果都是正确的,因为它们都接近解决方案。
x =
0.161261791015350 -0.000000117317860
x =
0.161261791015350 -0.000000117317860
x =
0.161261838607809 -0.000000077614999
x =
0.161261877075196 -0.000000096088746
1.0e-07
考虑到您没有指定停止标准,结果的差异在于哪个是体面的结果。您可以使用命令查看默认情况下拥有的内容
options = optimoptions('fmincon')
我的结果是
Default properties:
Algorithm: 'interior-point'
CheckGradients: 0
ConstraintTolerance: 1.0000e-06
Display: 'final'
FiniteDifferenceStepSize: 'sqrt(eps)'
FiniteDifferenceType: 'forward'
HessianApproximation: 'bfgs'
HessianFcn: []
HessianMultiplyFcn: []
HonorBounds: 1
MaxFunctionEvaluations: 3000
MaxIterations: 1000
ObjectiveLimit: -1.0000e+20
OptimalityTolerance: 1.0000e-06
OutputFcn: []
PlotFcn: []
ScaleProblem: 0
SpecifyConstraintGradient: 0
SpecifyObjectiveGradient: 0
StepTolerance: 1.0000e-10
SubproblemAlgorithm: 'factorization'
TypicalX: 'ones(numberOfVariables,1)'
UseParallel: 0
例如,我可以使用以下选项获得更接近的结果:
options1 = optimoptions('fmincon','Display','off', 'OptimalityTolerance', 1.0e-09);
结果是
x =
0.161262015455003 -0.000000000243997
x =
0.161262015455003 -0.000000000243997
x =
0.161262015706777 -0.000000000007691
x =
0.161262015313928 -0.000000000234186
您也可以尝试使用其他标准MaxFunctionEvaluations
等MaxFunctionEvaluations
,看看您是否可以获得更接近的结果......