chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-08 15:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:貓叔來(lái)源:科學(xué)計(jì)算Tech微信公眾號(hào)

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

在講優(yōu)化方法之前,首先要說(shuō)的就是Matlab中用tic toc的方式來(lái)計(jì)算運(yùn)行時(shí)間,這是個(gè)常識(shí)。當(dāng)然,想統(tǒng)計(jì)具體的耗時(shí),可以用profile工具。

1. 向量化操作

這個(gè)應(yīng)該是用過(guò)Matlab的同學(xué)都清楚的一點(diǎn),Matlab中操作向量和矩陣的速度要比使用for循環(huán)的速度快很多,是因?yàn)槠涞讓诱{(diào)用了高性能線性代數(shù)庫(kù)BLAS庫(kù)和LAPACK庫(kù)。這個(gè)就不多說(shuō)了。

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

在Matlab中我們可以定義一個(gè)空矩陣

mtx = [];

然后后面再給它加入一些數(shù)據(jù),而且這個(gè)矩陣大小可以隨著我們填入數(shù)據(jù)的多少而變化。像下面這個(gè)程序

tic n = 1000; mtrx = []; init = 1.0; for i = 1:n for j=1:n mtrx(i,j) = init + 1.0; end end toc

這個(gè)程序的運(yùn)行時(shí)間是多久呢?在我電腦上是0.2秒。

那這個(gè)程序有什么問(wèn)題呢?就是我們沒(méi)有為這個(gè)矩陣分配一個(gè)內(nèi)存空間,而且在循環(huán)中,矩陣大小是變化的,這就導(dǎo)致每次循環(huán)時(shí)都浪費(fèi)額外的時(shí)間去尋找滿足需求的內(nèi)存空間,將改變大小后的矩陣整體移動(dòng)到這個(gè)新的內(nèi)容空間中,并釋放原來(lái)的內(nèi)存空間,這除了會(huì)影響代碼的運(yùn)行效率,還容易形成內(nèi)存碎片,讓程序越來(lái)越難找到滿足條件的內(nèi)存。

因此在循環(huán)前給矩陣預(yù)分配內(nèi)存是很一個(gè)良好的習(xí)慣,如果沒(méi)有這個(gè)習(xí)慣,你還可以通過(guò)Matlab自帶的代碼檢查器來(lái)查看是否存在類似問(wèn)題。

所以,我們應(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

這個(gè)程序只用了0.007秒的時(shí)間就運(yùn)行完成了,可見(jiàn)它們的差距有多大。

3. 按列存儲(chǔ)

Matlab中默認(rèn)是按列存儲(chǔ)的,也就是說(shuō),列向量在內(nèi)存中是連續(xù)排列的,對(duì)連續(xù)的數(shù)據(jù)做處理肯定是要快的,所以我們?cè)诙x向量時(shí)一般都會(huì)使用列向量。下面對(duì)比矩陣中對(duì)行做操作和對(duì)列做操作花費(fèi)的時(shí)間。

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

我們對(duì)矩陣中的每一列都求和,總共用了0.17秒。

tic for i=1:n mrow(i) = sum(mtrx(i,:)); end toc

再對(duì)矩陣中的每一行求和,用了0.8秒。
可以看出,對(duì)列操作比對(duì)行操作速度要快很多。

4. 數(shù)據(jù)類型

在Matlab中,數(shù)據(jù)類型默認(rèn)是double型,對(duì)使用者來(lái)說(shuō),無(wú)需太多關(guān)心數(shù)據(jù)類型當(dāng)然是省心省力的,但這也帶來(lái)了一個(gè)問(wèn)題就是double型占用的內(nèi)存較多,還有可能拖慢程序的運(yùn)行速度。所以,在適當(dāng)?shù)那闆r下,我們可以把數(shù)據(jù)類型選擇為邏輯型、字符型、整型等。但這樣還需要注意的一點(diǎn)是,一個(gè)變量在改變數(shù)據(jù)類型時(shí)會(huì)消耗額外的時(shí)間,因此還不如重新建一個(gè)新變量。

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

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

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

Figure 1. 條件斷點(diǎn)設(shè)置1

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

Figure 2. 條件斷點(diǎn)設(shè)置2

這樣,當(dāng)程序運(yùn)行到i==100時(shí)就會(huì)進(jìn)入斷點(diǎn),不需要自己再寫額外的語(yǔ)句。

審核編輯:何安

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

    關(guān)注

    189

    文章

    3022

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    vivado中常用時(shí)序約束指令介紹

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

    請(qǐng)問(wèn)Keil的優(yōu)化等級(jí)到底該如何選擇?

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

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

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

    matlab appdesigner 表格組件賦值問(wèn)題,求助

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

    研磨盤在哪些工藝中常用

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

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

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

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

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

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

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

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

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

    芯片前端設(shè)計(jì)中常用的軟件和工具

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

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

    在電動(dòng)汽車與智能汽車蓬勃發(fā)展的浪潮中,高效的熱管理技術(shù)是平衡性能、續(xù)航與能耗的核心挑戰(zhàn)。從 Mahindra Electric(MEML) 通過(guò)系統(tǒng)級(jí)仿真優(yōu)化電池?zé)峁芾?,到重慶超力基于模型設(shè)計(jì)實(shí)現(xiàn)
    的頭像 發(fā)表于 05-14 14:22 ?668次閱讀
    <b class='flag-5'>MATLAB</b>/Simulink驅(qū)動(dòng)汽車行業(yè)能效革命

    MATLAB在工程中的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《MATLAB在工程中的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 04-19 16:54 ?8次下載

    電子電路設(shè)計(jì)中常用的接地方式詳解

    在電子電路設(shè)計(jì)中,接地方式的選擇至關(guān)重要,它直接影響到電路的穩(wěn)定性、抗干擾能力和安全性。以下是電子電路設(shè)計(jì)中常用的幾種接地方式的詳解: 一、浮地 1. 定義:浮地是指電路或設(shè)備與公共地線可能引起環(huán)流
    的頭像 發(fā)表于 04-17 16:24 ?1784次閱讀
    電子電路設(shè)計(jì)<b class='flag-5'>中常用</b>的接地方式詳解

    VirtualLab Fusion應(yīng)用:非近軸衍射分束器的設(shè)計(jì)與優(yōu)化

    )的結(jié)構(gòu)設(shè)計(jì)生成一系列分束器的初始設(shè)計(jì),然后通過(guò)傅里葉模態(tài)法或嚴(yán)格耦合波分析(FMM/RCWA)進(jìn)一步優(yōu)化。為了給最后一個(gè)優(yōu)化步驟定義一個(gè)合適和有效的優(yōu)化函數(shù),應(yīng)用了可編程光柵分析器。
    發(fā)表于 03-10 08:56

    如何優(yōu)化 CPLD 性能

    CPLD(復(fù)雜可編程邏輯器件)是一種介于簡(jiǎn)單PLD(可編程邏輯器件)和FPGA(現(xiàn)場(chǎng)可編程門陣列)之間的可編程邏輯器件。它們通常用于實(shí)現(xiàn)中等
    的頭像 發(fā)表于 01-23 10:03 ?1257次閱讀