1
最小化fmincon

我有一個總和的目標函數(非線性組合優化),它看起來像:制定求和目標函數在Matlab

minimize w(i)*w(j)*cv(i,j) for i = 1 to 10 and j = 1 to 10 
  • W¯¯是決定矢量
  • CV是已知的10×10矩陣

我已經制劑用於完成約束條件(項目約束條件的單獨.m文件)以及執行fmincon(下/上限,初始值的單獨.m文件以及用參數調用fmincon)。

我只是不知道如何做目標函數。我習慣於在GLPK中進行線性編程而不是在matlab中,所以我的表現並不好。

我目前有:

ObjectiveFunction.m

function f = obj(w) 

cv = [all the constants are in here] 

i = 1;  
j = 1;  
n = 10;  
var = 0;  

while i <= n  
     while j<=n  
      var = var + abs(w(i)*w(j)*cv(i, j));  
      j = j + 1;  
     end  
     i = i + 1;  
end 

f = var 

...但是這是行不通的。

任何幫助,將不勝感激!感謝提前:)

+0

如果您自己找到答案,請在下面張貼以備將來參考。或者,如果JesseB的答案幫助了你,請接受它。 –

回答

1

因此,這是從一個類我在幾年前花了,但它解決了一個非常類似的問題,你自己對於使用fminsearch的優化一些值。問題基本上是你有一個t,y,並且你想要一個連續的指數函數來表示t,y,用c1 * t。* exp(c2 * t)表示。我從中提出的教科書名爲Numerical Analysis by Timothy Sauer。不幸的是,我不記得確切的問題或章節,但它在某處。

C1和C2是由fminsearch最小化殘餘ý遞歸發現 - ((C1)* T * EXP((C2)* T))。嘗試複製並運行我的代碼下面得到一個感覺的東西:

%% Main code 
    clear all; 
    t = [1,2,3,4,5,6,7,8]; 
    y = [8,12.3,15.5,16.8,17.1,15.8,15.2,14]; 
    lambda0=[1 -.5]; 
    lambda=fminunc(@expdecayfun,lambda0, ... 
    optimset('LargeScale','off','Display','iter','TolX',1.e-6),t,y); 
    c1=lambda(1); 
    c2=lambda(2); 
    fprintf('Using the BFGS method through fminunc, c1 = %e\n',c1); 
    fprintf('and c2 = %e. Since these values match textbook values for\n', c2); 
    fprintf('c1 and c2, I will stop here.\n');   

    %% Index of functions: 
    % expdecayfun 
    function res=expdecayfun(lambda,t,y) c1=lambda(1); 
    c2=lambda(2); 
    r=y-((c1)*t.*exp((c2)*t)); 
    res=norm(r); 

希望這會有所幫助!

+0

嘿傑西-The代碼並沒有真正回答我的如何制定在MATLAB雙總和的問題,但鏈接到數值分析幫了不少忙,所以謝謝! – industrialeng