哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

幾個Matlab編程中常用的優(yōu)化技巧

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2022-02-08 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:貓叔來源:科學計算Tech微信公眾號

用過Matlab的同學應該都知道,Matlab的慢是出了名的,但是再慢也有優(yōu)化的方式,下面我們給出幾個Matlab編程中常用的優(yōu)化技巧。

在講優(yōu)化方法之前,首先要說的就是Matlab中用tic toc的方式來計算運行時間,這是個常識。當然,想統(tǒng)計具體的耗時,可以用profile工具。

1. 向量化操作

這個應該是用過Matlab的同學都清楚的一點,Matlab中操作向量和矩陣的速度要比使用for循環(huán)的速度快很多,是因為其底層調(diào)用了高性能線性代數(shù)庫BLAS庫和LAPACK庫。這個就不多說了。

2. 內(nèi)存預分配

在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)中,矩陣大小是變化的,這就導致每次循環(huán)時都浪費額外的時間去尋找滿足需求的內(nèi)存空間,將改變大小后的矩陣整體移動到這個新的內(nèi)容空間中,并釋放原來的內(nèi)存空間,這除了會影響代碼的運行效率,還容易形成內(nèi)存碎片,讓程序越來越難找到滿足條件的內(nèi)存。

因此在循環(huán)前給矩陣預分配內(nèi)存是很一個良好的習慣,如果沒有這個習慣,你還可以通過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è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ù)類型當然是省心省力的,但這也帶來了一個問題就是double型占用的內(nèi)存較多,還有可能拖慢程序的運行速度。所以,在適當?shù)那闆r下,我們可以把數(shù)據(jù)類型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點是,一個變量在改變數(shù)據(jù)類型時會消耗額外的時間,因此還不如重新建一個新變量。

高效編程的內(nèi)容就先寫這么多,后面還會繼續(xù)補充。下面說一個Matlab調(diào)試中斷點設置問題。在一個for循環(huán)中,比如for i=1:n,我們想在i=100的進入斷點,這個時候應該怎么用?以前的時候我們都會這么寫。

for i=1:n if(i==100) pass end end

把斷點設置在pass處,但其實不用這么弄。Matlab中提供了條件斷點的設置方式。在循環(huán)中右鍵選擇設置條件斷點。

Figure 1. 條件斷點設置1

在下面的窗口中填入條件即可,比如i==100。

Figure 2. 條件斷點設置2

這樣,當程序運行到i==100時就會進入斷點,不需要自己再寫額外的語句。

審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • matlab
    +關(guān)注

    關(guān)注

    189

    文章

    3028

    瀏覽量

    239175
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    vivado中常用時序約束指令介紹

    在vivado中,我們常用的時序約束指令主要包括如下幾個方面。
    的頭像 發(fā)表于 01-20 16:15 ?626次閱讀

    如何在CW32 MCU上優(yōu)化I2C通信

    在嵌入式系統(tǒng)中,CW32 MCU的I2C接口通常用于與各種外設(如EEPROM、傳感器等)進行數(shù)據(jù)通信。為了實現(xiàn)高效、穩(wěn)定的I2C通信,必須考慮頻率調(diào)節(jié)和數(shù)據(jù)完整性的問題。本文將聚焦于如何在CW32
    發(fā)表于 11-27 06:25

    請問Keil的優(yōu)化等級到底該如何選擇?

    能、資源占用和開發(fā)效率的關(guān)鍵。Keil MDK通常提供以下幾個主要的優(yōu)化等級選項。 -O0 (無優(yōu)化 / Optimization Level 0): 目標: 提供最佳的調(diào)試體驗。 行為: 編譯器幾乎不
    發(fā)表于 11-20 07:51

    如何對蜂鳥e203內(nèi)核乘除法器進行優(yōu)化

    器:對每個流水線階段中的數(shù)據(jù)進行部分商和余數(shù)的計算和累加操作。 二、優(yōu)化方案 優(yōu)化乘法器 為了提高蜂鳥E203的乘法器性能,可以采取以下幾個優(yōu)化方案: 采用更高效的算法:Booth算
    發(fā)表于 10-24 06:47

    蜂鳥E203內(nèi)核優(yōu)化方法

    對蜂鳥E203內(nèi)核進行優(yōu)化可以考慮以下幾個方面: 編譯器優(yōu)化:使用適合蜂鳥E203的編譯器選項和指令集,優(yōu)化編譯器的選項和參數(shù),開啟對硬件的特定支持,比如使用-O2等
    發(fā)表于 10-21 07:55

    matlab appdesigner 表格組件賦值問題,求助

    如上圖所示,我在用matlab2021Ra APP模塊進行編程的時候,想在表格中調(diào)入自己編寫的結(jié)構(gòu)數(shù)組,我從網(wǎng)上AI了一個程序語句,看著沒問題,但是就是給表格賦值不了,還請各位大神幫忙看一下這個是怎么回事,我是初學者,請各位幫忙看看
    發(fā)表于 07-12 11:45

    研磨盤在哪些工藝中常用

    研磨盤在多種工藝中都是不可或缺的工具,主要用于實現(xiàn)工件表面的高精度加工和成形。以下是研磨盤常用的工藝領(lǐng)域及具體應用: ? 一、半導體制造工藝 ? ? 晶圓減薄與拋光 ? 用于硅、碳化硅等半導體晶圓
    的頭像 發(fā)表于 07-12 10:13 ?1313次閱讀

    基于Matlab與FPGA的雙邊濾波算法實現(xiàn)

    前面發(fā)過中值、均值、高斯濾波的文章,這些只考慮了位置,并沒有考慮相似度。那么雙邊濾波來了,既考慮了位置,有考慮了相似度,對邊緣的保持比前幾個好很多,當然實現(xiàn)上也是復雜很多。本文將從原理入手,采用Matlab與FPGA設計實現(xiàn)雙邊濾波算法。
    的頭像 發(fā)表于 07-10 11:28 ?4812次閱讀
    基于<b class='flag-5'>Matlab</b>與FPGA的雙邊濾波算法實現(xiàn)

    如何優(yōu)化編程電源控制環(huán)路參數(shù)?

    優(yōu)化編程電源控制環(huán)路參數(shù)是提升其動態(tài)響應、穩(wěn)定性和輸出精度的關(guān)鍵步驟,需結(jié)合理論分析、仿真驗證、實驗調(diào)整三階段,并重點關(guān)注補償網(wǎng)絡設計、參數(shù)計算、仿真優(yōu)化、實驗驗證等核心環(huán)節(jié)。以下是具體優(yōu)化
    發(fā)表于 07-02 15:56

    提高篇——C語言核心技術(shù)(中文版)

    嚴謹?shù)男g(shù)語表介紹C語言;第二部分描述標準鏈接庫;第三部分介紹GNU軟件包中常用的編譯和測試工具。 獲取完整文檔資料可下載附件哦?。。?!如果內(nèi)容有幫助可以關(guān)注、點贊、評論支持一下哦~
    發(fā)表于 06-13 16:39

    漢思新材料:攝像頭生產(chǎn)常用膠水有哪些?

    攝像頭生產(chǎn)常用膠水有哪些?攝像頭生產(chǎn)中常用的膠水類型多樣,主要根據(jù)其固化方式、性能特點和應用場景進行選擇。以下是攝像頭生產(chǎn)中常用的膠水類型及其特點:一、低溫熱固化膠(如漢思的低溫黑膠HS600系列
    的頭像 發(fā)表于 06-13 13:55 ?945次閱讀
    漢思新材料:攝像頭生產(chǎn)<b class='flag-5'>常用</b>膠水有哪些?

    Matlab與MWORKS軟件計算精度對比

    移動力在簡支梁上的位置輸入到y(tǒng)向量中。 其中Matlab編程代碼為 clear L=32;%簡支梁長 v=3.2;%運行速度 dt=0.5; x0=0; n=20; y=zeros(1,n);%預設
    發(fā)表于 06-07 16:57

    VirtualLab:光柵的優(yōu)化與分析

    光柵是光學工程師使用的最基本的工具。為了設計和分析這類組件,快速物理光學建模和設計軟件VirtualLab Fusion為用戶提供了許多有用的工具。其中包括參數(shù)優(yōu)化,以輕松優(yōu)化系統(tǒng),以及參數(shù)運行,它
    發(fā)表于 05-23 08:49

    芯片前端設計中常用的軟件和工具

    前端設計是數(shù)字芯片開發(fā)的初步階段,其核心目標是從功能規(guī)格出發(fā),最終獲得門級網(wǎng)表(Netlist)。這個過程主要包括:規(guī)格制定、架構(gòu)設計、HDL編程、仿真驗證、邏輯綜合、時序分析和形式驗證。
    的頭像 發(fā)表于 05-15 16:48 ?1827次閱讀

    MATLAB/Simulink驅(qū)動汽車行業(yè)能效革命

    在電動汽車與智能汽車蓬勃發(fā)展的浪潮中,高效的熱管理技術(shù)是平衡性能、續(xù)航與能耗的核心挑戰(zhàn)。從 Mahindra Electric(MEML) 通過系統(tǒng)級仿真優(yōu)化電池熱管理,到重慶超力基于模型設計實現(xiàn)
    的頭像 發(fā)表于 05-14 14:22 ?963次閱讀
    <b class='flag-5'>MATLAB</b>/Simulink驅(qū)動汽車行業(yè)能效革命
    舒城县| 玛纳斯县| 大理市| 安义县| 古蔺县| 嘉义市| 葫芦岛市| 贵阳市| 东城区| 宁陕县| 和顺县| 根河市| 泗水县| 长垣县| 大埔县| 昭平县| 琼海市| 德保县| 古田县| 平昌县| 花莲县| 普宁市| 富民县| 华池县| 会宁县| 宣武区| 南部县| 瓮安县| 南江县| 益阳市| 淅川县| 老河口市| 枣阳市| 宁远县| 平武县| 丽水市| 射阳县| 衡水市| 牙克石市| 濮阳县| 女性|