1

次のような合計目的関数 (非線形ポートフォリオ最適化) があります。

minimize w(i)*w(j)*cv(i,j) for i = 1 to 10 and j = 1 to 10
  • wは決定ベクトルです。
  • cvは既知の 10 行 10 列の行列です

制約 (プロジェクト制約用の別の .m ファイル) と fmincon の実行 (下限/上限、初期値、および引数を指定して fmincon を呼び出すための別の .m ファイル) の定式化を行いました。

目的関数の実行方法がわかりません。私は、matlab ではなく GLPK での線形プログラミングに慣れているので、あまりうまくいっていません。

私は現在持っています:

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

...しかし、これは機能していません。

どんな助けでも大歓迎です!前もって感謝します :)

4

1 に答える 1

1

つまり、これは私が数年前に受講したクラスからのものですが、いくつかの値を最適化するためのfminsearchの使用に関して、あなた自身と非常によく似た問題に対処しています。問題は本質的に、at、yがあり、c1 *t。*exp(c2 * t)の観点からt、yを表す連続指数関数が必要なことです。私が値を上げた教科書は、ティモシー・ザウアーによる数値解析と呼ばれています。残念ながら、正確な問題や章は覚えていませんが、どこかにあります。

c1とc2は、残余yを最小化する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);

お役に立てれば!

于 2012-12-01T23:28:20.960 に答える