2013-12-07 58 views
0

我這樣做MatLab fmincon約束優化「輸入參數不足」。

function f=objfun(w) 
a=0.5 
w0=[0.1;0.2;0.3]; 
f=(a^2)/2 + w(1)+ w(2)+ w(3); 

[w,fval]=fmincon('objfun',w0,[],[],[],[],[],[],'constraint') 

但我得到這個錯誤訊息。

Error using objfun (line 3) 
Not enough input arguments. 

它說什麼問題?

我從

http://www.math.colostate.edu/~gerhard/classes/331/lab/fmincon.html 

瞭解到fmincon,它告訴我,像這樣

function f=objfun(x) 

f=x(1)^4-x(1)^2+x(2)^2-2*x(1)+x(2); 

代碼將是第一線做約束優化。

出了什麼問題?

+1

您的代碼混合在一起,例如你在objfun中定義'w0'。而且,'fmincon'至少需要四個輸入參數:'(fun,x0,A,b)'。也許你應該首先從文檔中瞭解這個功能:http://www.mathworks.com/help/optim/ug/fmincon.html –

+0

你學習Matlab的第一件事:在使用或學習新的函數,在Matlab命令窗口中鍵入'help nameoffunction'並讀取。然後(或者相反),您可以單擊幫助底部的鏈接,也可以鍵入'doc nameoffunction'在一個漂亮的瀏覽器窗口中深入閱讀。使用Google搜索功能的名稱應該只在您耗盡這些資源並且意識到您發現的內容可能不適用於您的Matlab版本之後才能完成。 – horchler

+0

@ A.Donda最初我爲我的代碼寫了一個簡化版本的stackoverflow。但在我的代碼中,fmincon就像[x,fval] = fmincon('objfun',w0,[],[],[],[],[],[],'constraint'),所以輸入參數的不足不是問題。 – user1849133

回答

2

我相信你需要傳遞一個函數句柄fmincon。從文檔http://www.mathworks.com/help/optim/ug/fmincon.html

x = fmincon(@myfun,x0,A,b) 

其中myfun是MATLAB®功能,如

function f = myfun(x) 
f = ...   % Compute function value at x 

嘗試傳遞一個函數句柄fmincon。我假設約束是你的非線性約束函數,它也應該是一個函數句柄。我還假設你不是從你的目標函數中調用fmincon。如果是這樣的話,我想你也會有一些事情是這樣的:

objfun.m

function f = objfun(w) 
    a=0.5; 
    f=(a^2)/2 + w(1)+ w(2)+ w(3); 
    return 
end 

的main.m

w0=[0.1;0.2;0.3]; 
[w,fval]=fmincon(@objfun,w0,[],[],[],[],[],[],@constraint)