2 回答

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊
矩陣A的大小會(huì)隨著for循環(huán)次數(shù)增加而增加,建議預(yù)先定義A的大小,以提高運(yùn)行速度
原因:
(1)Matlab存儲(chǔ)矩陣的方式。Matlab的矩陣是以塊(Block)的形式存儲(chǔ)的,當(dāng)Matlab在為即將存儲(chǔ)的矩陣劃分塊時(shí),如果沒(méi)有相應(yīng)大小的連續(xù)內(nèi)存,即使實(shí)際內(nèi)存還有剩余,也會(huì)報(bào)錯(cuò)“Out of Memory”。那為什么內(nèi)存會(huì)不連續(xù)呢?因?yàn)橛?jì)算機(jī)在使用過(guò)程中,存儲(chǔ)單元會(huì)不斷的分配和清除,內(nèi)存也就被分割成不連續(xù)的區(qū)域。
(2)動(dòng)態(tài)分配VS預(yù)先定義。在動(dòng)態(tài)分配過(guò)程中,由于Matlab矩陣變量逐漸增大需要連續(xù)為此矩陣分配內(nèi)存,但由于塊的不連續(xù)性,當(dāng)矩陣逐漸變大時(shí),剛開(kāi)始分配的塊很可能不夠,Matlab需要移動(dòng)此塊找到更大的塊來(lái)存儲(chǔ),這樣在移動(dòng)過(guò)程中不但占用大量時(shí)間,而且很可能由于找不到足夠大的塊,導(dǎo)致“Out of Memory”;當(dāng)矩陣變量預(yù)先定義其大小時(shí),Matlab在計(jì)算之前就一次性找到最合適的塊,不需要?jiǎng)討B(tài)分配內(nèi)存

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
我建議把FUN函數(shù)的參數(shù)改為9個(gè),如x1到x9,F(xiàn)unF(x1,x2........,x9)
運(yùn)算時(shí)令前三個(gè)為F,即F=[x1,x2,x3]
中間三個(gè)為PosF,PosF=[x4,x5,x6]
后三個(gè)為x,x=[x7,x8,x9]
- 2 回答
- 0 關(guān)注
- 1260 瀏覽
添加回答
舉報(bào)