1

次のような変数を使用して配列または行列を生成したい(合計が からに1 x Mなることに注意してください): i=1m-1ここに画像の説明を入力

後で一般的な配列として使用したいので、いくつかの最適化のためObjに与えられたものに依存します。MMATLAB で次のコードを試しましたが、そのシンボリックLはサポートされていません。

function testSymbolic
M=3;
Obj = ones(1,M);
L = sym('L', [1 M]);

tempL = log(1-L);
for m=1:M
    Obj(1,m) =  log((L(m))/(1+L(m))) + sum(tempL(1,1:m-1),2);
end
Obj

ただし、個別に実行すると次のようになります。

L = sym('L', [1 3])
L =
[ L1, L2, L3]

L(1)
ans =
L1

誰かがこの問題を解決するのを手伝ってくれますか?

4

1 に答える 1

0

試す

M = 3;
for i = 1:M
    L(i) = sym(['L(' num2str(i) ')'])
end

tempL = log(1-L);
for m=1:M 
Obj(1,m) =  log((L(m))/(1+L(m))) + sum(tempL(1:m-1));
end

これは例えば

Obj(3)

ans =

log(L(3)/(L(3) + 1)) + log(1 - L(1)) + log(1 - L(2))

Obj編集: -vectorの最大値を計算したいことを考えると、これをお勧めします:

clear;
M = 3;

L = sym('L', [1 M]);

tempL = log(1-L);
for m=1:M 
    Obj(1,m) =  real(log((L(m))/(1+L(m))) + sum(tempL(1:m-1)));
end

F = matlabFunction(Obj,'vars',{L})
ft = @(v) (max (-F(v)));

これで最適化できますft

于 2015-11-20T09:44:16.900 に答える