2012-02-19 10 views
1

私はこの機能を使用して最大値を見つけたい:リニアプログラミングfmincon。なぜコードは動作しませんか?

Function f = myfun(a) 
    a = {'a1';'a2';'a3';'a4'}; 
    x = rand(4,5); 
    S = -x.*a; 
    SS = sum(S); 
    [~,ix] = sort(SS); 
    R = rand(1,5) 
    SR = R(ix); 
    f = sum(SR(1:10)); 
    Aeq=ones(4,1); 
    beq=1; 
    a0=[.25 .25 .25 .25]'; 
    [a,f] = fmincon(@myfun,a0,[],[],Aeq,beq);  
end 

コードは、エラーがスローされます。

error: Undefined function or method 'mtimes' for input arguments of type 'cell'

は理由を知っていますか?

+0

これはどのように機能しませんか? –

+0

例えば、 'a'を定義するように頼みます。 – user1205030

+0

エラー:未定義の関数またはメソッド 'mtimes'は、 'cell'型の入力引数です。 – user1205030

答えて

1

示されているように、あなたの関数は有効ではありませんMatlab。 'f'ではなく 'Function'で 'F'を使用すると警告が表示されますが、関数定義の最後に 'end'があると構文エラーです。それらのエラーを訂正し、デバッグモードで関数を実行してください。あなたの次の問題が

S = -x.*a; 

がどこRHS定義されていないことである(この場合は「」)以前の宣言は、それを作ったセル配列、です。最初の行で 'a'が関数の引数になると期待するのは非常に奇妙ですが、l2では4つの文字列を含むセル配列として定義します。

+1

これは物事をうまくまとめますが、aがセル配列ではなくベクトルであることを確認しても、その行には次元エラーが残っています。 S = bsxfun(@times、-x、a) – prototoast

+0

'a'はどのように定義できますか? Sは実際に次のように計算されます。s1 = -x(1、:)* a1; s2 = -x(2、:)* a2 ..... s4 = -x(4、:)* a4。 – user1205030

+3

@ user1205030:歩く前にあなたが走ろうとしていることを恐れています。私はあなたが(a)あなたが望むことができるまでMatlabのコマンドウィンドウに一連のコマンドを書き込むこと、(b)関数の書き方についての最初のドキュメントを読んでから、(c)コマンドのシーケンスを有効な関数に編集すること定義。 –

関連する問題