我遇到了错误:"下标索引必须是真正的正整数或逻辑。"
我有一个值的价值作为输入和输出的事实吗?
本质上,我称两个矩阵m和n。然后我通过n进行迭代,并取决于n与m中的n比较(小于,大于,等等),它将n值放入方程中,并且输出值。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
尽管很难估算出问题的位置,除非提供了变量,否则可以提出几种可能的错误来源:
- 问题可能是在语句
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中的非全能数字也可能引起问题。解决方案在很大程度上取决于您的需求。
您可能想要这样的东西:
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)
将是有效的,priceB_values(5)
将为零。
要摆脱priceB_values(5)
(如果需要的话),您可以做:
priceB_values = priceB_values(1:4,6);