最近用matlab编写程序时,这个错误让我郁闷了很长时间。明明写的是一个循环,第一个循环可以正常运转,而第二个循环则会报上述的错误;
而且单步调试运行也不会出错,只有整体运行便会报错;经过多遍仔细的检查,感觉不会出现简单地索引逻辑的问题;
终于发现是自己在定义函数时犯了一个简单地错误:[fitness,...]=fitness(x,y,zx....),输出中fitness为矩阵形式;
如上,自己定义函数时,某输出变量和函数的名字是一样的,这样就会造成下一步循环时,电脑无法识别你fitness到底是函数,还是变量;
总结来看,电脑应该是把fitness当做了变量,而fitness刚好是个矩阵,这样就会把后续调用函数的过程看作fitness矩阵的变量提取过程。
但是矩阵变量提取只能输入行和列,且必须为整数;
刚好输入变量都不是矩阵调用内部值的正确方法。因此会报错索引必须是正整数或逻辑变量
试想,如果fitness函数只有两个整数变量,那程序则可以允许,结果就会很离谱的哦,哈哈,大家多注意吧!
千万不要把输出变量和函数名称一样!
比如,max=max(A(:,1));max取A矩阵第一列的最大值;此时电脑已经无法识别你的max是啥了,电脑肯定会把max当做变量,max函数已经从它的世界消失了!