資料介紹
作者:貓叔?來源:科學計算Tech微信公眾號
用過Matlab的同學應該都知道,Matlab的慢是出了名的,但是再慢也有優化的方式,下面我們給出幾個Matlab編程中常用的優化技巧。
??在講優化方法之前,首先要說的就是Matlab中用tic toc的方式來計算運行時間,這是個常識。當然,想統計具體的耗時,可以用profile工具。
1. 向量化操作
??這個應該是用過Matlab的同學都清楚的一點,Matlab中操作向量和矩陣的速度要比使用for循環的速度快很多,是因為其底層調用了高性能線性代數庫BLAS庫和LAPACK庫。這個就不多說了。
2. 內存預分配
??在Matlab中我們可以定義一個空矩陣
mtx = [];
然后后面再給它加入一些數據,而且這個矩陣大小可以隨著我們填入數據的多少而變化。像下面這個程序
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秒。
??那這個程序有什么問題呢?就是我們沒有為這個矩陣分配一個內存空間,而且在循環中,矩陣大小是變化的,這就導致每次循環時都浪費額外的時間去尋找滿足需求的內存空間,將改變大小后的矩陣整體移動到這個新的內容空間中,并釋放原來的內存空間,這除了會影響代碼的運行效率,還容易形成內存碎片,讓程序越來越難找到滿足條件的內存。
??因此在循環前給矩陣預分配內存是很一個良好的習慣,如果沒有這個習慣,你還可以通過Matlab自帶的代碼檢查器來查看是否存在類似問題。
所以,我們應該把程序修改如下:
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 = 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. 數據類型
??在Matlab中,數據類型默認是double型,對使用者來說,無需太多關心數據類型當然是省心省力的,但這也帶來了一個問題就是double型占用的內存較多,還有可能拖慢程序的運行速度。所以,在適當的情況下,我們可以把數據類型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點是,一個變量在改變數據類型時會消耗額外的時間,因此還不如重新建一個新變量。
??高效編程的內容就先寫這么多,后面還會繼續補充。下面說一個Matlab調試中斷點設置問題。在一個for循環中,比如for i=1:n,我們想在i=100的進入斷點,這個時候應該怎么用?以前的時候我們都會這么寫。
for i=1:n if(i==100) pass end end
把斷點設置在pass處,但其實不用這么弄。Matlab中提供了條件斷點的設置方式。在循環中右鍵選擇設置條件斷點,如下圖所示。

Figure 1. 條件斷點設置1
在下面的窗口中填入條件即可,比如i==100。

Figure 2. 條件斷點設置2
這樣,當程序運行到i==100時就會進入斷點,不需要自己再寫額外的語句。
- MATLAB編程指南pdf03 0次下載
- MATLAB編程指南pdf02 0次下載
- MATLAB編程指南pdf01 0次下載
- 使用MATLAB進行線性編程 0次下載
- MATLAB的循環向量化編程方法的詳細資料研究 4次下載
- 幅頻特性曲線Matlab編程的資料免費下載 5次下載
- MATLAB高效編程技巧應用與25個案例分析的詳細資料概述 0次下載
- 《matlab編程進階》.pdf 0次下載
- 菜鳥入門Matlab編程 19次下載
- Qt與Matlab混合編程 0次下載
- MATLAB高效編程程序源代碼 6次下載
- MATLAB編程_第二版 0次下載
- matlab擴展編程 1次下載
- MATLAB編程基礎與典型應用_劉會燈 0次下載
- matlab編程入門基礎與應用
- MATLAB信號處理常用函數詳解 2517次閱讀
- 講解MATLAB/Simulink HDL使用入門 1415次閱讀
- 關于MATLAB求導實踐的總結 1854次閱讀
- 30個MATLAB圖形繪制 1736次閱讀
- 基于六面體單元熱應力問題的Matlab有限元編程求解 3065次閱讀
- 基于Matlab有限元編程的變截面懸臂梁分析 4139次閱讀
- MATLAB程序調試的方法及工具介紹 6880次閱讀
- MATLAB基礎知識MATLAB的簡介,編程環境和基本操作的詳細概述 7616次閱讀
- matlab串口數據采集 2.4w次閱讀
- MATLAB如何實現圖像增強灰度變換直方圖均衡匹配 1w次閱讀
- matlab-插值 1773次閱讀
- matlab輸入矩陣的格式的方法步驟 2.1w次閱讀
- 基于LabVIEW和Matlab混合編程的小波降噪方法 1w次閱讀
- 專家支招:使用MATLAB和Simulink算法創建FPGA原型 1.6w次閱讀
- 基于Matlab的FIR帶通濾波器設計與實現 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開關電源原理及各功能電路詳解
- 0.38 MB | 11次下載 | 免費
- 6100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 7基于單片機和 SG3525的程控開關電源設計
- 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 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 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十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論