1
我想最大化10個變量的函數。我用下面這段代碼做到這一點:在Matlab中使用約束最小化時的NaN?
b = [1 2 3 4 1 7 -1 -4 9 1].'; %// initial value of the decision variable
goal = @(b) -sum(F(b));
因爲我想最大化F
對於給定b
組參數,其中最後值應≥0我實現了優化如下:
%// lower bounds for decision variable
lb = [-inf(1,9) 0];
%// upper bounds for decision variable
ub = inf(1,10);
myfminoptions = optimset('Display','Iter', 'Algorithm','active-set');
theta1 = fmincon(goal, theta0, [],[],[],[], lb,ub, [], myfminoptions);
也就是說,我找到函數的負數的最小值,它應該與查找該函數的最大值相同。
我的問題是,對於每次迭代,我得到的一階最優性是Inf
,因此'Hessian not updated'
。
此外,我的功能NaN
在第一次迭代中的值,我簡直不明白。這可能是原因,但我不確定。
編輯
這是我使用的功能:
function ll = mytobit(theta);
global x y;
b=theta(1:size(theta,1)-1);
s=theta(size(theta,1));
ll = (y==0).*log(1-normcdf(x*b/s))+ (y>0).*(-0.5*(log(2*pi)+log(s^2)+(y-x*b).^2/s^2));
return;
當呼籲theta0的功能,我得到N個似然值(N是X中的行數和Y),我應該這樣做。
Y和X的一個例子:
Y = [0;0;2047;1890;1975]
X = [2300, 34, 1156, 0, 1;
2100, 35, 1225, 0, 1;
2760, 36, 1296, 1, 0;
2300, 37, 1369, 1, 0
2455, 38, 1444, 0, 0]
什麼是'功能(b)'?是'theta0 == b'? –
是的,對不起。 theta0 = B.該函數是一個用於一個模型的似然函數,該模型包含一些獨立變量(x)變量和一些因變量(y)。該函數然後返回數據集中每個人的一些似然值。 – Jesper
你可以粘貼該功能的玩具版本嗎?我希望能夠重現您的錯誤...原則上,您所做的事情沒有任何問題,所以我懷疑問題在於該功能。 –