matlab學習

12天的努力,我看完了586頁書,學了MATLAB,過得很累,但我心裏很舒坦。我不用再爲別的事情煩心了,因爲我在一門心思的學習,我花了我將近所有的課餘時間。只有這樣,我才能用自己身體上的累來掩蓋我自己心裏面的累。這麼多年了,幾乎每天我都在自己的掙扎中度過。還好,一切就快過去,我有我自己的生活。我不要可憐,我不要虛心假意,我只要我自己過得好。別人能那麼自私的對我,我爲什麼還要那樣對他,值得嗎?其實,沒有人懂我的心,也沒有人懂我,我做的這一切,不會有人知道,因爲它永遠的埋在了我的心裏。風,帶走我的思念吧!

這純屬瞎扯淡,不用理會我的牢騷。下面是我這12天的筆記,如果有愛好MATLAB或者正在學習的再或者想學的,我希望你們能看看我的筆記,這對你們會有幫助的,我相信。因爲這是我的汗水和心血!


 

 

1 概述安裝介紹

2 矩陣和數組

2.1 創建特殊矩陣函數

Compan  伴隨矩陣

Diag 對角矩陣

Eye 單位矩陣

Gallery 測試矩陣

Hadamard  hadamard矩陣

Hilb  hilb矩陣

Invhilb invhilb矩陣

Magic  魔方矩陣

Ones  全一矩陣

Rand 均勻分佈隨機矩陣

Randn 正態分佈隨機矩陣

Rosser 經典對稱特徵測試矩陣

Wilkinson  wilkinson特徵值測試矩陣

Zeros  全零矩陣

注:diag(A,n)以向量A爲主對角線爲基準偏移n個位置

2.2 矩陣連接

水平  c=[a,b]或者c=[a b]

垂直  c=[a;b]

連接函數

Cat 指定方向

Cat(1,a,b)水平

Cat(2,a,b)垂直

Horzcat 水平方向

Vertcat 垂直方向

Repmat 對現有矩陣複製粘貼

Blkdiag 以對角陣方式重組

2.3 改變矩陣形狀

Reshape 制定行列重排

Rot90 逆時針90

Filplr 垂直方向爲軸旋轉180

Flipud 水平方向爲軸旋轉180

Flipdim 指定方向爲軸翻轉矩陣

2.4 向量生成函數

Linspace(a,b)首尾爲a,b的100個數

Linspace(a,b,n)

Logspace(a,b)以10爲底

Logspace(a,b,n)

Logspace(a,pi)

2.5 矩陣信息的獲取

Isempty 判斷爲空

Isscalar 判斷爲標量

Isvector 判斷向量

Issparse 判斷稀疏矩陣

 

Isa 判斷指定數據類型

Iscell 判斷元胞數組類型

Iscellstr 元胞字符串數組類型

Isfloat 判斷浮點數

Isinteger 判斷整形類型

Islogical 判斷邏輯類型

Isnumeric 判斷數值類型

Isreal 判斷實數類型

Isstruct 判斷結構體類型

 

Length 最長維長度

Ndims 維數

Numel 元素個數

Size 指定維長度

2.6 高維矩陣

Squeeze 刪除大小爲1的維

Flipdim(a,n) 翻轉,第n維爲基準

Shiftdim(a,n) 移動數組,前n維到右邊

Permute(a,order)按order向量重排

3 數據類型

3.1 數值類型

複數:i,j等價

無窮:inf,-inf

非數:NaN

0*inf=nan

Isnan判斷非數

3.2 邏輯類型

Ture/false 設置真假

Logical 數值轉換成邏輯

&,|,~,xor,any,all 邏輯運算符

&&,|| 短路式運算符

==,~=,<,>,<=,>= 關係運算符

Strcmp,strncmp,strcmpi,strncmpi字符串比較

3.3 字符與字符串

創建可用到strcat

二維字符數組創建時每行字符列相同

Deblank 提取字符串,刪除末尾空格

比較函數:Strcmp,strncmp,strcmpi,strncmpi加n的是比較前n個字符,加i的不分大小寫,返回0/1

3.4 元胞

創建:直接賦值方式;cell函數

包含的元素不用()而用{}

Celldisp 顯示具體內容

Cellstr 用於字符串元胞數組

Length 查詢元胞長度

Iscell 判斷是否爲元胞類型

Char 元胞數組到字符數組轉變

3.5 構架

構架是帶有域的數組

創建:直接創建;struct函數

4 MATLAB數值運算

4.1 矩陣基本運算

加減簡單

乘法(K*M)*(M*N)纔可行

除法分爲左除和右除,值不同

求冪 要求方陣

按位運算 .*  ./  .\  .^

4.2 關係運算和邏輯運算

關係運算符:>  <  >=  <=  ==  ~=

邏輯運算符:& | && || ~

異或:xor

數位邏輯與:bitand(a,b)

數位邏輯或:bitor(a,b)

數位邏輯非:bitcmp(a,n)

數位異或:bitxor(a,b)

關係邏輯函數:

Xor(a,b)異或

Any(a)或

All(a)與

Isaqual(a,b)對應相等爲1

Ismember(a,b)a元素屬於b相應位置爲1

4.3 運算符優先級

5 繪圖

5.1 相關函數

管理類:figure、subplot、zoom、hold、view、rotate

生成類:plot、line、stem、polar、fill、plotyy、plot3、surf、surfc、mesh、meshz、contour、contour3、contourf、waterfall、cylinder

註釋和特性類:xlabel、ylabel、zlabel、text、text3、title、legend、box、set、grid、axes、axes equal、axes off、colorbar、clabel、colormap

5.2 基本繪圖指令

Polar 極座標中畫圓

Polar(t’,r1)若在一個圖中畫幾個圖形用[]分別括起來,如:

[t’ t’],[r1 r2]

線形設計:

線形:-  -.  --  :

顏色:r g b c m y k w

點標記:+ o * . x s d h p > < ^ v

多圖繪製:subplot

雙軸繪圖:plotyy

5.3 圖形標註

函數:title、xlabel、ylabel、zlabel、legend(圖例)、colorbar(色彩條)、annotation(標註元素)

對齊屬性值:

HorizontalAlignment(水平):left、center、right

VerticalAlignment(垂直):middle、top、cap、basline、battom

封閉區間填充:fill(a,b,‘c’)在使用之前使用hold命令

5.4 模式化繪圖

柱狀圖:bar或barh其模式有mode、stacked(堆在一個柱中)加引號

面積圖:area

餅圖:pie

直方圖:hist(data,n) n:分割區間數

玫瑰圖:rose(data,n)

離散數據繪圖:stem

階梯圖:stairs

等高線圖:contourf(填充式)

          contour(一般式)

標註:colorbar填充,clable普通

羅盤圖:compass

羽毛圖:feather

向量場:quiver

函數繪圖:涉及函數句柄

flplot(fun,limits)

ezplot(fun,[xmin,xmax,ymin,ymax]

ezpolar(fun,[a,b])

ezcontour(fun)

ezcontourf(fun)

5.5 三維繪圖

(1) 數據準備

(2) 繪圖區創建

(3) 繪圖

(4) 設置視角

(5) 設置顏色表

(6) 設置光照效果

(7) 設置座標軸和比例

(8) 標註圖形

(9) 保存打印或導出

Plot3:曲線

Mesh(X,Y,Z):曲面

Meshc在mesh的基礎畫等高線

Meshz在mesh的基礎上垂直連XY面

Surf(X,Y,Z)

Surfc等高線

Surfl(X,Y,Z,S)加光照效果

曲線旋轉成面:

[X,Y,Z]=cylinder(R,N) N:線的條數

柱狀圖:bar3(data,‘mode’)

餅狀圖:pie3

離散點圖:scater3和stem3

向量場圖:quiver3(X,Y,Z,U,V,W,S)其中S爲縮放比例

等高線圖:contour3(X,Y,Z,n)

其中n爲等高線劃分的條數

函數繪圖:

eplot3(funx,funy,funz,[tmin,tmax])指定範圍的三維曲線

emesh(fun,domain)網線曲面

ezmeshc(fun,domain)帶等高線

ezsurf(fun,domain)填充曲面

ezsurfc(fun,domain)帶等高線

其中domain=[xmin,xmax,ymin,ymax]

顯示控制:

Hidden:設置顯示擋住的實體圖形

Axes:座標軸比例設置

View:設置視角

着色:加一指示顏色的數組

Colormap:顏色索引範圍的設定

Shading:過渡設置,其參數有faceted,flat和interp

Light:光照設置,參數有color,style(infinit和local)和position

Lighting:flat,gouraud,phong,off

Material:質感設置,其參數有shiny,dull,(光澤)metal(金屬)

6 圖形對象和句柄

6.1 Matlab圖形對象

最上層:root

圖形窗口:figure,包括軸對象(Axes)和用戶界面對象(UI)等

UI:如按鈕、菜單、工具欄等

Axes:內核對象(core objects)、圖形對象(plot objects)、組對象(group objects)、註釋對象(annotation objects)

內核對象:line,patch,text,rectangular,surface,image,

light等

繪圖對象:內核的預定義組合

組對象:允許用戶將axes的數個子對象看成一個整體,hggroup和hgtransform兩種

註釋對象:箭頭、文本、文本框、線、矩形等。Plot edit和insert menu添加,也可用函數annotation

圖形對象屬性:

Busyaction:控制回調函數中斷方式

ButtonDownFcn:單擊按鈕的回調函數

Children:所有子對象的句柄列表

Parent:父對象句柄

CreateFcn:創建對象時執行的回調

DeleteFcn:刪除對象時執行的回調

HitTest:單擊時能否成爲當前對象

Interruptible:回調函數是否被中斷

Selected:對象是否被選中

SelectionHighlight:選中是否高亮

Tag:對象標籤

Type:對象類型

UserData:交互數據

Visible:對象是否可見

6.2 MATLAB對象句柄

對象句柄:ID標示的機制,由MATLAB系統分配、唯一的標識對象的double型數值

尋訪:對象句柄唯一對應

指定函數句柄:@和str2func

Get:獲取當前窗口、軸和對象

Gcf:返回當前窗口句柄

Gca:返回當前軸句柄

Gco:返回當前對象句柄

還可以用set函數來設定

Findobj:以屬性值爲索引搜索

Copyobj:MATLAB對象的複製

Delete:對象的刪除

6.3 設置和查詢對象屬性

Set(object_handle,’PropertyName’,’NewPropertyValue’)對象屬性的設置

Returned_value=Get(object_handle,’propertyName’)屬性查詢

默認屬性的設置加前綴default

6.4 圖形窗口對象(Figure)

位置屬性:Position

單位屬性:unit,默認pixels(像素)

色彩屬性:

Color:背景色,RGB

Colormap:色彩映像表,(n*3)RGB

FixedColors:線、字符色,RGB

MinColormap:最少色彩,標量

ShareColors:色彩資源能否共享,[{on}|off]

Dithermap:混合色圖,(n*3)RGB

DithermapMode:混合模式,[auto{manual}]

繪製窗口的類型:

BackingStore,DoubleBuffer,Renderer和RendererMode

預定義光標形狀(15種)

自定義光標屬性:

Pointer:custom表示自定義

PointerShapeCData:1黑2白NaN透明

PointerShapeHotSpot:光標熱點

6.5 軸對象(Axes)

位置屬性Position和單位屬性Units

單軸對象常用控制屬性:

XLim,YLim,ZLim:確定軸範圍

XLimMode…:軸範圍模式

XTick…:確定軸刻度位置

XTickMode…:刻度位置模式

XTickLabel…:刻度標記

XTickLabelMode…:刻度標記模

XDir…:軸方向

多軸重疊:subplot或者直接在圖形窗口另行創建一個專門用於容納註釋對象的座標軸

自動模式屬性(照相機屬性):

CameraPosition:相機位置[x,y,z]

CameraPositionMode:位置取值模式

CameraTarget:目標[x,y,z]

CameraTargetMode:目標模式

CameraUpVector:正位向量

CameraUpVectorMode:正位向量模式

CameraViewAngle:視角【0 180】

CameraViewAngleMode:視角取值模式

Projection:投影方式

6.6 圖形輸出控制

NextPlot屬性值:new、add、replace、 replacechildren

通過hold on和hold off可以設定圖形窗口對象和軸對象的屬性設置爲add和replace。

7 程序設計

7.1  M文件

M文件就是一系列相關代碼組成的一個擴展名爲.m的文件。分爲腳本文件和函數文件兩類。

腳本文件不自帶參數;

函數文件以function…開始

函數工作區間:Function workspace

M文件結構:函數聲明行、H1行、幫助文本、編寫和修改註釋、函數體

P-碼文件:爲M文件生成的內部僞代碼

P-碼文件的預生成函數爲Pcode,格式:pcode Func_name當前路徑

Pcode Func_name-inplace M文件目錄

對P-碼文件的操作:

Inmem:列出所有內存中P-碼文件名

Clear Func_name:清楚某個p-碼文件

Clear function:清楚所有p-碼文件

7.2 函數

分爲M-函數文件和匿名函數

一個M文件只能有1個主函數,多個子函數

主函數還分爲:私用函數和重載函數

嵌套函數:多平行和多層嵌套

7.3 變量

變量名區分大小寫;

最多包含63個字符;

必須以字母開始起名,後可爲字母、下劃線;

不允許出現標點符號。

17個系統關鍵字:break、case、catch、continue、else、elseif、end、for、function、globle、if、otherwise、persistent、return、switch、try、while

可在命令窗口輸入iskeyword顯示。

特殊變量:ans,beep,pi,eps,inf,NaN(nan,i(j),nargin(輸入個數),nargout(輸出個數),realmin,realmax,bitmax,varargin(可變的函數輸入參數個數),varargout

分爲局部變量、全局變量(globle)、永久變量(persistent)

Inputname(n):第n個輸入變量的調用名

7.4 程序結構

分爲順序結構、循環結構(for或while)和分支結構(if或switch)

7.5 程序控制語句

結束循環:continue、break、return

Continue和break:結束本次循環

Warning:錯誤警告語句

Error和errordlg(顯示對話框)

Try…catch:try中有錯是執行catch語句

Input和keyboard:輸入控制語句

8 程序調試、優化和出錯處理

8.1 調試

調試(debug):去除bug

Bug:語法錯誤、邏輯錯誤、異常

Debug函數:

Dbstop:設置斷點

Dbclear:清除斷點

Dbcout:重新執行

Dbdown/dbup:變更當前工作空間

Dbmex:MEX文件調試

Dbstack:列出函數調用關係

Dbstatus:列出所有斷點

Dbstep:單步或多步執行

Dbtype:列印M文件

Dbquit:退出調試模式

Debug輔助函數:

Echo:在命令窗口顯示當前執行代碼

Disp:顯示變量

Sprintf/fprintf:指定格式顯示文本

Whos:列出工作空間中所有變量

Size:顯示變量的大小

Keyboard:中斷程序執行,等待輸入

Return:結束函數執行

Warning:引發、顯示指定的警告

Error:引發、顯示指定的錯誤

Laster:返回最近產生的錯誤消息

Lasterror:錯誤消息及相關信息

Lastwarn:返回最近產生的警告

8.2 性能優化

碼錶:tic——toc時間測試

效率優化技術:

代碼向量化

預分配足夠大的數組

對不可避免且耗時很大的循環嘗試在MEX文件內實現

儘量避免更改變量的數據類型或維數

儘量避免實數和複數之間的相互賦值

儘量採用實數運算

合理使用邏輯運算

儘量採用函數而不是腳本文件

儘量使用load、save而不是IO函數

內存優化技術:whos,clear,save,load

預分配足夠大的數組

儘量在函數開始時創建變量

利用repmat增加數組的空間大小

對大部分數據爲0的矩陣變爲稀疏矩陣

若要保存大量數據採用數組構架而非構架數組

及時地清除佔用內存很大的臨時變量

儘量地重用內存,而非開闢新內存

8.3 出錯處理

Try…catch查詢語句

9 MATLAB符號計算

9.1 符號對象的創建

符號變量由sym和syms兩條語句生成

Findsym(expression)找出表達式中變量

Findsym(espression,N)離x最近的N個

符號矩陣:S=sym(S)

符號函數:符號表達式、M文件

三類運算操作:

Numberic:數值運算

Rational:Maple符號運算

VPA:Maple精度可變運算

數值轉換函數:double,int8/16/32/64,

Uint8/16/32/64

Vpa指令:給出結果

Digits:獲得當前精度或變爲其他精度

9.2 符號表達式操作

符號表達式指令:

Collect(ex)/collect(ex,x):合併同冪項/含指定x的同冪項

Expand(ex):按多項式展開

Factor(ex)/factor(n):因式/質數分解

Horner(ex):變爲嵌套形式

[n,d]=numden(ex):變爲有理分式形式,提取最小分母因子d,相應分子公因子n

Simplify(ex):Maple規則化簡

Simple(ex)/[exp,how]=simple(ex):化爲最簡/給出最簡exp,主要化簡步驟how

表達式替換:subs(手動),subexpr(自動)

Subs:

R=subs(S)替換所有工作區間符號變量

R=subs(S,new)用new替換S中默認變

R=subs(S,old,new)用new替換old

Subexpr:

[exp,sigma]=subexpr(ex,sigma)或者

[exp,sigma]=subexpr(ex,’sigma’)

9.3 符號函數操作

函數複合:compose

求反函數:finverse

Cosine積分函數:cosint

衝激函數:dirac

階躍函數:heaviside

超幾何函數:hypergeom

Lambert函數:lambertw

Sine積分函數:sinint

黎曼函數:zeta

傅里葉變換:fourier

逆傅里葉變換:ifourier

逆拉普拉斯變換:ilaplace

逆Z變換:iztrans

Laplace變換:laplace

Z變換:ztrans

9.4 符號矩陣操作

代數運算:

+,-,*,./,.\,^,\,/,.*,.^,’,.’

邏輯運算:(僅有)==,~=

行列式:det計算

矩陣的逆:inv

矩陣的秩:rank

特徵分解:solve(poly(A))或eig

SVD分解:svd

9.5 符號微積分

極限:limit

左右極限在括號寫明(right/left),且加引號

微分:diff(S,n,’v’)後兩者和x可省略

S爲因變量,v爲微分變量,n爲階數

多元向量函數矩陣:jacobian(G,x)

積分:int

不定積分:int(S,x),x可省略

定積分:int(S,x,a,b),x可省略

級數展開:taylor自變量v

Taylor(f):f的5階馬克勞林級數逼近

Taylor(f,n,v):f的n-1馬克勞林

Taylor(f,m1,m2):f在m2的m1-1階

Taylor(f,n,v,a):x=a處n-1階

級數求和:symsum

9.6 符號方程求解

一般代數方程:solve

線性代數方程組:通解null(A),特解由A\B

常微分方程:dsolve

10 數據分析

10.1 數據排序分析

最大(小)值:max/min

中位數:median(A)

分位數:quantile(X,p)

排序:sort、sortrows

升序ascend,降序descend,加引號

Sortrows行爲整體排序

10.2 數據求和(積)、差分

求和:sum

對矩陣sum(A)列和,sum(A,2)行和

求積:prod

求累計和、積:cumsum、cumprod

差分:diff(X,N),N爲階數

10.3 均值和方差分析

均值:mean(A,dim)

標準差:std(A,flag,dim)

dim維數可省略

    flag爲0和1時得到Ⅰ和Ⅱ型標準差

10.4 數據預處理

缺失數據(NaN):用isnan函數判斷並去除

異常數據:與平均值的偏差大於3倍標準差

10.5 統計分析

顯示概率分佈:disttool

隨機數生成:所有函數基於rand,randn,且以rnd結尾

數據直方圖分析:hist(X,M),M正整數標量,且可有返回值,用bar(x,n)作圖

描述數據中心函數:

geomean幾何均值

harmmean調和均值

    mean:算術均值

    median:中位數

    trimmea修正均值(除去部分最大最小)

描述數據散步程度:

    iqr:四分位差,即25%和75%

    mad:絕對值標準偏差

    range:跨度,最小最大之差

    std:標準差

    kurtosis:峭度

11 矩陣分析

11.1 矩陣分析的應用背景

高效、簡潔、安全

11.2 矩陣特徵量

det(行列式值),inv(逆),rank(秩)

範數:norm(A,opt) ,opt默認2

矩陣opt可取1,2,inf,’fro’

向量opt可取1<=p<∞,2,inf,-inf

條件數:cond(A,opt) opt爲範數,省爲2

接近1矩陣爲良性,遠大於1爲病態,接近無窮是叫奇異矩陣

超定方程、恰定方程、欠定方程

特徵值:eig或eigs

D=eig(A)返回值D的N個特徵值組成的向量

[V,D]=eig(A)返回值D的N階對角矩陣,V爲N*N矩陣

11.3 矩陣分解

EVD分解:eig,eigs

Schur分解:schur

Cholesky分解:chol

LU分解:lu

QR分解:qr

SVD分解:svd,svds

11.4 矩陣函數

以矩陣爲自變量

常用矩陣函數:

Expm:指數函數e^A

Logm:對數函數log(A)

Sqrtm:矩陣平方根

用戶定義:funm,自己聲明函數代替下面sin

特例函數sin,cos,exp,log,sinh,cosh

  調用時形如funm(A,@sin)

12 函數分析

12.1 函數的表示

匿名函數:fun_handle=@(自變量)(函數體)

M函數文件:編寫M文件

12.2 函數的零點

單變量零點:fzero

指定區間內或指定點附近

12.3 數值積分

單重:quad,quadl,quadv

可以認爲地規定步長,如:

[q,fcn]=quad(f,x1,x2,tol)其中q爲結果,fcn爲計算次數,tol爲步長

多重:dbquad(二重),triplequad(三重)

12.4 數值微分

差分函數估算一元數值微分:diff

梯度:gradient

12.5 函數最優化

單變量:

[x,fevel,exitflag]=fminbnd(f,x1,x2,p)

f函數句柄,區間[x1,x2],p爲選項設置,(x,feval)是最小極點,exitflag結束標誌

多變量:fminsearch類似於fminbnd

12.6 函數可視化

一元函數:fplot,ezplot,ezpolar(極座標)

二元函數:ezplot3,ezsurf,ezsurfc,

ezmesh,ezmeshc,ezcontour,ezconterf

13 高級數值計算

13.1 多項式計算

求值:pv=ployval(p,a或A)p在a處的值

求根:roots

卷積(乘):conv 反捲積(除):deconv

微分:polyder   積分:ployint

有理分式部分和展開:residue

[r,p,k]=residue(f,g)k爲餘項

13.2 插值

一維:yi=interp1(x,y,xi,method)

其中method有nearest,linear, pchip(cubic) ,spline

二維:interp2類同

插值方法:最鄰近,線性,立方,樣條

13.3 迴歸分析和曲線擬合

線性迴歸分析:先建模,再求係數

多分量回歸分析:步驟同上

曲線擬合:ployfit(x,y,n)(求出對應階數的多項式係數),ployval(求值)

交互式曲線擬合工具:載入數據、作圖、tool->basic fitting後編輯

13.4 傅里葉分析

用fft和ifft實現DFT和IDFT,也支持矩陣,默認時矩陣維數爲1

幅度:abs;相位:angle

13.5 常微分方程

ODE函數ode45,ode23,ode23s,ode15s,

ode23t,ode23tb,ode113,ode15i等

一階:solver可用ode函數替代

ODE協作函數:deval,odeset,odeget,odeplot,pdeprint

高階轉換成爲一階計算

非剛性微分方程:ode45,ode23,ode113

剛性微分方程:ode15s,ode23s,ode23td

DAEs:ode15s,ode23t

中等剛性方程:ode23t

全隱式微分方程:ode15i

14 用戶圖形界面(GUI)

14.1 兩種GUI設計方式

分爲界面模塊和工作模塊

圖形對象:uimenu,uicontrol,圖形,座標軸和它們的子對象

用戶接口(UI)對象表:

    Uicontol:通用UI控制對象

Uimenu:UI菜單對象

Uicontextmenu:上下文菜單對象

Uitoolbar:工具條對象

Uitoggletool:雙向切換按鈕

Uipushtool:瞬時下壓按鈕

Uitable:製表對象

Uitree:樹結構對象

Uitreenode:樹節點對象

Uibuttongroup:容器對象(子)

Uicontainer:容器對象(父)

Uipanel:容器對象

Uicontrol類型:

Checkbox:創建複選框

Edit:創建可編輯文本框

Frame:生成組選框

Listbox:列表框生成,文本只能選擇

Popupmenu:生成下拉菜單

Pushbutton: 創建按鈕,成命令按鈕

Radiobutton:創建單選按鈕

Slider:創建滑動框

Text:創建靜態文本框

Togglebutton:創建切換按鈕

兩種設計方式:手工代碼式、GUIDE式

14.2 GUI界面設計

設計原則:

界面一致性

佈局合理性

鼠標鍵盤對應原則

快捷鍵

界面易用性

界面規範性

14.3 GUI程序設計

M文件中包含了所有GUI組建的callbacks(回調函數),自己填寫相關內容即可。其中的函數有:

主函數

GUI創建函數

初始化函數

輸出函數

回調函數

用handles來組織數據,共享數據

回調函數一般格式:

Function tag_Callback(Ob,data,handles)

其Ob是界面對象的句柄,data爲消息句柄

15 文件的I/O操作

15.1 低級文件的打開與關閉

打開:fopen

打開方式:只讀r,讀寫r+,打開後寫入w,讀寫打開w+,打開的末尾加數據a,先讀後加數據a+。r和r+文件必須存在

關閉:fclose

15.2 讀取和寫入ASCII文件

讀取:fgetl或者

  [A,count]=fscanf(fid,format,size)

  A存放讀取的數據,count返回元素個數,fid爲文件句柄,format用來控制讀取的數據格式,由%加上格式符組成,常見的格式符有d,f,s,c。size爲可選項,決定A中數據大小,可有N,inf和[M,N]

寫入:fprintf

  其中有%e(科學記號),%f(固定欄寬),%g(兩者自動選取)

15.3 讀取和寫入二進制文件

讀取:[A,count]=fread(fid,count1,prec)

count1可選N,inf,[M,N];prec取值精度,默認爲uchar

寫入:count=fwrite(fid,A,prec)

prec默認uint8,fid文件句柄

其餘低級文件函數:

    Feof:測試文件結束

Ferror:查詢文件I/O的錯誤狀態

Fgetl:讀文件的行,忽略回行符

Fgets:讀文件行,包含回行符

Frewind:返回到文件開始

Fseek:設置文件位置指示符

Ftell:獲取文件位置指示符

15.4 文件位置指針

Feof,fseek,ftell,frewind

15.5 高級文件的I/O操作

load filename[option]

  option可以是-mat或-ascii

save filename[list][option]

  option:-mat,-ascii,-append,-v4,-v6

基於GUI:uigetfile/uiputfile,支持.m

基於GUI讀取複雜數據文件:uiimport

  importdata用類似功能,但不能打開GUI

讀取ASCII文件:textread

16 MATLAB編譯器

16.1 MATLAB編譯器簡介

MATLAB Compiler 4的編譯流程:

依賴性分析

創建接口C代碼

創建CTF壓縮包

編譯

鏈接

功能:

獨立可執行應用程序

C和C++共享庫

Excel附件(需MATLAB 7.0 Builder)

COM附件(需MATLAB 7.0 Builder)

侷限性(不能編譯):

大部分內建的圖形用戶界面程序及相應的工具箱

不能直接由命令行調用的功能

某些工具箱,如符號計算工具箱

16.2 安裝與設置

16.3 編譯器的使用

MCC是調用MATLAB編譯器的命令

可以給mcc指定一個或幾個編譯器選項

可以把不帶參數的選項組合到一起

如果在其中包含任何C或C++文件名,這些文件和其他C或c++文件直接傳給mbuild

如果使用衝突選項,優先考慮最右邊的選項

Mcc命令就是調用MATLAB編譯器,格式:

mcc [-options] mfiel [mfile1,…mfileN] [C/C++file1,…fileN]

options有:a,b,c,d,f,g,G,I,m,M,N,O,P,

R,T,v,w,W,Y,z,?參數

獨立的M文件:mcc –m main mrank

16.4 編譯器的獨立使用

獨立的C/C++應用創建:

確定mbuild可以創建獨立的應用

確定MATLAB編譯器可以將目標文件和合適的庫鏈接起來

Mbuild工具:

設置編譯器和鏈接

改變編譯器或編譯器設置

在C和C++之間轉換

生成應用程序

獨立windows應用程序的創建:

    擴展名爲.c和.cpp.cxx.cc

編譯準備:

編譯器約束

編譯器選擇(用戶輸入0,1,2來選擇)

編譯器改變

集成開發系統:IDE

一個獨立應用的發佈需要:

應用的可執行文件

Mbuild創建在bin目錄下的內容

所有應用程序用到的MEX文件

所有MATLAB運行時的庫文件

17 應用程序接口

17.1 mxArray數據結構

mxArray數據結構以及大量以mx開頭的函數,廣泛用於MATLAB引擎程序和MATLAB C數學庫中。代碼略

17.2 mx函數

方便創建和訪問mxArray數據對象

數組建立:mxCreate***形式

刪除數組:mxDestroy***

創建初始化字符串:

mxArray *mxCreateString(const char *str)

每一維數組元素獲取:mxGetM和mxGetN

某一特定維元素個數獲取:

const int*mxGetDimensions(const mxArray *array_ptr)

17.3 MATLAB中調用C和FORTRAN

MEX文件時按照一定格式,使用C或FORTRAN語言編寫的,由MATLAB解釋器自動調用並執行的動態鏈接函數,在windows操作系統中,擴展名是.dll

配置命令mex –setup

C語言MEX源程序包括計算機子例行程序和入口子例行程序,後者名mexFunction,擁有4個參數,分別爲prhs(指針數組指向所有的輸入參量),nrbs(輸入參量個數),plhs(輸出的數組),nlhs(輸出參量個數)

17.4 MATLAB引擎

是一組MATLAB提供的接口函數,支持C/C++或fortran等語言。主要功能:

打開/關閉一個MATLAB對話

向MATLAB環境發送命令字符串

從MATLAB中讀取數據

向MATLAB中寫入數據

C語言引擎函數:

關閉引擎:engClose()

執行一個用字符表達的MATLAB表達式:engEvalString()

從MATLAB工作區複製一個變量:engGetVariable()

確定MATLAB引擎會話區的可見性:engGetVisible()

打開數據區:engOpen()

爲單獨不共享的使用創建一個MATLAB引擎會話:engOpenSingleUse()

爲輸出確定緩衝區engOutputBuffer()

將變量放置到工作區engPutVariabe()

顯示隱藏引擎會話區engSetVisible()

17.5 C和FORTRAN調用MATLAB

庫是指可以被任何程序使用的函數集合,分爲靜態庫和共享庫(動態鏈接庫,其擴展名爲.dll)。

共享庫函數:

Loadlibrary:外部庫的載入

Unloadlibrary:外部庫在內存中卸載

Libisloaded:判斷外部庫是否被載入

Libfunctions:返回外部庫中函數信息

Libfunctionsview:創建窗口顯示信息

Calllib:調用一個外部庫中的函數

Libpointer:創建一個指向外部庫指針

Libstruct:創建一個類似C的結構

18 Notebook和M-book

18.1 M-book

Notebook安裝:notebook –setup

啓動notebook創建m-book:notebook

M-book定義了word和MATLAB進行通信得宏指令、文檔格式和工具欄

18.2 細胞

細胞用於word和MATLAB的信息交換,也被稱作細胞羣。

由m-book傳遞給MATLAB的指令有輸入細胞和自初始化細胞兩種

細胞羣定義:

選中多個獨立的輸入細胞,notebook->group cells

選擇輸入的多行文本型MATLAB命令,選擇notebook->define input cell

選中輸入的多行文本型MATLAB命令,notebook->evaluate cell或ctrl+enter

自初始化細胞生成:

定義文本形式的MATLAB命令爲細胞;

把已經存在的輸入細胞換成此類細胞。

定義計算區:選擇需轉換的區域,然後選擇notebook->define clac zone

循環運行:evaluate loop

輸出細胞的格式控制:notebook options

Notebook菜單選項和功能:

Define input cell:定義輸入細胞

Define autoinit cell:定義自初始化細胞

Define clac zone:定義計算區

Undefine cells:細胞轉換成文本

Purge selected output cells:刪除所選區域內所有輸出細胞

Group cells:創建細胞羣

Ugroup cells:細胞羣轉成輸入或自初始化

Hide cell markers:隱藏或顯示細胞生成中括號

Toggle graph output for cell:是否嵌入生成的圖形

Evaluate cell:運行細胞

Evaluate calc zone:運行運算區

Evaluate m-book:運行文檔中所有輸入細胞

Evaluate loop:循環運行輸入細胞

Bring MATLAB to front:MATLAB命令窗口調整到前臺

Notebook options:設置數值和圖形的輸出

缺點:

不能包容交互式操作、動畫、程序調試等,包含上述命令的程序也不能運行,只能在MATLAB中運行後再複製到notebook中;

GUI控件和菜單的圖形嵌入notebook後失效;

不支持SIMULINK。

19 信號處理工具箱

19.1 波形產生

方波:square(2*pi週期)

正弦波:sin

鋸齒波:sawtooth

掃描信號:chirp

    計算頻譜圖:specgram

矩形函數在頻域上的傅里葉變換:sinc

調製脈衝信號:plustran

19.2 IIR濾波器設計

IIR即無限長響應濾波器,特點:

單位衝激響應h(n)無限長

系統函數H(Z)在z平面存在極點

結構上存在反饋

FIR即有限響應濾波器,特點:

單位衝激響應h(n)在有限n處不爲零

系統函數H(Z)在z平面上極點全爲0

總體結構上存在反饋

數字濾波器的設計內容:

按照任務的要求,確定濾波器的性能指標;

用一個因果穩定的線性時不變系統的系統函數去逼近這一性能要求;

選擇合適的運算結構,字長和數字處理方法,利用有限精度算法來實現這個系統函數;

具體的硬件和軟件設計。

IIR數字濾波器的設計步驟:

按一定的規則將給定的數字濾波器的技術指標轉換成模擬低通濾波器的指標;

根據轉換後的技術指標使用濾波器階數指定函數,確定最小階數N和固有頻率Wn;

運用最小階數N產生模擬濾波器原型;

運用固有頻率Wn把模擬低通濾波器的原型轉換成低通、高通、帶通、帶阻濾波器;

運用衝激響應不變法或雙線性變換法把模擬濾波器轉換成數字濾波器。

Butterworth濾波器:‘最平’

[Z,P,K]=buttap(N)

Chebyshev濾波器:等紋波特性,Ⅰ型在通帶有,Ⅱ型在阻帶有。分別用函數cheb1ap和cheb2ap,參數都爲階數n和通帶的最大衰減rp和阻帶的最大衰減rs。

濾波器係數:[b,a]=zp2tf(z,p,k)

頻域特性:freqz(b,a)

橢圓濾波器:ellipap(n,rp,rs)

頻率轉換的步驟:

將其他類型濾波器的指標轉換成低通濾波器的頻率指標;

根據轉移後的指標生成轉移函數將原型模擬濾波器的系統轉換成所需類型和頻率指標的模擬濾波器的係數。

頻率指標轉換函數(都爲模擬濾波器):

低通[bt,at]=lp2lp(b,a,Wn);

高通[bt,at]=lp2hp(b,a,Wn);

帶通[bt,at]=lp2bp(b,a,Wn,Bw);

帶阻[bt,at]=lp2bs(b,a,Wn,Bw)。

其中bt,at,b,a係數,Wn、Bw分別是目標濾波器的中心頻率和帶寬

模擬濾波器離散化得到數字濾波器兩種方法:衝激響應不變法和雙線性變換法

衝激響應不變法:找到與目標模擬濾波器具有相同衝激響應的數字濾波器,實質是從拉普拉斯變換到z變換的標準變換。函數爲[bz,az]=impinvar(b,a,Fs).Fs爲採樣頻率,默認爲1Hz。可能產生頻譜混疊。

雙線性變換法:求出s=f(z),然後帶到模擬濾波器的函數表達式H(s),得到數字濾波器的H(z)。提供的函數爲[bz,az]=bilinear(b,a,Fs).

Yule-Walk法:根據給定幅頻特性通過最小二乘法擬合逼近得到濾波器係數。函數[b,a]=yulewalk(n,f,m)n爲階數,f和m是描述目標濾波器幅頻響應的向量。f爲描述頻率點的向量,以0開始1結束且不減單調排列,m爲描述個頻率點濾波器響應幅度的向量。f和m長度相等,元素一一對應。

Prony法:根據給定的時域衝激響應設計,[b,a]=prony(h,nb,na)h是給定的衝激響應,nb和na爲數字濾波器的係數個數

求衝激響應:impz(b,a)

反向頻域設計法:根據給定的複頻域響應求出濾波器的係數,實質上是完成z域或s域的逆變換[b,a]=imfreqz(h,w,nb,na).

19.3 FIR濾波器設計

衝激響應有限長,在z域是隻有零點沒有極點,也成爲全零點濾波器。有以下四種設計方法:

窗函數法,b=fir1(n,Wn,WIN)b爲得到的濾波器係數,n爲階數,Wn是0到1的數,表示歸一化截止頻率,WIN爲窗口係數,默認爲海明窗。窗函數設計有rectwin,chebwin等。

多帶設計法,針對不同頻帶有不同的衰減要求設計。又有:

函數b=fir2(n,f,m,npt,lap)f和m是描述頻域特性曲線的向量,npt是插值點數,lap是重疊帶點數。

函數b=firls(n,f,m,w)w爲各頻段的權值

函數b=remez(n,f,m)

約束最小二乘法設計,使用戶在設計FIR濾波器的時無需定義幅值響應中的過渡帶。H=fircls(n,f,a,up,lo)up和lo長度和a相等時分別描述各頻帶上限和下限的向量。a的長度和f不必相等。

任意響應濾波器設計,頻域上響應不對稱b=crmez(n,f,{‘fresp’,p1,p2,…})其中,fresp爲聲明目標頻率響應特性的名稱函數,p1等爲fresp的相關函數。

19.4 頻譜分析

PSD:功率譜密度,估計得方法有非參數化法和參數化法.前者包括週期圖法、walch方法、MUSIC方法等,後者包括Yule-Walk自迴歸方法、Burg方法、協方差法等

    函數:

Welch方法:pwelch

MUSIC方法:pmusic

Multitaper方法:pmtm

Yule-walk方法:pyulear

Burg方法:pburg

協方差方法:pcov

週期圖法:取一段隨機序列的樣本,計算出樣本的傅里葉變換,然後取變換結果的幅值的平方,除以樣本序列的長度,比如abs(fft(xn,512).^2/length(xn))分段求出功率譜估計,然後求平均

Welch方法:對分段的數據使用非矩形,降低由於重疊導致段間的統計相關性,也有助於克服矩形窗的旁瓣效應。常用格式如:[pxx,f]=pwelch(xn,window,overlap)其中返回值pxx和f爲估計的功率譜值和對應的歸一化頻率值,window爲所加函數牀的係數向量,overlap是分段重疊的長度。

Multitaper方法:運用了正交窗口以獲得相互獨立的譜估計,然後組合生成最終的譜估計,有更大的自由度。只涉及一個參數時間-帶寬積NW,MATLAB提供函數格式爲[pxx,f]=pmtm(xn,nw,nffs,fs)nffs是FFT變換的長度,默認時輸入[],fs是採樣頻率

MUSIC方法:是一種基於相關矩陣特徵分析之上的頻率估計技術,將一個相關矩陣的信息進行分類,或者屬於信號子空間或者屬於噪音子空間。需要設置信號空間特徵向量個數。[pxx,f]=pmusic(xn,p,[],fs)p爲特徵向量的個數。[]可無。

參數方法的功率譜估計步驟:

選擇一個正確的模型;

用觀測到的數據樣本數據或樣本數據的自相關函數來確定模型的參數;

根據估計得到的模型參數計算估計值。

描述隨機序列的模型有:自迴歸(AR)模型、移動平均(MA)模型、自迴歸移動平均(ARMA)三種。

Yule-Walk方法:通過隨機序列的信號空間和噪音空間的不相關性建立了關於AR參數,自相關函數和噪音功率的正則方程,並且可以通過Levinson-Durbing遞歸算法計算出AR的估計值。pyulear(xn,n)

Burg方法:在Levinson-Durbing遞歸約束下,是前向和後向預測誤差能量之和爲最小的一種AR功率譜估計方法,避開了自相關函數的計算,轉而估計各型濾波器的反射係數。[pxx,f]=pburg(xn,n,fs).n爲AR模型階數。

協方差方法:是一種使前向預測誤差最小的技術。[pxx,f]=pcov(xn,od,fs)od是AR模型階數。

19.5 使用SPTool

這是一個集成化的交互式圖形界面用戶界面信號處理工具。用於對數據、濾波器和功率譜分析和處理。包含:

    信號瀏覽器-顯示、測量和打印信號

濾波器設計工具-創建,可限定性能參數,也可選擇設計方法

濾波器查看工具-查看其特性和性能指標,如頻譜、相頻特性、羣時延、零極點等

功率譜查看工具-可用不同方法對隨機序列的功率譜進行估計、顯示和打印等

輸入sptool就能打開

數據導入:imput to SPTool

信號查看功能:

查看或比較數字信號;

提取信號特徵量;

打印或播放信號。

    濾波器設計器功能:

設計具有標準帶寬結構的IIR濾波器;

設計具有標準帶寬結構的FIR濾波器;

通過零極點編輯器實現FIR和IIR濾波器;

通過幅頻相應的編輯設計FIR和IIR濾波器

濾波器查看:幅值響應圖、相位相應圖、零極點響應、衝激響應、階躍響應。

頻譜查看:估計頻譜密度,其功能:

選擇多種方法對樣本序列進行功率譜估計;

查看和比較序列的功率譜;

修改功率譜估計參數。

20 圖像處理工具箱

20.1 數字圖像基礎

圖像時由“照射源”和“場景”對光能的反射或吸收相結合兒產生的。

空間分辨率是指單位像素表示的實際場景單元的大小,該值越小,測空間分辨率越高,圖像越清晰。灰度分辨率是指離散灰度級的個數,該值越高則圖像色彩越豐富。這兩個值與圖形採樣、量化有關。

從圖形文件讀取圖像數據函數imread支持大多數格式,如bmp,gif,ico,jpg,png和tif等。調用格式:

A=imread(filename,fmt)

[X,map]=imread(filename,fmt)

[…]=imread(filename)

filename是圖像文件名,如果不在搜索路徑下應是圖像的全路徑,fmt是圖像文件擴展名字符串。前者可讀入二值圖、灰度圖、彩圖(主要是RGB);中者讀入索引圖,map爲索引圖對應的Colormap,若不是索引圖則map爲空。

    顯示:imshow或imtool。一般情況下只需要imshow(定義圖像名,如上面的A);當時索引圖是需inshow(X,map)。函數montage可以同時顯示多幀圖像,用法類似imshow

20.2 MATLAB圖像類型

二值圖:黑白圖,像素值爲邏輯類型,有兩個離散灰度級,即0和1.

索引圖:其像素值可以使邏輯類型、unit8、unit16、single、double。像素映射到一個色圖(Colormap),這是一個m*3矩陣,其元素是[0,1]上的浮點數,矩陣每行的三個浮點分別是紅、綠、藍三原色的深度。

灰度圖:像素值表示灰度級別,利用默認的Colormap顯示灰度圖。

RGB圖:具有R、G、B三個顏色通道,每個像素由1*3的向量[R,G,B]表示。

圖像類型轉換:

BW=dither(I)灰度轉成二值圖;

X=dither(RGB,map)RGB轉成灰度圖,用戶需要提供一個Colormap;

[X,map]=gray2ind(I,n)灰度到索引;

[X,map]=gray2ind(BW,n)二值圖到索引,map可由gray(n)產生。灰度圖n默認64,二值圖默認2;

X=graylice(I,n)灰度圖到索引圖,門限1/n,2/n,…,(n-1)/n,X=graylice(I,v)給定門限向量v;

BW=im2bw(I,level)灰度圖I到二值圖;

BW=im2bw(X,map,level)索引圖X到二值圖;level是閾值門限,超過像素爲1,其餘置0,level在[0,1]之間。

BW=im2bw(RGB,level)RGB到二值圖;

I=ind2gray(X,map)索引圖到灰度圖;

RGB=ind2rgb(X,map)索引圖到RGB;

I=rgb2gray(RGB)RGB到灰度圖;

20.3 圖像的灰度變換

    灰度圖(包括二值圖)的直方圖表示每個灰度級範圍內像素點的個數,索引圖的直方圖表示每個色條(即Colormap矩陣的每一行)對應得像素點個數。對應函數:

    Imsist(I)

Imsist(I,n)

    Imsist(X,map)

其中n爲直方圖的柱數,對二值圖只能是2

    灰度變換主要用於改變圖像的對比度,imadjust函數:

J=imadjust(I,[low, high],[bottom,top])

Low,high,bottom,top在[0,1]之間

    直方圖均衡:histep

20.4 圖像的代數運算

加減乘除:

imadd,imsubtract,immultiply,imdivide

加法可以提高信號噪音比,乘法可以用1和0組成的掩膜圖遮住圖像的指定部分,減法可以用於背景去除和運動目標檢測等。

20.5 圖像的集合運算

縮放:imresize,可以選擇不同的插值方法(nearest,bilinear,bicubic),可以設置放大因子m,大於1是放大,反之縮小,也可以在其中設置高寬[mrows,ncols]

旋轉:imrotate(A,angle,method)angle爲逆時針旋轉的角度,爲負時順時針,method同前所講,且默認都爲nearest

裁剪:I2=imcrop(I,rect)灰度圖

    X2=imcrop(X,map,rect)索引圖

    RGB2=imcrop(RGB,rect)RGB圖

Rect定義裁剪的矩形區域

20.6 圖像濾波

線性濾波可以用卷積實現,輸出圖像的像素值對應像素及其。鄰域像素的線性加權,權重矩陣稱爲卷積窗。

線性濾波:imfilter(A,H)H爲響應的相關窗或卷積窗,可設邊界填充對象

得到預定義的濾波器:fspecial

排序濾波:非線性處理方法,函數是B=ordfilt2(A,orfer,h)函數去像素的第order個值作爲輸出值,h爲濾波窗口,其值爲0或1,0對應的元素不參與排序。其中常用中值、最大值、最小值濾波。中值特殊函數medfilt2(A,[M,N])默認[3,3]

21 SIMULINK工具箱

21.1 SIMULINK基礎知識

安裝在MATLAB安裝中

啓動:命令窗口輸入simulink;工具欄按鈕;start按鈕

    演示系統:start->simulink\demos可以打開演示系統幫助。

幫助文檔:help->simulink help,可以查看模塊信息、查找相關內容、檢索相關內容、命令檢索

21.2 模塊操作

    連接模塊

    參數設置:雙擊打開設置相關項

    信號標籤(對信號線):添加、修改、移動、複製、刪除等操作

    信號標籤的傳遞步驟:

爲最初的信號線添加標籤;

在經過的信號線上輸入符號‘<’,如果該信號線攜帶的信號需要命名可以在符號‘<’前輸入信號名稱;

單擊信號標籤編輯框外任何地方,終止標籤編輯模式;

選擇菜單欄中edit->update diagram命令刷新模型,即可實現傳遞。

21.3 仿真設置

參數配置:simulink->sonfigureation parameter

仿真時間:start time->stop time

仿真步長:最大、最小和初始(Initial)

仿真算法:solver

輸出選項:output options

21.4 連續系統模型實現

    積分方程

    傳遞函數

    狀態方程

21.5 SIMULINK子系統

子系統的建立帶來的優勢:

減少了模型窗口中顯示模塊的數目;

模型層次化;

設計條理清晰,模型更具交流性;

增加重複調用性。

    創建:直接創建和構建子系統方法。使用subsystems模塊庫中的subsystem模塊建立子系統。Create subsystem

    封裝:mask subsystem

21.6 編寫S-函數

    系統函數的簡稱,是對一個動態系統的計算機程序語言描述。

    SIMULINK模塊都包含三個基本單元:輸入u,狀態x,輸出y;

    仿真階段分爲初始化階段和仿真階段

    調用S-函數的各項任務:

初始化;

計算下一個採樣時間點;

計算主要時間步的輸出;

更新狀態;

數值積分。

    直接反饋:系統的輸出或可變採樣時間收到輸入的控制。

    動態輸入:給出輸入連續狀態數目、離散狀態數目、輸出數目、輸入數目和直接反饋數目。

    設置採樣時間與偏移:主要採樣時間。

    在user defined function子庫中有一個S-Function模塊,可用來創建S-函數。

    S-函數模板,即sfuntmpl.m,屬於M-文件S-函數模板,含有一個主函數和6個子函數組成。可在命令窗口用Open sfuntmpl.m打開。

發佈了60 篇原創文章 · 獲贊 19 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章