我想解決fmincon的一個簡單問題,但它會返回一條錯誤消息。 我有2個函數f_2和f_1,我想單獨將它們各自最小化。我想在一個matlab函數中編寫f_1和f_2,即我的fun.m.然後我想使用主代碼中的索引來調用它們中的每一個。下面是代碼,你可以看到:使用fmincon matlab的錯誤
main code:
AA=[1 2 -1 -0.5 1];bb=-2;
xo=[1 1 1 1 1];
VLB=[-1 -1 -1 -1 -1];
VUB=[100 100 100 100 100];
for F_index = 1:2
[x,fval]=fmincon(@myfun,xo,AA,bb,[],[],VLB,VUB)
end
%%這裏是功能
function f = myfun(x, F_index)
if F_index == 1
f = norm(x)^2 - 4*x(4)*(x(2) + 3.4*x(5))^2 ;
end
if F_index == 2
f = 100*(x(3) - x(5)) + (3*x(1)+2*x(2) - x(3)/3)^2 + 0.01*(x(4) - x(5))
end
未定義的函數或變量 'F_索引'。
錯誤myfun(線2)如果F_索引== 1
錯誤fmincon(線564) initVals.f = feval(funfcn {3},X,varargin {:});在初始用戶提供 失敗:在主(第6行)
錯誤 [X,FVAL] = fmincon(@ myfun,XO,AA,BB,[],[],VLB,VUB) 引起客觀的 功能評估。 FMINCON無法繼續。
感謝您的編輯!好的,在這種情況下,最簡單的解決方案是定義不同的函數,'myfun1','myfun2'等等。但我更新後的答案中概述的解決方案也應該起作用。請注意,它最好使用'switch'語句而不是一系列'if's。 – 2015-02-06 14:36:32