我想生成包含变量的数组或1 x M
矩阵(请注意,总和从i=1
到m-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
有人可以帮我解决这个问题吗?
答案 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
。