<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

幾個Matlab編程中常用的優化技巧

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-08 15:18 ? 次閱讀

作者:貓叔來源:科學計算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
    +關注

    關注

    176

    文章

    2928

    瀏覽量

    228625
收藏 人收藏

    評論

    相關推薦

    MATLAB信號處理常用函數詳解

    MATLAB是一款功能強大的數學軟件,尤其在信號處理領域,它提供了眾多的函數和工具箱,使得信號的分析、處理、仿真變得簡單而高效。本文將詳細介紹MATLAB在信號處理中常用的函數,并通過具體示例來闡述其應用。
    的頭像 發表于 05-17 14:31 ?38次閱讀

    分享幾個嵌入式中常用的GUI

    交互,完成各種操作,可提高工作效率以及用戶體驗。接下來看一下我們開發中常用的GUI框架有哪些吧~二、開源輕量級顯示框架LVGLLVGL(LightandVersat
    的頭像 發表于 04-06 08:09 ?299次閱讀
    分享<b class='flag-5'>幾個</b>嵌入式<b class='flag-5'>中常用</b>的GUI

    java中常用的包有哪些

    Java是一種面向對象的高級編程語言,它具有平臺無關性和可擴展性。Java中有很多常用的包,這些包提供了豐富的類庫和工具,用于開發各種類型的應用程序。下面是Java中一些常用
    的頭像 發表于 11-22 15:10 ?583次閱讀

    gvim中常用的一些指令介紹

    在 Vim 編輯器中,有一些常用的指令可以幫助我們更高效地編輯文本。以下是一些在 gvim 中常用的指令
    的頭像 發表于 10-10 15:47 ?966次閱讀

    伺服電機中常用的絕緣材料介紹

    伺服電機中常用的絕緣材料,按其耐熱能力可分為A、B、C、H、F和E等級
    發表于 10-07 18:27 ?476次閱讀

    列舉一些C語言中常用的宏定義

    寫好C語言,使用宏定義可以防止出錯,提高可移植性、可讀性等。下文列舉一些成熟軟件中常用的宏定義。
    發表于 10-07 10:54 ?237次閱讀
    列舉一些C語言<b class='flag-5'>中常用</b>的宏定義

    MATLAB編程優化中的應用介紹

    機會。與前幾年的高級編程語言相比,這些軟件系統非常容易掌握。本書主要試圖利用這種三角服務,為設計優化的研究提供一種實用的方法。這本書使用MATLAB@toillustrate并實現各種優化
    發表于 09-21 07:07

    物聯網中常用的傳感器有哪些

    、風速、聲音等,然后將這些信息發送到控制中心或其他設備。本文將介紹物聯網中常用的傳感器,包括以下幾個方面: 1. 溫度傳感器 溫度傳感器是物聯網中最常見的傳感器之一,它可以測量環境中的溫度。溫度傳感器廣泛應用于工業
    的頭像 發表于 09-08 11:23 ?3534次閱讀

    FPGA中常用的存儲器資源

    本文主要介紹FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等資源,包括特性、工作原理、應用場景等。
    發表于 08-15 15:41 ?1546次閱讀

    C++中常用關鍵字詳解(1)

    以然。因此,在平時和小伙伴們聊天時,在談到學習技術方面的問題,我會告訴他們注重基本功。所以,最近文章會總結一些日常編程工作中常用的重要基本知識點,根據平時工作中常用的也是重要的知識點逐步展開。
    發表于 08-08 16:15 ?146次閱讀

    MATLAB常用基本函數 MATLAB使用技巧

      MATLAB常用的基本數學函數  abs(x):純量的絕對值或向量的長度  angle(z):復 數z的相角(Phase angle)  sqrt(x):開平方  real(z):復數
    發表于 07-19 09:52 ?0次下載

    MATLAB語言編程方法 MATLAB實現信號通過系統的仿真

      實驗目的:  1、 學習MATLAB語言的編程方法及熟悉MATLAB指令;  2、 深刻理解卷積運算,利用離散卷積實現連續卷積運算;  3、 深刻理解信號與系統的關系,學習MATLAB
    發表于 07-18 16:51 ?0次下載

    MATLAB中常用的數值計算和數值分析基礎知識

    MATLAB是一個功能強大的數值計算和科學計算軟件,它提供了許多用于數值計算和數值分析的基礎功能。
    的頭像 發表于 07-07 09:27 ?1408次閱讀

    100個數字IC設計中常用的縮寫或術語

    下面為大家收集了100個數字IC設計中常用的縮寫或術語,供大家參考,為初學者門的學習添磚加瓦。
    發表于 06-20 12:43 ?721次閱讀

    設計中常用的防松措施

    機械設備中螺栓連接一旦松懈,會引起螺栓脫落導致重大安全隱患,或螺栓松弛預緊力下降導致螺栓連接疲勞壽命大大縮短。因此在設計中要選用適當的防松措施保證螺栓在實際使用中不松脫。 設計中常用的防松措施有如
    的頭像 發表于 05-26 11:47 ?892次閱讀
    設計<b class='flag-5'>中常用</b>的防松措施
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>