精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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
    +關注

    關注

    182

    文章

    2963

    瀏覽量

    230170
收藏 人收藏

    評論

    相關推薦

    labview中常用的程序結構有哪幾種

    和邏輯的關鍵,以下是LabVIEW中常用的幾種程序結構: 順序結構(Sequential Structure) 順序結構是最簡單的程序結構,它按照從上到下、從左到右的順序執
    的頭像 發表于 09-04 16:32 ?587次閱讀

    簡述socket編程中的常用函數

    Socket編程是一種基于TCP/IP協議的網絡編程技術,它允許應用程序通過網絡進行通信。在Socket編程中,有許多常用的函數,它們用于創建、配置、連接、發送和接收數據等操作。以下是
    的頭像 發表于 08-16 10:49 ?303次閱讀

    華為設備中常用的RIP命令及其應用

    RIP(Routing Information Protocol,路由信息協議)是一種應用廣泛的距離矢量路由協議,尤其適用于中小型網絡。本文將詳細介紹在華為設備中常用的RIP命令及其應用,以幫助網絡管理員和工程師更好地理解和配置RIP協議。
    的頭像 發表于 08-12 18:10 ?639次閱讀

    嵌入式系統中常用的五種微處理器類型

    本文介紹了嵌入式系統中常用的五種微處理器類型:微處理器單元(MPU)、微控制器(MCU)、數字信號處理器(DSP)、現場可編程邏輯門陣列(FPGA)和單片機(SBC)。文章詳細闡述了每種處理器的功能、優點、缺點以及選擇建議,并列出了一些精選的微處理器產品,供讀者參考。
    的頭像 發表于 07-25 09:29 ?1587次閱讀

    如何使用MATLAB創建預測模型

    在這篇文章中,我們將討論如何使用MATLAB創建預測模型。MATLAB(矩陣實驗室)是一種用于數值計算、可視化和編程的高級編程語言和交互式環境。它廣泛應用于工程、科學研究和金融領域。
    的頭像 發表于 07-11 14:29 ?619次閱讀

    matlab預測模型有哪些

    環境,使其成為預測模型開發和實現的理想平臺。本文將詳細介紹MATLAB中常用的預測模型及其應用。 線性回歸模型 線性回歸是一種簡單的預測模型,用于分析兩個或多個變量之間的線性關系。在MATLAB中,可以使用 regress 、
    的頭像 發表于 07-11 14:27 ?687次閱讀

    機器視覺中常用的光源類型及優點?

    中常用的光源類型及其優點。 一、LED光源 優點 (1)高亮度:LED光源具有高亮度,能夠提供足夠的光線,使圖像更加清晰。 (2)低能耗:LED光源的能耗較低,能夠降低整個系統的運行成本。 (3)長壽命:LED光源的使用壽命較長,一
    的頭像 發表于 07-04 10:28 ?507次閱讀

    PLC常用編程語言有哪些

    語言多種多樣,每種語言都有其獨特的特點和適用場景。本文將詳細介紹PLC常用編程語言,包括梯形圖(LD)、指令表(IL)、功能模塊圖(FBD)、順序功能流程圖(SFC)以及結構化文本(ST),并通過具體的特點和應用實例,幫助讀者更好地理解和選擇適合的
    的頭像 發表于 06-14 16:58 ?1245次閱讀

    MATLAB信號處理常用函數詳解

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

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

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

    gis中常用的空間分析方法

    GIS中常用的空間分析方法 GIS(地理信息系統)是一種用于收集、存儲、處理、分析和展示地理數據的技術。空間分析是GIS的核心部分,它包括一系列方法和技術,用來研究地理空間數據之間的關系和模式。本文
    的頭像 發表于 02-25 13:44 ?5073次閱讀

    編程邏輯器件的優化過程主要是對什么進行

    編程邏輯器件(Programmable Logic Device,簡稱PLD)的優化過程主要是對電路布局、邏輯設計、時序建模和資源利用等方面進行優化。下面,我將詳細介紹這些方面的優化
    的頭像 發表于 02-01 16:41 ?607次閱讀

    plc中常用的編寫程序的語言有哪些 plc中上升沿和下降沿怎么用

    梯形圖是PLC中最常用和最廣泛支持的編程語言。它以線圖的形式展現,使用繼電器邏輯圖形符號來表示邏輯關系和控制流程。
    發表于 01-10 15:04 ?643次閱讀

    電子電路中常用的元器件

    電容器、三極管和二極管是電子電路中常用的元器件,它們可以搭配使用以實現各種功能。下面將詳細介紹它們的搭配使用方法和使用規范。 一、電容器 電容器是一種能夠存儲電荷的被動元件,主要用于儲存
    的頭像 發表于 12-29 14:47 ?775次閱讀

    淺析現代半導體產業中常用的半導體材料

    半導體材料是半導體產業的核心,它是制造電子和計算機芯片的基礎。半導體材料的種類繁多,不同的材料具有不同的特性和用途。本文將介紹現代半導體產業中常用的半導體材料。 一、硅(Si) 硅是最常見的半導體
    發表于 11-29 10:22 ?1345次閱讀
    淺析現代半導體產業<b class='flag-5'>中常用</b>的半導體材料