for循环matlab

时间:2015-05-01 18:52:29

标签: matlab for-loop

我收到错误:"下标索引必须是正整数或逻辑。"

事实上,我将值作为输入和输出是十进制的问题吗?

本质上,我调用两个矩阵,M和N.然后我迭代N,并且根据N与M中的某些东西(小于,大于等)的比较,它将N值放入一个等式中输出一个值。来自N的输入和函数的输出都是小数。

我想用for循环的结果填充priceB_values。

我有什么明显的遗失吗?

 priceB_values = zeros(1:4)

for i = N(1:4,6)

if i < M(3,6)
    priceL_Opt1_Value = ((M(3,6)-M(3,5))/(M(1,6)-M(1,5)))*(priceB_Opt4-M(1,6))+M(3,6)   
elseif i > M(1,6) || priceB_Opt4 < M(1,7)
    priceL_Opt1_Value = ((M(3,7)-M(3,6))/(M(1,7)-M(1,6)))*(priceB_Opt4-M(1,7))+M(3,7)
elseif i > M(1,7) || priceB_Opt4 < M(1,8)
    priceL_Opt1_Value = ((M(3,8)-M(3,7))/(M(1,8)-M(1,7)))*(priceB_Opt4-M(1,8))+M(3,8) 
elseif i == M(1,5)
    priceL_Opt1_Value = M(1,5)
elseif i == M(1,6)
    priceL_Opt1_Value = M(1,6)
elseif i == M(1,7)
    priceL_Opt1_Value = M(1,7)
else i == M(1,8)
    priceL_Opt1_Value = M(3,8)    
end 

priceB_values(i) = priceL_Opt1_Value


end 

2 个答案:

答案 0 :(得分:0)

虽然除非提供变量,否则很难估计出问题的位置,但可以提出几种可能的错误来源:

  • 问题可能出在priceB_values = zeros(1:4)声明中 调用zeros(1:4)你创建了4维零数组,所以, 如果你只想创建一个包含4个元素的向量,那么你会更好 将其更改为zeros(1,4)
  • 问题可能出在i = N(1:4,6)声明中。我被分配了 与elseif语句中的标量进行比较的列向量, 所以你最好把它改成像i = N(1:4,6)'这样的东西 转置你的
  • N中的非整数也可能导致问题。解决方案在很大程度上取决于您的需求。

答案 1 :(得分:0)

你可能想要这样的东西:

priceB_values = zeros(1,6);
for p = 1:4,6
   ii = N(p);

   if ii < M(3,6)
      priceL_Opt1_Value = ((M(3,6)-M(3,5))/(M(1,6)-M(1,5)))*(priceB_Opt4-M(1,6))+M(3,6)   
   elseif ii > M(1,6) || priceB_Opt4 < M(1,7)
    priceL_Opt1_Value = ((M(3,7)-M(3,6))/(M(1,7)-M(1,6)))*(priceB_Opt4-M(1,7))+M(3,7)
   ...
   end 

   priceB_values(p) = priceL_Opt1_Value

end 

现在p是输入列表和输出列表的整数索引,因此priceB_values(1)priceB_values(4)priceB_values(6)将有效且{{1将为零。

要摆脱priceB_values(5)(如果你想要的话),你可以这样做:

priceB_values(5)