日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab 程序设计

發(fā)布時(shí)間:2024/1/23 循环神经网络 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab 程序设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、M文件

??用Matlab 語言編寫的程序,稱為M文件,后綴名為 .M。實(shí)質(zhì)上M文件也就是一個(gè)文本文件,可以使用任何編輯程序來建立和編輯,默認(rèn)使用Matlab提供的文本編輯器打開進(jìn)行編輯。
??在進(jìn)一步探討M文件之前,我們先回顧一下我們上一篇blogMatlab基礎(chǔ)知識(shí)中講解使用了那些類型的文件:

  • 內(nèi)存變量文件 后綴名.mat
save filename [var_list] [-append][-ascii]; load filename [var_list] [-ascii];
  • 用 .M 文件 生成矩陣
mydata=[1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9; 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9; 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9];
  • 用.dat文件生成矩陣
2 4 6 8 6 ;3 5 6 7 3 ;2 5 1 2 5 load test.dat

??也就是說我們已經(jīng)用過 .M文件了,而且上一次我們存的是數(shù)據(jù) mydata。這就要引出我們下面要說的了: M文件的分類
??M文件分為兩類:

  • 命令文 件(Script File)
  • 函數(shù)文件(Function File)
    主要區(qū)別如下:
    (1)命令文件沒有輸入?yún)?shù),也不返回輸出參數(shù), 而函數(shù)文件可以帶輸入?yún)?shù),也可返回輸出參數(shù)。
    (2)命令文件對(duì)MATLAB工作空間中的變量進(jìn)行 操作,文件中所有命令的執(zhí)行結(jié)果也完全返回到工作空間中,而函數(shù)文件中定義的變量為局部變量, 當(dāng)函數(shù)文件執(zhí)行完畢時(shí),這些變量被清除。
    (3)命令文件可以直接運(yùn)行,在MATLAB命令窗口輸入命令文件的名字,就會(huì)順序執(zhí)行命令文件中的命令,而函數(shù)文件不能直接運(yùn)行,而要以函數(shù)調(diào)用的方式來調(diào)用它。
// 命令文件 clear; R=[1,2,3;4,5,6]; M=[11,12,13;14,15,16]; RM=R+i*M // 函數(shù)文件 function RM=fsetcomp(R,M) RM=R+i*M;

PS:如果你理解了他們之間的區(qū)別,那么你現(xiàn)在應(yīng)該清楚的知道我們?cè)谏弦黄恼轮惺褂玫?M文件屬于 命令文件。

下面就來詳細(xì)講講函數(shù)文件
??函數(shù)文件是另一種形式的M文件,每一個(gè)函 數(shù)文件都定義一個(gè)函數(shù)。 事實(shí)上,MATLAB提供的標(biāo)準(zhǔn)函數(shù)大部分 都是由函數(shù)文件定義的。基本結(jié)構(gòu)如下:

function 輸出形參表=函數(shù)名(輸入形參表) 注釋說明部分 函數(shù)體語句

說明:
??以function開頭的一行為引導(dǎo)行,表示該M 文件是一個(gè)函數(shù)文件。函數(shù)名的命名規(guī)則與變量名相同。輸入形參為函數(shù)的輸入?yún)?shù),輸出形參為函 數(shù)的輸出參數(shù)。當(dāng)輸出形參多于一個(gè)時(shí),則應(yīng)該用方括號(hào)括起來。 函數(shù)文件名通常由函數(shù)名再加上擴(kuò)展名.m組成,不過函數(shù)文件名與函數(shù)名也可以不相同。當(dāng)兩者不同時(shí),MATLAB將忽略函數(shù)名而確認(rèn)函數(shù)文件名,因此,調(diào)用時(shí)使用函數(shù)文件名。
??注釋非常極其重要,不寫注釋的代碼我基本是不愿意看的。標(biāo)準(zhǔn)注釋說明包括如下3部分內(nèi)容:

  • 緊隨函數(shù)文件引導(dǎo)行之后以%開頭的第一注釋行。 這一行一般包括大寫的函數(shù)文件名和函數(shù)功能簡(jiǎn)要 描述,供lookfor關(guān)鍵詞查詢和help在線幫助用
  • 第一注釋行及之后連續(xù)的注釋行。通常包括函數(shù) 輸入輸出參數(shù)的含義及調(diào)用格式說明等信息,構(gòu)成 全部在線幫助文本
  • 與在線幫助文本相隔一空行的注釋行。包括函數(shù) 文件編寫和修改的信息,如作者、修改日期、版本 等內(nèi)容,用于軟件檔案管理。
// 函數(shù)調(diào)用格式[nargout]=func(nargin)

??MATLAB在函數(shù)調(diào)用上有一個(gè)與一般高級(jí)語言不同之處,就是函數(shù)所傳遞參數(shù)數(shù)目的可調(diào)性。 在調(diào)用函數(shù)時(shí),MATLAB用兩個(gè)永久變量nargin 和nargout分別記錄調(diào)用該函數(shù)時(shí)的輸入實(shí)參和輸出 實(shí)參的個(gè)數(shù)。只要在函數(shù)文件中包含這兩個(gè)變量, 就可以準(zhǔn)確地知道該函數(shù)文件被調(diào)用時(shí)的輸入/輸出 參數(shù)個(gè)數(shù),從而決定函數(shù)如何進(jìn)行處理。

再提一個(gè)小點(diǎn),如果在函數(shù)中想使用全局變量,用global var_name

2、程序控制結(jié)構(gòu)

??程序控制結(jié)構(gòu)對(duì)學(xué)過C++,學(xué)過Java的同學(xué)來說肯定是 a piece of cake ,這里簡(jiǎn)單的說一下Matlab的程序控制結(jié)構(gòu)。

  • 順序結(jié)構(gòu)
// 數(shù)據(jù)輸入 A=input(tips_info,option); // 數(shù)據(jù)輸出 disp(str|matrix) //暫停 pause(secs)
  • 選擇結(jié)構(gòu)
if condition block1 elseif conditionblock2 else block3 end switch 表達(dá)式 case 結(jié)果表1 語句塊1 case 結(jié)果表2 語句塊2 …… case 結(jié)果表n otherwise 語句塊n+1 end

??switch子句后面的表達(dá)式應(yīng)為一個(gè)標(biāo)量 或一個(gè)字符串,case子句后面的結(jié)果不僅可以為一個(gè)標(biāo)量或一個(gè)字符串,而且還可以為 一個(gè)將多個(gè)結(jié)果用大括號(hào)括起來的單元數(shù)據(jù) (Cell)。如果case子句后面的結(jié)果為一個(gè) 單元數(shù)據(jù),則表達(dá)式的值等于該單元數(shù)據(jù)中 的某個(gè)元素時(shí),執(zhí)行相應(yīng)的語句組。

try 語句塊1 catch 語句塊2 end

??try語句先試探性執(zhí)行語句塊1,如果語句塊1在執(zhí)行 過程中出現(xiàn)錯(cuò)誤,則將錯(cuò)誤信息賦給保留的lasterr 變量,并轉(zhuǎn)去執(zhí)行語句塊2。

  • 循環(huán)結(jié)構(gòu)
for 循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3 循環(huán)體語句 end // 例如,求1-100的和 // 特別說明malab和python切片操作是有區(qū)別的,如果你同時(shí)使用python //和matlab,甚至還有R語言,一定要注意它們之間的細(xì)微差別sum=0; for m=1:100sum=sum+m; end sum

劃重點(diǎn)

//執(zhí)行過程是依次將矩陣的各列元素賦給循環(huán)變 量,然后執(zhí)行循環(huán)體語句,直至各列元素處理完畢 for 循環(huán)變量=矩陣表達(dá)式 循環(huán)體語句 end while(條件) 循環(huán)體語句 End

??最后提一下兩個(gè)循環(huán)的老朋友,break和continue:break語句用于終止循環(huán)的執(zhí)行。當(dāng)在循環(huán) 體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),繼 續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體中的某些語 句。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)?跳過循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán)。

程序性能分析與優(yōu)化

??這是程序設(shè)計(jì)中個(gè)非常重要的一步,這就好比漂亮的車子有很多,但是錢不夠一切都是然并卵;而對(duì)于程序他需要考慮的是對(duì)資源的占用、時(shí)間的消耗。一個(gè)好的程序能夠在占用最少資源的情況好快速高效的完成規(guī)定業(yè)務(wù)。
??在matlib中,Profiler性能評(píng)估器、tic函數(shù)和toc函數(shù)能分析程序各環(huán)節(jié)的耗時(shí)情況,分析報(bào)告能幫助用戶尋 找影響程序運(yùn)行速度的“瓶頸”所在,以便于進(jìn)行程序優(yōu)化。例如,通過函數(shù)文件性能評(píng)估器(Profiler)用戶可以很 方便地了解程序執(zhí)行過程中各函數(shù)及函數(shù)中的每條 語句所耗費(fèi)的時(shí)間,從而有針對(duì)性地改進(jìn)程序,提 高程序的運(yùn)行效率。

matlab 程序優(yōu)化常見思路

  • 向量化
    ??這是一個(gè)非常重要的編程思想,因?yàn)镚PU和CPU都含有并行化指令或者稱之為SIMD(single instruction multiple data)指令。向量化能夠充分利用并行化從而更加快速的計(jì)算,這點(diǎn)在GPU和CPU上面都是成立的,GPU更加擅長(zhǎng)SIMD計(jì)算但是CPU實(shí)際上也不差,只是沒有GPU擅長(zhǎng)而已。

  • 預(yù)分配內(nèi)存空間
    ??通過在循環(huán)之前預(yù)分配向量或數(shù)組的內(nèi)存空間可以提高for循環(huán)的處理速度。

  • 減小運(yùn)算強(qiáng)度
    ??采用運(yùn)算量更小的表達(dá)式,一般來說,乘法比乘方運(yùn)算快,加法比乘法運(yùn)算快,位運(yùn)算比求余運(yùn)算快。

總結(jié)

以上是生活随笔為你收集整理的matlab 程序设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。