我正在尝试计算具有多个变量的函数的最小值,我唯一的约束是变量的上限和下限。我遇到的问题是它fmincon
不会改变我给它的初始猜测值的输入值。
这是我得到的输出:
initGuess = 0.6159
x = 0.6159
初始点是满足约束的局部最小值。
优化完成是因为在初始点,目标函数在可行方向上不递减到函数容差的选定值内,并且约束满足在约束容差的选定值内。
<stopping criteria details>
This is my call to fmincon:
A = [];
b = [];
Aeq = [];
beq = [];
lb = 0;
ub = 1;
initGuess = 0.6159;
options = optimset('TolX',1e-12,'TolCon',1e-12,'TolFun',1e-12,'Algorithm','interior-point');
[optAM,optBC] = fmincon(@(x) cmpBC(x,epochDate,epochDate2,root,rvfm),[initGuess],A,b,Aeq,beq,lb,ub,nonlcon,options);
我尝试了多个初始猜测并且发生了同样的事情,请帮助不确定如何解决这个问题。
编辑****
cmpBC:
function output = cmpBC(x,epochDate,epochDate2,root,rvfm)
cmdParamString = ['HPOP */Satellite/COMDEV_Sat Drag On 2.2 ' num2str(x(1)) ' "NRLMSISE 2000" File "C:\Program Files (x86)\AGI\STK 10\Data\sw20100101.txt"'];
root.ExecuteCommand(cmdParamString);
cmd = horzcat('Propagate */Satellite/COMDEV_Sat', ' "', epochDate, '" "', epochDate2,'"');
root.ExecuteCommand(cmd);
cmd = 'Report_RM */Satellite/COMDEV_Sat Style "J2000 Position Velocity"';
variableB = root.ExecuteCommand(cmd);
theSize = variableB.count;
posArray2=variableB.Item(theSize-2);
C = strread(posArray2,'%s','delimiter',',');
output = norm([str2num(C{2})-rvfm(1) str2num(C{3})-rvfm(2) str2num(C{4})-rvfm(3)]);
%rvfm is the known position of the satellite
end