我收到错误:"下标索引必须是正整数或逻辑。"
事实上,我将值作为输入和输出是十进制的问题吗?
本质上,我调用两个矩阵,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
答案 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)'
这样的东西
转置你的答案 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)