日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【开发工具】学习记录 初学MATLAB

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【开发工具】学习记录 初学MATLAB 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://blog.csdn.net/An_Wu/article/details/70226197,感謝博主
關于如何學習Matlab
我的學習方法很簡單:Matlab是練出來的,而不是看出來的。很多人問我有沒有比較好的Matlab教材,我說隨便找一本吧,都可以。只要書里面有最基本的語法和命令,對于一個有編程基礎的人,Matlab可以在一個下午的時間內學會。當然,僅僅是學會。如果想要對Matlab比較得心應手,那么最好的辦法就是練習。練習的素材很多,比如對于學經濟學的,可以做一些simulation之類的,也可以試著把計量或者宏觀教材里面的一些算法寫寫出來。一開始可能很慢,但是當你完成了一個比較大的project的時候,你的Matlab的功力將會有巨大的提升。

當然,在你寫程序之前,多讀一些別人寫的好的code是非常有幫助的


一些Matlab的經驗


1、適當了解一些數值計算、數值分析以及最優化的理論

用Matlab的無非是做數值計算或者最優化,這也是Matlab的強項,Matlab有足夠多的工具箱解決這些問題。但是在使用這些工具箱之前,應該首先了解一些數值計算以及最優化的理論。這一點在程序碰到問題或者計算結果不理想的時候尤為重要。很多時候結果不理想并不是自己的理論出了問題,而是盲目或者錯誤使用Matlab的工具箱而導致的。比如我曾經做過一個單純形法的優化程序,但是結果總是不理想,這個時候就要返回到單純形法具體是一種什么樣的算法來考慮這個問題,最后發現是由于目標函數的某一部分十分平緩導致的。
當然更重要的是如果你不理解理論,很多問題根本不知道如何處理。


2、理解Matlab中時間空間的轉化
這個問題沒有人強調,但我覺著蠻重要。這里的關鍵點其實很簡單,就是盡量減少重復計算,哪怕是多項式復雜度以內的計算。重復計算的內容應該適時保存到內存中,以后直接調用。一個程序可能會重復運行幾千次幾萬次,一點點的浪費時間都可能被放大很多。空間(內存)我們是可以擴充的,但是時間不是,所以絕大多數時候我們需要放棄空間,獲得時間上的迅捷。
這里有個故事,曾經在某技術論壇上看到的,說騰訊公司早期做的QQ實在太過垃圾,他們追蹤過QQ的行為,發現在幾分鐘時間里重復調用了某同一注冊表項幾百次。顯然注冊表的內容所占內存是有限的,甚至是可以忽略的,但是每次讀注冊表項可能都要讀硬盤,這里的時間花費是很大的,為什么不把這項內容直接存儲在內存里呢?

一個比較經典的例子:考慮交換兩個變量a,b的值,有如下寫法:
c=a;
a=b;
b=c;
或者:
a=a+b;
b=a-b;
a=a-b;
第一種寫法多占了內存,因為需要多申請一個c的內存空間;第二種寫法節省了內存空間,但是卻多了三次計算時間。請問哪種好?不一定,看你的時間空間的權衡。但是具體到這個例子來說,第二種是不推薦的,因為:首先,第二種程序晦澀難懂,難以維護,內存不至于低到不能存儲一個變量;第二,如果兩個數字都特別特別大,計算a的時候會有溢出的危險。


3、形成良好的編程規范
我想幾乎所有學過編程的人都被這樣告誡過。比較好的是Matlab自帶的編輯器本身就可以自動縮進之類的,程序十分易讀。但是還有一些東西是有些人不曾注意過的。比如變量名,一個好的變量名一定要有清晰的含義,讓人一看就能明白,否則日后的修改維護必然要花費更多的時間去識別這些變量名的含義。這一點可以參考http://coolshell.cn/articles/1038.html ? http://coolshell.cn/articles/1990.html ? 這里面詳細列舉了很多命名的規則和技巧。
還有一點就是注釋。好的注釋可以極大的方便以后的維護以及代碼的重用。我的習慣是在代碼的開頭都要交代這個代碼是干什么用的,怎么用等等。在程序中一個大塊的功能模塊也要加上注釋告訴大家你在做什么。如果某個語句很復雜,可以加注釋告訴大家這句到底在干什么。這樣寫出來的程序維護起來或者他人使用起來將非常方便。
另有一篇十分有趣的文章分享給大家:如何寫出無法維護的代碼 http://coolshell.cn/articles/4758.html


4、如果拿到一個任務而又沒有思路,試著把問題分解或者轉化。?
之所以叫做程序,是因為我們所做的工作就是告訴計算機要做什么,該怎么做。所以如果你的腦子里根本不知道這個問題該怎么解決的時候,你就更加無法寫出程序。找思路的一般方法是分解問題,然后逐個擊破。或者在特殊情況下,需要把問題轉化。
分解與轉化的第一步是把實際問題轉化為數學問題。這一步可能已經做好,可能沒有。如果沒有,那么這一步就叫做數學建模。絕大多數問題都可以轉化為兩類問題,一類是最優化問題,一類是求解問題。如果你能知道你在最優化什么東西或者求解什么東西,問題就簡單很多。

轉化問題的第二步是把數學問題轉化為程序(不是代碼)。也就是說,你要想清楚這個問題(最優化或者求解)是怎么一步步實現的。 這個過程可能很簡單,有現成的方法用,也有可能很復雜,還可能涉及多種轉化。比如我們經濟學中遇到的求解動態最優化,經常要把連續的東西離散化(離散化很重要!)。
最后,考慮怎么把你的程序轉化為真實的代碼。這一步說簡單很簡單,因為只要你做好了以上兩步,這一步是順其自然的。但是當然會有很多小的細節,也許這就是所謂的technique。但是我還是覺著,學習編程不是學習technique,而是學習第二步,雖然本文關注的更多的是technique


5、如果程序出錯了,而又查不到語法的錯誤,使用斷點
編程中最可怕的錯誤不是語法,而是邏輯錯誤,因為邏輯錯誤是最難debug的。一個很有用的工具就是斷點。?
斷點應該是debug中最常用的工具。Matlab的編輯器中可以很方便的實現(在每一行的開頭有個小橫線,單擊一下變成紅點,然后就設置成斷點了)。當程序運行到斷點之后就會中斷,然后會在主窗口顯示K>>的標志,這時你可以輸入命令查看內存情況等等。一步步的跟蹤,直到變量值跟你的預期不一樣,這時你就可以很容易的找到錯誤在什么地方發生了。


6、如果試了很多辦法還是不能找到錯誤,那就嘗試一下終極debug方法,適用于各種語言
真的有這么強大的debug方法么?有的!這個方法很簡單,離開你的電腦,找一個人,隨便什么人,說一遍你的程序的思路,說的越具體越好。多數情況下,你在闡述的過程中,程序的錯誤就會突然從你的大腦里冒出來了。
如果實在找不到就找大街上的乞討人員吧,給他們十塊錢他們應該很樂意聽你說的,并且說不定還可以給你一些很好的建議,然后告訴你,十年前他們也在做同樣的工作。


7、 理解通用與專用之間的權衡
你可以寫一個通用的程序,也可以寫一個專用的程序,這需要你的權衡。一般情況下,專用的程序你可以研究清楚其結構,從而找到最快的算法,而通用的程序則不能達到這點,因為要考慮到很多很多特殊的情況。
比如給定一個分布函數F(x),我想要寫一個隨機數生成器是的生成的隨機數的分布函數為F(x). 方法很簡單,先生成一個均勻分布的隨機數a,是的a~U(0,1),然后計算F的反函數在a處的值。很多人可能會用fsolve之類的辦法,但是這不是最快的。如果我們已經知道F是一個單增的函數,那么這個解有且僅有一個。這樣我們就可以直接使用一些算法去解決他。

類似的問題還有如果我們知道導數,那么求最優化最好的方法也許是牛頓法,而不是用單純形法去尋找,那樣既不精確又慢
但是通用的程序也是非常吸引人的,因為可以大大的減少開發的時間,如果計算時間不是首要考慮的問題的話。


8、盡量使你的程序更通用
也就是說,盡量使你的代碼能被重復利用。這樣可以節省很多寫程序的時間,而你發現這些東西都是你寫過很多遍的。
很多人沒有一個寫通用程序的好的習慣。比如說下面一個最簡單的例子:

x=randn(10000,1);
y2=zeros(10000 ,1);
for i=1: 10000?
? ?y2(i)=exp(x(i));
end
這樣寫的問題在于,如果你的x需要改變了,比如改成100維,那么你需要修改不止一次。但是如果你寫成這樣:
x=randn(10000,1);
y2=zeros(length(x),1);
for i=1:length(x)
? ?y2(i)=exp(x(i));
end
?那么是不是僅僅修改一個地方就可以了呢?


9、 盡量使你的程序模塊化
把需要重復進行的程序盡量寫成函數,便于修改和維護。寫成函數的好處是使你在同一時間只關注一個問題,但是如果你把所有的東西都放在一個程序里,你可能需要考慮的問題就不止一個了。



10、在使用變量之前先進行聲明,盡量少使用矩陣變維操作
這不是matlab必須的,但是是十分建議的。比如如果你寫下了如下的代碼:
for i=1:10000
y=y+i;
end

你沒有聲明y,而是直接試用了它,很可能會出現問題。比如你的內存里之前已經有y,y=10,那么你的計算結果是不是會大10呢?更有可能的情況是你之前已經運行了這個程序,但是你的開頭沒有clear(開頭使用clear也是很好的習慣)
此外,盡量少使用矩陣變維的操作。因為每次聲明變量或者矩陣變維,Matlab總要申請一個新內存空間,頻繁進行變維操作會很快侵蝕掉你的內存空間,這點在大矩陣的時候特別重要。?


11、計算盡量多的使用矩陣,盡量少的使用循環
循環的好處是比較容易想,比較容易些,但是也比較難以維護,最重要的,速度很慢。
比如下面一個例子:

x=randn(10000,1);
tic
y1=exp(x);
toc
tic
y2=zeros(length(x),1);
for i=1:length(x)
? ?y2(i)=exp(x(i));
end
toc
輸出結果:
Elapsed time is 0.000287 seconds.
Elapsed time is 0.000963 seconds.
可見使用矩陣比使用循環快了三倍。


12、如果進行大量的重復操作,可以考慮使用并行計算
比如在做Monte Carlo模擬的時候,你的每次循環都是獨立的(每次循環不影響下一次循環的結果),那么可以考慮使用并行處理,如果你的電腦是多核的。
首先,你要用以下命令創建幾個并行的進程:
matlabpool local 4
其中4是你的計算機核心數。然后,使用parfor代替for循環就可以了。但是使用這個命令一定要注意使用前提和不要每次循環訪問同樣的可變的變量


13、盡量少的涉及符號運算
Matlab最強大的是其數值運算能力,而不是符號運算。如果你需要處理諸如求導求極限之類的工作,用Mathematica或者Maple。特別是盡量少的使用符號定義的函數, 比如用fsolve之類的,如果只是計算一次兩次非常方便,但是如果進行大量重復的此類運算,其速度很慢,最好研究清楚要解的函數的性質,用專門的算法進行處理,matlab大多數時候也有專門的工具箱。


14、壓縮你的內存空間
Matlab的內存管理方式使得內存經常“碎片化”,特別是當一個變量被清除出內存,留下的空間又不足以裝下下一個變量,內存就變成了“碎片”,這個跟硬盤碎片是一個道理。可以用"pack"命令。如果你的內存里面有很大的矩陣,不要忘了經常用"clear"命令清除不用的矩陣。當然pack命令比較耗時,不要再循環里面或者函數里面使用。還有一個辦法就是先用save命令保存內存,然后全部清除掉,再用load命令載入。


15、使用稀疏矩陣
如果碰到一個矩陣很大,但是多數數字都是0,試著用sparse命令轉化為稀疏矩陣。一個例子是空間計量里面的權重矩陣,一般來說多數是0,LeSage的空間計量工具箱里面就是用的稀疏矩陣



總結

以上是生活随笔為你收集整理的【开发工具】学习记录 初学MATLAB的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月激情丁香婷婷 | 国产主播第一页 | 日干夜干天天干 | 亚洲国产影视 | 亚洲av无码国产在丝袜线观看 | 人人色网 | 99精品一区二区三区无码吞精 | 欧美精品色婷婷五月综合 | 免费看国产一级片 | 国产第一页屁屁影院 | 欧美精品在线一区二区 | 性做久久久久久久免费看 | 久久天天综合 | 久久高清无码视频 | 99久久久无码国产精品6 | 色图插插插| 中文字幕3区 | 操皮视频 | 欧美肥老妇视频九色 | 在线看片黄 | 亚洲精品在线视频 | 伊人ab | 在线观看日韩视频 | 能在线观看的av网站 | 妺妺窝人体色www聚色窝仙踪 | 欧美18免费视频 | 国产又粗又硬 | 亚洲第一色视频 | 成人免费毛片糖心 | 电影《两个尼姑》免费播放 | 久久久免费av| 熟妇女人妻丰满少妇中文字幕 | 亚洲一区福利视频 | 娇小6一8小毛片 | 日本美女在线 | 国产成人久久精品麻豆二区 | 少妇被爽到高潮动态图 | 中日韩在线播放 | 人妖干美女 | 国产黄色av片| 国内成人免费视频 | av日韩国产 | 天天干夜夜艹 | 免费a大片 | 久久国产成人精品国产成人亚洲 | 成人在线观看视频网站 | 一区二区成人在线 | 熊猫成人网 | 69精品人人人人 | 欧美精品久久 | 99精品视频在线免费观看 | 欧美在线观看不卡 | 亚洲国产精华液网站w | www.香蕉.com | 欧美精品综合 | 国产精品电影网 | 波多野结衣在线观看一区二区 | 欧美日韩在线视频免费观看 | 福利亚洲 | 韩国成人免费视频 | 国产99久久久国产精品免费看 | 日本少妇喂奶漫画 | 男人天堂资源网 | 免费a网站 | 在线观看一区二区三区视频 | 亚洲一本在线观看 | 乱色精品无码一区二区国产盗 | 97自拍偷拍 | 日本三级生活片 | 在线看黄的网站 | 麻豆精品免费 | www.欧美| 久久麻豆精品 | 日本免费一区二区三区四区五六区 | 波多野结衣 久久 | 亚洲av成人无码一二三在线观看 | 黑人高潮一区二区三区在线看 | 四虎永久免费观看 | 日本aaa视频 | 曰批又黄又爽免费视频 | 97人人爽| 国产高潮呻吟久久 | 国产精品1234 | 国内老熟妇对白hdxxxx | 久久伊人在 | 亚洲一区亚洲二区 | 麻豆国产在线播放 | 熟女一区二区三区四区 | 激情瑟瑟| 中文字幕一区二区三区又粗 | 日本免费网站 | 少妇人妻好深好紧精品无码 | 日本特级黄色 | 69av视频在线观看 | 久久久久久国产精品免费 | 在线成人亚洲 | 国产色视频 | brazzers欧美极品少妇 | 俄罗斯av片 |