資料介紹
作者:貓叔?來源:科學(xué)計算Tech微信公眾號
用過Matlab的同學(xué)應(yīng)該都知道,Matlab的慢是出了名的,但是再慢也有優(yōu)化的方式,下面我們給出幾個Matlab編程中常用的優(yōu)化技巧。
??在講優(yōu)化方法之前,首先要說的就是Matlab中用tic toc的方式來計算運行時間,這是個常識。當(dāng)然,想統(tǒng)計具體的耗時,可以用profile工具。
1. 向量化操作
??這個應(yīng)該是用過Matlab的同學(xué)都清楚的一點,Matlab中操作向量和矩陣的速度要比使用for循環(huán)的速度快很多,是因為其底層調(diào)用了高性能線性代數(shù)庫BLAS庫和LAPACK庫。這個就不多說了。
2. 內(nèi)存預(yù)分配
??在Matlab中我們可以定義一個空矩陣
mtx = [];
然后后面再給它加入一些數(shù)據(jù),而且這個矩陣大小可以隨著我們填入數(shù)據(jù)的多少而變化。像下面這個程序
tic n = 1000; mtrx = []; init = 1.0; for i = 1:n for j=1:n mtrx(i,j) = init + 1.0; end end toc
這個程序的運行時間是多久呢?在我電腦上是0.2秒。
??那這個程序有什么問題呢?就是我們沒有為這個矩陣分配一個內(nèi)存空間,而且在循環(huán)中,矩陣大小是變化的,這就導(dǎo)致每次循環(huán)時都浪費額外的時間去尋找滿足需求的內(nèi)存空間,將改變大小后的矩陣整體移動到這個新的內(nèi)容空間中,并釋放原來的內(nèi)存空間,這除了會影響代碼的運行效率,還容易形成內(nèi)存碎片,讓程序越來越難找到滿足條件的內(nèi)存。
??因此在循環(huán)前給矩陣預(yù)分配內(nèi)存是很一個良好的習(xí)慣,如果沒有這個習(xí)慣,你還可以通過Matlab自帶的代碼檢查器來查看是否存在類似問題。
所以,我們應(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
這個程序只用了0.007秒的時間就運行完成了,可見它們的差距有多大。
3. 按列存儲
??Matlab中默認是按列存儲的,也就是說,列向量在內(nèi)存中是連續(xù)排列的,對連續(xù)的數(shù)據(jù)做處理肯定是要快的,所以我們在定義向量時一般都會使用列向量。下面對比矩陣中對行做操作和對列做操作花費的時間。
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
我們對矩陣中的每一列都求和,總共用了0.17秒。
tic for i=1:n mrow(i) = sum(mtrx(i,:)); end toc
再對矩陣中的每一行求和,用了0.8秒。
可以看出,對列操作比對行操作速度要快很多。
4. 數(shù)據(jù)類型
??在Matlab中,數(shù)據(jù)類型默認是double型,對使用者來說,無需太多關(guān)心數(shù)據(jù)類型當(dāng)然是省心省力的,但這也帶來了一個問題就是double型占用的內(nèi)存較多,還有可能拖慢程序的運行速度。所以,在適當(dāng)?shù)那闆r下,我們可以把數(shù)據(jù)類型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點是,一個變量在改變數(shù)據(jù)類型時會消耗額外的時間,因此還不如重新建一個新變量。
??高效編程的內(nèi)容就先寫這么多,后面還會繼續(xù)補充。下面說一個Matlab調(diào)試中斷點設(shè)置問題。在一個for循環(huán)中,比如for i=1:n,我們想在i=100的進入斷點,這個時候應(yīng)該怎么用?以前的時候我們都會這么寫。
for i=1:n if(i==100) pass end end
把斷點設(shè)置在pass處,但其實不用這么弄。Matlab中提供了條件斷點的設(shè)置方式。在循環(huán)中右鍵選擇設(shè)置條件斷點,如下圖所示。
Figure 1. 條件斷點設(shè)置1
在下面的窗口中填入條件即可,比如i==100。
Figure 2. 條件斷點設(shè)置2
這樣,當(dāng)程序運行到i==100時就會進入斷點,不需要自己再寫額外的語句。
- MATLAB編程指南pdf03 0次下載
- MATLAB編程指南pdf02 0次下載
- MATLAB編程指南pdf01 0次下載
- 使用MATLAB進行線性編程 0次下載
- MATLAB的循環(huán)向量化編程方法的詳細資料研究 4次下載
- 幅頻特性曲線Matlab編程的資料免費下載 5次下載
- MATLAB高效編程技巧應(yīng)用與25個案例分析的詳細資料概述 0次下載
- 《matlab編程進階》.pdf 0次下載
- 菜鳥入門Matlab編程 19次下載
- Qt與Matlab混合編程 0次下載
- MATLAB高效編程程序源代碼 6次下載
- MATLAB編程_第二版 0次下載
- matlab擴展編程 1次下載
- MATLAB編程基礎(chǔ)與典型應(yīng)用_劉會燈 0次下載
- matlab編程入門基礎(chǔ)與應(yīng)用
- MATLAB信號處理常用函數(shù)詳解 964次閱讀
- 講解MATLAB/Simulink HDL使用入門 1040次閱讀
- 關(guān)于MATLAB求導(dǎo)實踐的總結(jié) 1554次閱讀
- 30個MATLAB圖形繪制 1439次閱讀
- 基于六面體單元熱應(yīng)力問題的Matlab有限元編程求解 2517次閱讀
- 基于Matlab有限元編程的變截面懸臂梁分析 3599次閱讀
- MATLAB程序調(diào)試的方法及工具介紹 6642次閱讀
- MATLAB基礎(chǔ)知識MATLAB的簡介,編程環(huán)境和基本操作的詳細概述 7378次閱讀
- matlab串口數(shù)據(jù)采集 2.4w次閱讀
- MATLAB如何實現(xiàn)圖像增強灰度變換直方圖均衡匹配 1w次閱讀
- matlab-插值 1665次閱讀
- matlab輸入矩陣的格式的方法步驟 2w次閱讀
- 基于LabVIEW和Matlab混合編程的小波降噪方法 1w次閱讀
- 專家支招:使用MATLAB和Simulink算法創(chuàng)建FPGA原型 1.6w次閱讀
- 基于Matlab的FIR帶通濾波器設(shè)計與實現(xiàn) 2.9w次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1491次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 95次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關(guān)電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機和 SG3525的程控開關(guān)電源設(shè)計
- 0.23 MB | 4次下載 | 免費
- 8基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關(guān)電源設(shè)計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537793次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多