最近用matlab編寫程序時,這個錯誤讓我郁悶了很長時間。明明寫的是一個循環,第一個循環可以正常運轉,而第二個循環則會報上述的錯誤;
而且單步調試運行也不會出錯,只有整體運行便會報錯;經過多遍仔細的檢查,感覺不會出現簡單地索引邏輯的問題;
終於發現是自己在定義函數時犯了一個簡單地錯誤:[fitness,...]=fitness(x,y,zx....),輸出中fitness為矩陣形式;
如上,自己定義函數時,某輸出變量和函數的名字是一樣的,這樣就會造成下一步循環時,電腦無法識別你fitness到底是函數,還是變量;
總結來看,電腦應該是把fitness當做了變量,而fitness剛好是個矩陣,這樣就會把后續調用函數的過程看作fitness矩陣的變量提取過程。
但是矩陣變量提取只能輸入行和列,且必須為整數;
剛好輸入變量都不是矩陣調用內部值的正確方法。因此會報錯索引必須是正整數或邏輯變量
試想,如果fitness函數只有兩個整數變量,那程序則可以允許,結果就會很離譜的哦,哈哈,大家多注意吧!
千萬不要把輸出變量和函數名稱一樣!
比如,max=max(A(:,1));max取A矩陣第一列的最大值;此時電腦已經無法識別你的max是啥了,電腦肯定會把max當做變量,max函數已經從它的世界消失了!