1

我想生成1 x M带有变量的数组或矩阵,例如(请注意 sum 从i=1m-1): 在此处输入图像描述

因为我想Obj稍后将其用作通用数组取决于给定M的某些优化目的。我在 MATLAB 中尝试了以下代码,但该符号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 回答