MATLAB進(jìn)行程序設(shè)計(jì)如何省時(shí)高效少出錯(cuò)

同:https://zhuanlan.zhihu.com/p/639245203
利用MATLAB進(jìn)行科研程序設(shè)計(jì)的注意點(diǎn)
最近利用MATLAB腳本進(jìn)行了機(jī)器人相關(guān)程序的編寫,因?yàn)檫@個(gè)經(jīng)驗(yàn)不足,走了比較多的彎路
剛開始有了思路就埋頭猛寫代碼,寫著寫著覺得差不多了,憑感覺編個(gè)函數(shù),結(jié)果寫完之后一運(yùn)行結(jié)果錯(cuò)了?。?!
然后回頭一看
變量命名很亂很隨意,不知道這個(gè)變量是干什么的?
中間過程中比較重要的變量沒有進(jìn)行保存,函數(shù)的輸出是一些不重要的變量
想要測(cè)試一下某個(gè)變量和預(yù)期符不符合,再拿出來單獨(dú)寫測(cè)試函數(shù)
好不容易發(fā)現(xiàn)了某個(gè)功能的錯(cuò)誤,修改了這個(gè)錯(cuò)誤,結(jié)果發(fā)現(xiàn)還有別的地方也使用了類似的功能也錯(cuò)誤了
試探性的修改程序的錯(cuò)誤,修改了其中一處,結(jié)果錯(cuò)誤,然后又開始修改另一處導(dǎo)致最后也不知道是哪出錯(cuò)了
有一些感悟或者是技巧現(xiàn)在記錄下來,希望以后可以提高編寫程序的效率,減少出錯(cuò)的概率。
以后也會(huì)分享機(jī)器人相關(guān)方面知識(shí),歡迎關(guān)注 Winter
前期思路
最開始的時(shí)候要構(gòu)建好程序的大綱,這個(gè)是最為重要的,花的時(shí)間再多也不為過,可以用一些思維導(dǎo)圖工具輔助
程序分幾個(gè)
首先大題構(gòu)建一下這個(gè)程序要干什么?想清楚之后大概考慮一下這個(gè)矩陣的運(yùn)算量,對(duì)于我來說就是有一個(gè)矩陣求逆,這個(gè)矩陣求逆是比較花費(fèi)時(shí)間的,所以我進(jìn)行了第1個(gè)判斷
這個(gè)程序并不是一個(gè),分為兩個(gè)大的程序,前一段要保存運(yùn)算量大的結(jié)果,后一段再繼續(xù)進(jìn)行
好處:因?yàn)榕苣且欢问窍喈?dāng)花費(fèi)時(shí)間的,如果因?yàn)椴僮鞑恍⌒模袛嘁幌鲁绦蚧蛘哒f不小心崩潰了,那又要重新計(jì)算,只要保存了這個(gè)結(jié)果的話,我們后續(xù)的那一段會(huì)相當(dāng)快
結(jié)果:我現(xiàn)在明確了程序的兩個(gè)部分,第1部分花費(fèi)時(shí)間得出最重要的結(jié)果,第2部分只要對(duì)結(jié)果進(jìn)行一些畫圖處理就行
調(diào)用函數(shù)設(shè)計(jì)
有了程序就必須要確定調(diào)用的函數(shù),函數(shù)的劃分要注意以下幾個(gè)點(diǎn)
1.考慮功能劃分:對(duì)于如何劃分函數(shù)?其中的一個(gè)因素就是根據(jù)功能來劃分,要想清楚程序過程中功能復(fù)用性比較高的部分,把這一部分包裝成函數(shù)
好處1:程序易于閱讀,這肯定不必多講
好處2:一旦你發(fā)現(xiàn)這個(gè)函數(shù)有任何的錯(cuò)誤,你只需要修改這個(gè)函數(shù),如果你有一個(gè)類似的功能,但被你劃分成兩個(gè)函數(shù),那你一旦這個(gè)功能出現(xiàn)錯(cuò)誤,你兩個(gè)函數(shù)都要改,有時(shí)候你會(huì)出現(xiàn),只修改一個(gè)而忘記修改另一個(gè)的情況
2. 考慮端口(輸入輸出)劃分:我們?cè)谠O(shè)計(jì)函數(shù)的時(shí)候,最重要的考慮的是它的輸入和輸出分別是什么,那我們就要針對(duì)重要的輸入輸出進(jìn)行函數(shù)設(shè)計(jì)
注意:如果函數(shù)過小,那么函數(shù)的數(shù)量就會(huì)比較多,中間會(huì)有一些不重要的變量干擾閱讀
好處:合適的端口劃分,會(huì)使得你輸出的變量是容易用來測(cè)試是否正確的,
測(cè)試:寫完這個(gè)程序,我們就要對(duì)這個(gè)程序進(jìn)行測(cè)試,因?yàn)楹竺孢€會(huì)用到這個(gè)程序,如果錯(cuò)了的話會(huì)引發(fā)一連串的錯(cuò)誤,而如果這個(gè)函數(shù)正確的話,我們就可以放心的使用它,在它的基礎(chǔ)上再包裝其他的函數(shù)
3. 設(shè)計(jì)好函數(shù)功能接下來,進(jìn)行命名->編寫->測(cè)試->拼接->完成主程序
變量、函數(shù)命名
這個(gè)命名要符合他物理的含義,就是你看到名字就能知道他是干什么的
對(duì)于變量和函數(shù)這兩個(gè)命名要區(qū)分開,可以使用首字母大寫來進(jìn)行變量?jī)?nèi)容,利用下劃線分割來命名函數(shù)
最后的小tips
當(dāng)你分了兩個(gè)或者多個(gè)執(zhí)行程序之后,就意味著這個(gè)執(zhí)行程序需要跟前面后面進(jìn)行交互,那么就會(huì)輸入輸出變量進(jìn)行保存,這個(gè)輸入輸出變量要放在程序的最開始和最結(jié)尾,不要在中間或者說函數(shù)的里面load加載一個(gè)變量,如果上一個(gè)程序的輸出變量需要更改的話,你還需要進(jìn)入到這個(gè)程序或者函數(shù)的里面去改這個(gè)變量很麻煩
進(jìn)行中間小變量的輸出,有利于查看問題出在哪里
單獨(dú)有一個(gè)測(cè)試模塊,對(duì)前面每寫一個(gè)函數(shù)都要進(jìn)行測(cè)試功能是否符合預(yù)期
注意版本更新,對(duì)于我沒有必要用github的版本迭代,我會(huì)每次準(zhǔn)備改都備份一下,然后寫一個(gè)記事本,這次的版本特點(diǎn),然后下一次打算進(jìn)行哪方面的更改
如果你有哪些編程方面走的彎路然后得到了哪些小技巧,歡迎評(píng)論分享