我需要遍历求得最优解,也就是本题目中确定“money(i)”的取值,但是MATLAB循环的过程用for的话会出现:
表达式无效。调用函数或对变量进行索引时,请使用圆括号。否则,请检查不匹配的分隔符。
请问如何解决
i= 1:20;
xi = 110.25./(i.*(21-i));
val = 10.*i;
num_vali = 21-i;
money = zeros(1,20);
finalmoneyi = zeros(0,20);
resultmoneyi = zeros(0,20);
resultE = 0;
for money(1) = 0:3.125*val(1)
for money(2) = 0:3.125*val(2)
for money(3) = 0:3.125*val(3)
for money(4) = 0:3.125*val(4)
for money(5) = 0:3.125*val(5)
for money(6) = 0:3.125*val(6)
for money(7) = 0:3.125*val(7)
for money(8) = 0:3.125*val(8)
for money(9) = 0:3.125*val(9)
for money(10) = 0:3.125*val(10)
for money(11) = 0:3.125*val(11)
for money(12) = 0:3.125*val(12)
for money(13) = 0:3.125*val(13)
for money(14) = 0:3.125*val(14)
for money(15) = 0:3.125*val(15)
for money(16) = 0:3.125*val(16)
for money(17) = 0:3.125*val(17)
for money(18) = 0:3.125*val(18)
for money(19) = 0:3.125*val(19)
for money(20) = 0:3.125*val(20)
%此数是判断是否合理
if sum(sum(money)) <= 1000
for k=1:20
finalmoneyi(k)=E(k,money(k));
end
if sum(sum(finalmoneyi))>resultE
resultE = sum(sum(finalmoneyi);
resultmoney(1:20)=money(1:20);
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
function[result1] = E(j,money)
val = 10*j;
result1 = (1-p(j,money))*0.8*money+p(j,money)*2.5*val;
end
function[result2] = p(j,money)
x = 110.25/(j*(21-j));
val = 10*j;
if money <=val
result2 = 0;
else
result2 = ((money/val-1)/2.125)^x;
end
end