使用MATLAB创建一般符号数组

时间:2015-11-20 07:23:51

标签: matlab symbolic-computation

我想生成包含变量的数组或1 x M矩阵(请注意,总和从i=1m-1): enter image description here

因为我想稍后使用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

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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 - 向量的最大值,我建议你这样做:

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