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