MATLAB 如何让数组中某个元素循环变化

我需要遍历求得最优解,也就是本题目中确定“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
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^