資料介紹
作者:貓叔?來(lái)源:科學(xué)計(jì)算Tech微信公眾號(hào)
用過(guò)Matlab的同學(xué)應(yīng)該都知道,Matlab的慢是出了名的,但是再慢也有優(yōu)化的方式,下面我們給出幾個(gè)Matlab編程中常用的優(yōu)化技巧。
??在講優(yōu)化方法之前,首先要說(shuō)的就是Matlab中用tic toc的方式來(lái)計(jì)算運(yùn)行時(shí)間,這是個(gè)常識(shí)。當(dāng)然,想統(tǒng)計(jì)具體的耗時(shí),可以用profile工具。
1. 向量化操作
??這個(gè)應(yīng)該是用過(guò)Matlab的同學(xué)都清楚的一點(diǎn),Matlab中操作向量和矩陣的速度要比使用for循環(huán)的速度快很多,是因?yàn)槠涞讓诱{(diào)用了高性能線性代數(shù)庫(kù)BLAS庫(kù)和LAPACK庫(kù)。這個(gè)就不多說(shuō)了。
2. 內(nèi)存預(yù)分配
??在Matlab中我們可以定義一個(gè)空矩陣
mtx = [];
然后后面再給它加入一些數(shù)據(jù),而且這個(gè)矩陣大小可以隨著我們填入數(shù)據(jù)的多少而變化。像下面這個(gè)程序
tic n = 1000; mtrx = []; init = 1.0; for i = 1:n for j=1:n mtrx(i,j) = init + 1.0; end end toc
這個(gè)程序的運(yùn)行時(shí)間是多久呢?在我電腦上是0.2秒。
??那這個(gè)程序有什么問(wèn)題呢?就是我們沒(méi)有為這個(gè)矩陣分配一個(gè)內(nèi)存空間,而且在循環(huán)中,矩陣大小是變化的,這就導(dǎo)致每次循環(huán)時(shí)都浪費(fèi)額外的時(shí)間去尋找滿(mǎn)足需求的內(nèi)存空間,將改變大小后的矩陣整體移動(dòng)到這個(gè)新的內(nèi)容空間中,并釋放原來(lái)的內(nèi)存空間,這除了會(huì)影響代碼的運(yùn)行效率,還容易形成內(nèi)存碎片,讓程序越來(lái)越難找到滿(mǎn)足條件的內(nèi)存。
??因此在循環(huán)前給矩陣預(yù)分配內(nèi)存是很一個(gè)良好的習(xí)慣,如果沒(méi)有這個(gè)習(xí)慣,你還可以通過(guò)Matlab自帶的代碼檢查器來(lái)查看是否存在類(lèi)似問(wèn)題。
所以,我們應(yīng)該把程序修改如下:
tic n = 1000; mtrx = zeros(n,n); init = 1.0; for i = 1:n for j=1:n mtrx(i,j) = init + 1.0; end end toc
這個(gè)程序只用了0.007秒的時(shí)間就運(yùn)行完成了,可見(jiàn)它們的差距有多大。
3. 按列存儲(chǔ)
??Matlab中默認(rèn)是按列存儲(chǔ)的,也就是說(shuō),列向量在內(nèi)存中是連續(xù)排列的,對(duì)連續(xù)的數(shù)據(jù)做處理肯定是要快的,所以我們?cè)诙x向量時(shí)一般都會(huì)使用列向量。下面對(duì)比矩陣中對(duì)行做操作和對(duì)列做操作花費(fèi)的時(shí)間。
n = 10000; mtrx = rand(n,n); mcol = zeros(n,1); mrow = zeros(1,n); tic for i=1:n mcol(i) = sum(mtrx(:,i)); end toc
我們對(duì)矩陣中的每一列都求和,總共用了0.17秒。
tic for i=1:n mrow(i) = sum(mtrx(i,:)); end toc
再對(duì)矩陣中的每一行求和,用了0.8秒。
可以看出,對(duì)列操作比對(duì)行操作速度要快很多。
4. 數(shù)據(jù)類(lèi)型
??在Matlab中,數(shù)據(jù)類(lèi)型默認(rèn)是double型,對(duì)使用者來(lái)說(shuō),無(wú)需太多關(guān)心數(shù)據(jù)類(lèi)型當(dāng)然是省心省力的,但這也帶來(lái)了一個(gè)問(wèn)題就是double型占用的內(nèi)存較多,還有可能拖慢程序的運(yùn)行速度。所以,在適當(dāng)?shù)那闆r下,我們可以把數(shù)據(jù)類(lèi)型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點(diǎn)是,一個(gè)變量在改變數(shù)據(jù)類(lèi)型時(shí)會(huì)消耗額外的時(shí)間,因此還不如重新建一個(gè)新變量。
??高效編程的內(nèi)容就先寫(xiě)這么多,后面還會(huì)繼續(xù)補(bǔ)充。下面說(shuō)一個(gè)Matlab調(diào)試中斷點(diǎn)設(shè)置問(wèn)題。在一個(gè)for循環(huán)中,比如for i=1:n,我們想在i=100的進(jìn)入斷點(diǎn),這個(gè)時(shí)候應(yīng)該怎么用?以前的時(shí)候我們都會(huì)這么寫(xiě)。
for i=1:n if(i==100) pass end end
把斷點(diǎn)設(shè)置在pass處,但其實(shí)不用這么弄。Matlab中提供了條件斷點(diǎn)的設(shè)置方式。在循環(huán)中右鍵選擇設(shè)置條件斷點(diǎn),如下圖所示。
Figure 1. 條件斷點(diǎn)設(shè)置1
在下面的窗口中填入條件即可,比如i==100。
Figure 2. 條件斷點(diǎn)設(shè)置2
這樣,當(dāng)程序運(yùn)行到i==100時(shí)就會(huì)進(jìn)入斷點(diǎn),不需要自己再寫(xiě)額外的語(yǔ)句。
- MATLAB編程指南pdf03 0次下載
- MATLAB編程指南pdf02 0次下載
- MATLAB編程指南pdf01 0次下載
- 使用MATLAB進(jìn)行線性編程 0次下載
- MATLAB的循環(huán)向量化編程方法的詳細(xì)資料研究 4次下載
- 幅頻特性曲線Matlab編程的資料免費(fèi)下載 5次下載
- MATLAB高效編程技巧應(yīng)用與25個(gè)案例分析的詳細(xì)資料概述 0次下載
- 《matlab編程進(jìn)階》.pdf 0次下載
- 菜鳥(niǎo)入門(mén)Matlab編程 19次下載
- Qt與Matlab混合編程 0次下載
- MATLAB高效編程程序源代碼 6次下載
- MATLAB編程_第二版 0次下載
- matlab擴(kuò)展編程 1次下載
- MATLAB編程基礎(chǔ)與典型應(yīng)用_劉會(huì)燈 0次下載
- matlab編程入門(mén)基礎(chǔ)與應(yīng)用
- MATLAB信號(hào)處理常用函數(shù)詳解 2517次閱讀
- 講解MATLAB/Simulink HDL使用入門(mén) 1415次閱讀
- 關(guān)于MATLAB求導(dǎo)實(shí)踐的總結(jié) 1854次閱讀
- 30個(gè)MATLAB圖形繪制 1736次閱讀
- 基于六面體單元熱應(yīng)力問(wèn)題的Matlab有限元編程求解 3065次閱讀
- 基于Matlab有限元編程的變截面懸臂梁分析 4139次閱讀
- MATLAB程序調(diào)試的方法及工具介紹 6880次閱讀
- MATLAB基礎(chǔ)知識(shí)MATLAB的簡(jiǎn)介,編程環(huán)境和基本操作的詳細(xì)概述 7616次閱讀
- matlab串口數(shù)據(jù)采集 2.4w次閱讀
- MATLAB如何實(shí)現(xiàn)圖像增強(qiáng)灰度變換直方圖均衡匹配 1w次閱讀
- matlab-插值 1773次閱讀
- matlab輸入矩陣的格式的方法步驟 2.1w次閱讀
- 基于LabVIEW和Matlab混合編程的小波降噪方法 1w次閱讀
- 專(zhuān)家支招:使用MATLAB和Simulink算法創(chuàng)建FPGA原型 1.6w次閱讀
- 基于Matlab的FIR帶通濾波器設(shè)計(jì)與實(shí)現(xiàn) 2.9w次閱讀
下載排行
本周
- 1DC電源插座圖紙
- 0.67 MB | 3次下載 | 免費(fèi)
- 2AN-1267: 使用ADSP-CM408F ADC控制器的電機(jī)控制反饋采樣時(shí)序
- 1.41MB | 3次下載 | 免費(fèi)
- 3AN158 GD32VW553 Wi-Fi開(kāi)發(fā)指南
- 1.51MB | 2次下載 | 免費(fèi)
- 4AN148 GD32VW553射頻硬件開(kāi)發(fā)指南
- 2.07MB | 1次下載 | 免費(fèi)
- 5AN111-LTC3219用戶(hù)指南
- 84.32KB | 次下載 | 免費(fèi)
- 6AN153-用于電源系統(tǒng)管理的Linduino
- 1.38MB | 次下載 | 免費(fèi)
- 7AN-283: Σ-Δ型ADC和DAC[中文版]
- 677.86KB | 次下載 | 免費(fèi)
- 8SM2018E 支持可控硅調(diào)光線性恒流控制芯片
- 402.24 KB | 次下載 | 免費(fèi)
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 450次下載 | 免費(fèi)
- 2免費(fèi)開(kāi)源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 138次下載 | 1 積分
- 3基于STM32單片機(jī)智能手環(huán)心率計(jì)步器體溫顯示設(shè)計(jì)
- 0.10 MB | 130次下載 | 免費(fèi)
- 4使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
- 2.96 MB | 44次下載 | 免費(fèi)
- 5美的電磁爐維修手冊(cè)大全
- 1.56 MB | 24次下載 | 5 積分
- 6如何正確測(cè)試電源的紋波
- 0.36 MB | 18次下載 | 免費(fèi)
- 7感應(yīng)筆電路圖
- 0.06 MB | 10次下載 | 免費(fèi)
- 8萬(wàn)用表UT58A原理圖
- 0.09 MB | 9次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論
查看更多