第一篇:MatLab 知識小結(jié)
MatLab 知識小結(jié)
matlab常用到的永久變量。ans:計算結(jié)果的默認變量名。i j:基本虛數(shù)單位。
eps:系統(tǒng)的浮點(F10a9Bg個oht): inf: 無限大,例1/0 nan NaN:非數(shù)值(N航a nmnb謝)pi:圓周率n(n=3.1415926..)。realmax:系統(tǒng)所能表示的最大數(shù)值。realmin: 系統(tǒng)所能表示的最小數(shù)值,nargin: 函數(shù)的輸入?yún)?shù)個數(shù): nargout:函數(shù)的輸出多數(shù)個數(shù)
①matlab的所有運算都定義在復數(shù)城上。對于方根問題運算只返回處于第一象限的解。
⑦matlab分別用左斜/和右來表示“左除和“右除”運算。對于標量運算而言,這兩者的作用沒有區(qū)別:但對于矩陣運算來說,二者將產(chǎn)生不同的結(jié)果。
多項式的表示方法和運算
p(x)=x^3-3x-5 可以表示為p=[1 0 –3 5],求x=5時的值用plotval(p,5)也可以求向量:a=[3 4 5],plotval(p,a)函數(shù)roots求多項式的根 roots(p)p=[1 0-3 5];r=roots(p)由根重組多項式poly(根)q=poly(r)
real(q)有時會產(chǎn)生虛根,這時用real抽取實根即可
conv(a,b)函數(shù) 多項式乘法(執(zhí)行兩個數(shù)組的卷積)a=[1 2 3 4];b=[1 4 9 16];c=conv(a,b)多項式的加減法,低階的多項式必須用首零填補,使其與高階多項式有同樣的階次
多項式除法 [q , r]=deconv(c , b)表示b/c q為商多項式,r為余數(shù) 多項式的導數(shù) polyder(f)f=[ 2 4 5 6 2 1];s=polyder(f)
多項式的曲線擬合
x=[1 2 3 4 5];
y=[5.6 40 150 250 498.9];
p=polyfit(x,y,n)數(shù)據(jù)的n次多項式擬合 poly:矩陣的特征多項式、根集對應的多項式
x2=1:0.1:5;n取1時,即為最小二乘法
y2=polyval(p,x2);計算多項式的值(polyvalm計算矩陣多項式)plot(x,y,'*',x2,y2);grid on 最小二乘法 x=[1 2 3 4 5];
y=[5.6 40 150 250 498.9];plot(x,y,’*’),lsline
多項式插值(p158)
YI=interp1(x,y,XI,’method’)一維插值
(XI為插值點的自變量坐標向量,可以為數(shù)組或單個數(shù)。
method為選擇插值算法的方法,包括:
linear(線性插值)cubic(立方插值)spline(三次樣條插值)nearst(最近臨插值)
例如:人口預測 year=1900:10:1900;
number=[78 91 105 ?.每十年的人口數(shù)];
x=1900:1:2000;
y=interp1(year,number,x,’spline’);plot(year,numeber,’*’,x,y);grid on
一維博里葉變換插值使用函數(shù)interpft實現(xiàn),計算含有周期函數(shù)值的矢量的傅里葉變換
然后使用更多的點進行傅里葉變換的逆變換,函數(shù)的使用格式如下:y=interpft(x,n)其中x是含有周期函數(shù)值的矢量,并為等距的點,n為返同等間距點的個數(shù)。
求解一元函數(shù)的最小值
y=fminbnd('humps',0.3,1)humps為一內(nèi)置函數(shù)
求解多元函數(shù)的最小值
函數(shù)fminserch用于求多元函數(shù)的最小值。它可以指定一個開始的矢量,并非指定一個區(qū)間。此函數(shù)返回一個矢量為此多元函數(shù)局部最小函數(shù)值對應的自變量
紋理成圖功能
由warp函數(shù)的紋理成圖功能實現(xiàn)平面圖像在空間三維曲面上的顯示。將文件名為flowers.tif的圖像分別投影到圓柱形和球星表面上 i=imread('flowers.tif');[x,y,z]=cylinder;
subplot(1,2,1),warp(x,y,z,i);[x,y,z]=sphere(50);subplot(1,2,2),warp(x,y,z,i);warp(x,y,z,i);
求函數(shù)的零點
求函數(shù)humps在[1,2]區(qū)間上的零點 fzero(‘humps’,[1,2]);
也可以給一個初始值 fzero(‘humps’,0.9);
對于多項式可直接由roots求其根 roots(‘4*x^3+……’);也可以用solve c=sym('c','real');x=sym('x','real');s=solve(x^3-x+c)
函數(shù)定積分
q=quadl(‘humps’,0,1)求humps函數(shù)在0 1區(qū)間上的定積分,也可以用quad語句
二重積分 首先計算內(nèi)積分,然后借助內(nèi)積分的中間結(jié)果再求出二重積分的值,類似于積分中的分步積分法。Result=dblquad(‘integrnd’,xin,xmax.,ymin,ymax)integrnd為被積函數(shù)的名稱字符串
符號積分運算int(f)最精確的是符號積分法 計算s=∫12[∫01xydx]dy syms x y 中間為空格,不能為逗號 s=int(int(‘x^y’,’x’,0,1),’y’,1,2)引號可省略 vpa(s)顯示s的值 內(nèi)積分限為函數(shù)的二重積分 I=∫14[∫√y2(x2+y2)dx]dy 符號法I=vpa(int(int(‘x^2+y^2’,’x’,sqrt(y),2),’y’,1,4)
微分運算(diff)
微分是描述一個函數(shù)在一點處的斜率,是函數(shù)的微觀性質(zhì)、因此積分對函數(shù)的形狀在小范圍內(nèi)的改變不敏感,而微分很敏感。—個函數(shù)的小的變化,容易產(chǎn)生相鄰點的斜率的大的改變。由干微分這個固有的困難.所以盡可能避免數(shù)值微分.特別是對實驗獲得的數(shù)據(jù)進行微分。在這種情況,最好用最小二乘曲線擬合這種數(shù)據(jù),然后對所得到的多項式進行微分;或用另一種方法對點數(shù)據(jù)進行三次樣條擬合,然后尋找樣條微分,但是,有時微分運算是不能避免的,在MATLAB中.用函數(shù)diff汁算一個矢量或者矩陣的微分(也可以理解為差分)。a=[1 2 3 3 3 7 8 9];b=diff(a)一次微分 bb=diff(a,2)二次微分 實際上diff(a)=[a(2)-a(1),a(3)-a(2),??,a(n)-a(n-1)] 對于求矩陣的微分,即為求各列矢量的微分,從矢量的微分值可以判斷矢量的單調(diào)性、是否等間距以及是否有重復的元素。符號微分運算(diff)syms x t a f =cos(a*x)df =diff(f)由findsym的規(guī)則,隱式的指定對x進行微分
dfa=diff(f,'a')指定對變量a進行微分 dfa=diff(f,'a',3)三次微分
diff函數(shù)不僅作用在標量上,還可以在矩陣上,運算規(guī)則就是按矩陣的元素分別進行微分 syms a x A=[cos(a*x),sin(a*x),-sin(a*x),cos(a*x)];dA=diff(A)微分方程dsolve
在matlab中,符號表達式中包含字母D用來表示微分運算,D2,D3分別對應第二,第三階導數(shù),D2y表示d2y/dt2 把t缺省了
y=dsolve(‘Dy=f(y)’)單個方程,單個輸出
[u,v]=dsolve(‘Du=f(u,v)’,’Dv=g(u,v)’)2個方程,2個輸出
s=dsolve(‘Dx=f(x,y,z)’,’Dy=g(x,y,z)’,’Dz=k(x,y,z)’)
s.x s.y s.z 3個方程,架構(gòu)數(shù)組
dsolve('Dx=-a*x')結(jié)果:C1*exp(-a*t)沒給定初值,所以結(jié)果中含參變量 x=dsolve('Dx=-a*x','x(0)=1','s')結(jié)果exp(-a*s)給定了初值,獨立變量設為s
計算多元函數(shù)的梯度
fx=gradient(f)f是一個矢量返回f的一維數(shù)值梯度,fx對應于x方向的微分。
[x,y]=meshgrid(-2:.2:2,-2:.2:2);z=x.*exp(-x.^2-y.^2);[px,py]=gradient(z,.2,.2);contour(z),hold on 畫等值線 quiver(px,py)
matlab字符串運算 利用sym命令創(chuàng)建表達式
f=sym(‘cos(x)+sin(x)’)或 syms x , f=cos(x)+sin(x)diff(f)求其導數(shù)(也
可
直
接
用
命
令
f=diff(‘cos(x)+cos(y)’)
當字符表達式中含有多于一個的變量時,只有—個變量是獨立變量。如果不告訴matlab哪一個變量是獨立變量,則可以通過findsym命令詢問 利用findsym命令查詢獨立變量 f=sym('sin(a*x)+b')
findsym(f,1)給出獨立變量(一個變量,如果為2則給出2個變量)findsym(f)給出所有變量
符號表達式的化簡和替換
collect函數(shù) collect(f,v)表示將f表示為關于符號變量v的多項式形式,即關于v合并同類項,v缺省,則用findsym確定的缺省變量 syms x y
f=x^2*y+y*x-x^2-2*x+1 collect(f)得到(-1+y)*x^2+(y-2)*x+1 collect(f,y)
得
到
(x+x^2)*y+1-x^2-2*x
expand函數(shù) expand(f)將f展開,寫成和的形式 syms x
expand((x-1)^3)得
到
x^3-3*x^2+3*x-1
horner函數(shù) horner(f)將f寫成鑲嵌套形式 syms x
horner(x^3-6*x^2)得
到
(-6+x)*x^2
factor函數(shù) factor(f)將f轉(zhuǎn)換成低階有理多項式的乘積 syms x
f=x^3-6*x^2+11*x-6
factor(f)得到(x-1)*(x-2)*(x-3)simplify(f)函數(shù) 綜合化簡 simple(f)函數(shù)的最簡形式 syms x
f=2*sin(x^2)+cos(3*x)
simple(f)如果不想看到中間過程,可z=simple(f)有時使用兩次simple命令可以得到最簡式
如果想知道哪個簡化命令得到最后結(jié)果,可以加一個參數(shù)how [z,how]=simple(f)
符號表達式的替換 subs(f,new,old)f='a*x^2+b*x+c'
subs(f,'t','x')得到a*(t)^2+b*(t)+c subs是一個符號函數(shù),返回一個符號變量
subexpr函數(shù) 有時matlab返回的符號表達式難以理解,用subexpr函數(shù),可以將表達式中重復出現(xiàn)的子式用一個符號表示,從而簡化表達形式 c=sym('c','real');x=sym('x','real');s=solve(x^3-x+c)a=subexpr(s)
得到
sigma
=
-108*c+12*(-12+81*c^2)^(1/2)a =
[ 1/6*sigma^(1/3)+2/sigma^(1/3)] [-1/12*sigma^(1/3)-1/sigma^(1/3)+1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))] [-1/12*sigma^(1/3)-1/sigma^(1/3)-1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))]
pretty函數(shù)有時也能起到同樣的作用。Pretty(f)顯示函數(shù)的習慣書寫形式
線性方程組的求解
求解線性方程組,用反斜杠 a=hilb(3)b=[1 2 3]' ab
矩陣的特征值和特征向量
用eig(v,d)函數(shù),[v,d]=eig(A);其中d將返回特征值,v返回相應的特征向量,缺省第二個參數(shù)將只返回特征值 syms a b c real A=[a b c;b c a;c a b];[v,d]=eig(A);
為了觀察更清楚,使用以前學過的替換函數(shù),這里不用默認的sigma,而改用M,顯式的代替繁瑣的表達子式 vv=subexpr(v);vs=subs(vv,'m','sigma')運行結(jié)果為
vs = [ 1, 1, 1] [-(c+(m)-a)/(c-b),-(c-(m)-a)/(c-b), 1] [-(a-(m)-b)/(c-b),-(a+(m)-b)/(c-b), 1]
再用m替換d中的表達子式 dd=subexpr(d);ds=subs(dd,’m’,’sigma’)運行結(jié)果為ds =
[(m), 0, 0] [ 0,-(m), 0] [ 0, 0, c+a+b] note 求特征值也可用以下命令
f=poly(A)poly函數(shù) 用來求A的特征多項式
d=solve(f)solve(f)函數(shù)用來求多項式的解
svd()函數(shù) 求矩陣的奇異值分解,將矩陣分解為兩個正交矩陣和對角矩陣的乘積 a=sym(hilb(2))[u,s,v]=svd(a)
代數(shù)方程和方程組
代數(shù)方程的求解可用solve(f)命令,如果f不含=,matlab將給表達式置零。方程的未知量在默認的情況下由findsym決定或顯式指出 syms a b c x
solve(a*x^2+b*x+c)以x為默認變量
solve(a*x^2+b*x+c,a)指定對a為變量
求含有等號的方程的解(一定要加單引號)
f=solve(‘cos(x)=sin(x)’)
x=solve('exp(x)=tan(x)')如果不能求得符號解,就計算可變精度解。求解方程組與單方程類似 解一個三元一次方程
v=solve('a*u^2+v^2','u-v=1','a^2-5*a+6')結(jié)果為v =
a: [4x1 sym] u: [4x1 sym] v: [4x1 sym]
一些常用的符號運算 極限運算limit
limit(f)求x到0的極限
limit(f,x,a)或limit(f,a)求x到a的極限
limit(f,a,’left’)limit(f,a,’right’)求x到a的左極限和右極限 limit(f,inf)求x趨于無窮的極限 符號求和symsum(s)
symsum(s)以默認的findsym決定的變量求和
symsum(s,v)以s中指定的變量v求和
symsum(s,a,b)symsum(s,v,a,b)從a到b的有限項求和
syms k n
symsum(k)從0到k求和
symsum(k,0,n-1)從0到n-1求和 symsum(1/k^2,1,inf)無限項求和 泰勒級數(shù)taylor(f)
taylor(f)表示求f的5階talor展開,可以增加參數(shù)指定展開的階數(shù)(默認式5),也可以對于多元函數(shù)指定展開的變量,還可以指定在哪個點展開 syms x t taylor(exp(-x))
taylor(log(x),6,1)在1點的6階taylor展開
taylor(x^t,3,t)對t的3階taylor展開 積分變換
fourier變換和逆變換fourier(f)fourier分析可以將信號轉(zhuǎn)換為不同頻率的正弦曲線??蓪﹄x散數(shù)據(jù)進行分析,也可對連續(xù)時間系統(tǒng)進行分析,特別在信號和圖形處理領域。離散變換(DFT)作用于有限數(shù)據(jù)的采集,最有效的是快速fourier變換(FFT)F=fourier(f)獨立變量x,返回關于參數(shù)w的函數(shù)
F=fourier(f,v)返回函數(shù)F關于符號對象v的函數(shù)
F=fourier(f,u,v)對關于u的函數(shù)f進行變換,而不是缺省的w,返回函數(shù)F是關于v的函數(shù) syms t v w x fourier(1/t)
fourier(exp(-t)*sym('Heaviside(t)'),v)fourier(diff(sym('F(x)')),x,w)Fourier逆變換
f=ifourier(F)缺省獨立變量w,返回關于x的函數(shù)對w進行積分 f=ifourier(F,v)返回函數(shù)f是關于符號對象v的函數(shù),而不是缺省的x f=ifourier(F,u,v)是關于u的函數(shù)f進行變換,而不是缺省的x,返回函數(shù)f是關于v的函數(shù)
Laplace變換和逆變換laplace(f)應用于連續(xù)系統(tǒng)(微分方程)中,可以用來求解微分方程的初值問題 laplace(F)缺省獨立變量t,缺省返回關于s的函數(shù)L
laplace(F,t)返回關于t的函數(shù)L,而不是缺省的s
laplace(F,w,z)對函數(shù)F的自變量w積分,返回關于z的函數(shù)L 逆變換
F=ilaplace(L)缺省獨立變量s,返回關于t的函數(shù)F F=ilaplace(L,y)返回關于y的函數(shù)F,而不是缺省的t F=ilaplace(L,y,x)對函數(shù)L的自變量y積分,返回關于x的函數(shù)F Z-變換和逆變換ztrans(f)標量符號f的Z-變換
F=ztrans(f)缺省獨立變量n,返回關于z的函數(shù)
F=ztrans(f,w)返回關于符號變量w的函數(shù)F,而不是缺省的z F=ztrans(f,k,w)關于k的符號變量作Z-變換返回關于符號變量w的函數(shù) 逆變換iztrans(F)f=iztrans(F)或(F,k)或(F,w,k)
符號繪圖函數(shù)
符號函數(shù)簡易繪圖函數(shù)ezplot(f)f可以包含單個符號變量x的字符串或表達式,默認畫圖區(qū)間(-2pi,2pi),如果f包含x和y,畫出的圖像是f(x,y)=0的圖像,缺省區(qū)間是-2pi syms x t ezplot('t*cos(t)','t*sin(t)',[0,4*pi])繪制符號圖像函數(shù)fplot(fun,lims,tol,’linespec’,n)其中l(wèi)ims=[xmin,xmax]或[xmin,xmax,ymin,ymax] tol為指定相對誤差,默認0.001 ‘linespec’指定繪圖的線型 n指定最少以n+1個點繪圖 [x,y]=fplot(fun,lims,…)只返回用來繪圖的點,并不繪圖,可以自己調(diào)用plot(x,y)來繪制圖形。syms x subplot(2,2,1),fplot('humps',[0,1])f='abs(exp(x*(0:9))*ones(10,1))' subplot(2,2,2),fplot(f,[0,2*pi])subplot(2,2,3),fplot('sin(1./x)',[0.01,0.1],1e-3)matlab繪圖 二維圖形的繪制 plot 在(x,y)坐標下繪制二維圖像 支持多個x-y二元結(jié)構(gòu) plot3 在(x,y,z)坐標下繪制三維圖形 loglog 在(x,y)對數(shù)坐標下繪制二維圖形 semilogx 在x為對數(shù)坐標,y為線性坐標的二維坐標中繪圖 semilogy 在x為線性坐標,y為對數(shù)坐標的二維坐標中繪圖 plotyy 在有兩個y軸的坐標下繪圖 plot用法 plot(x,y,'--rs','linewidth',2,'markeredgecolor','k',...'markerfacecolor','g','markersize',10)plotyy用法 plotyy(x1,y1,x2,y2)以x1為標準,左軸為y軸繪制y1向量,x2為基準,右軸為y軸,繪制y2向量 plotyy(x1,y1,x2,y2,fun)用字符串fun指 定的繪 圖 函 數(shù) (plot ,semilogx,semilogy,loglog,stem)plotyy((x1,y1,x2,y2,fun1,fun2)t=0:pi/20:2*pi;y=exp(sin(t)); plotyy(t,y,t,y,'plot','stem')stem為二維桿圖 [ax,h1,h2]=plotyy(?)返回左右兩y軸的句柄(分別為ax(1)ax(2),以及在兩坐標軸中生成的圖形對象的句柄,分別為h1 h2 t=0:900;A=1000;a=0.005;b=0.005;z2=cos(b*t);z1=A*exp(-a*t); [haxes,hline1,hline2]=plotyy(t,z1,t,z2,'semilogy','plot');axes(haxes(1)) ylabel('semilog plot')對數(shù)坐標 axes(haxes(2))ylabel('linear plot')set(hline2,'linestyle','--')其他二維圖形繪圖指令 bar(x,y)二維條形圖 hist(y,n)直方圖 histfit(y,n)帶擬和線的直方圖,n為 直方的個數(shù) stem(x,y)火柴桿圖 comet(x,y)彗星狀軌跡圖 compass(x,y)羅盤圖 errorbar(x,y,l,u)誤差限圖 feather(x,y)羽毛狀圖 fill(x,y,’r’)二維填充函數(shù) 以紅色填充 pie(x)餅圖 polar(t,r)極坐標圖 r為幅值向量,t為角度向量 t=0:0.1:8*pi;r=cos(3*t/2)+1/2; polar(t,r),xlabel('polar 指令')quiver(x,y)磁力線圖 stairs(x,y)階梯圖 loglog(x,y)對數(shù)圖 semilogx semilogy 半對數(shù)圖 matlab三維作圖 plot3(x,y,z)三維線條圖 t=0:pi/50:15*pi; plot3(sin(t),cos(t),t,'r*')與plot相似 v=axis 返回各個軸的范圍 text(0,0,0,'origin')在某個坐標點加入文字 plot3 增加維數(shù)可以一次畫多個圖,使所個二維圖形眼一個軸排列 三維網(wǎng)線圖的繪制 mesh(x,y,z)網(wǎng)格圖 mesh(x,y,z,c)四維作圖,(x,y,z)代表空間三維,c代表顏色維 mesh(…,’property name’,property value,…)設置曲面各屬性的值 [x,y,z]=sphere(12); mesh(x,y,z),hidden off 曲面設置為透明 meshc(x,y,z)畫網(wǎng)格圖和基本的等值線圖 meshz(x,y,z)畫包含零平面的網(wǎng)格圖 waterfall(x,y,z)與mesh一樣,只是在效果上它的網(wǎng)格線只在x軸一個方向出現(xiàn),呈瀑布狀水線 兩個變量的標量指令meshgrid(x)或meshgrid(x,y)(p179) 將兩個一維向量生成兩個二維向量,以便進行z=f(x,y)運算,算出z的所有值,z為x y的標量指令 [X,Y]=meshgrid(x)meshgrid(x,x)的簡略式 [X,Y]=meshgrid(x,y)[X,Y,Z]=meshgrid(x,y,z)用于三維圖形的繪制 [x,y]=meshgrid([-2:0.1:2]);z=x.*exp(-x.^2-y.^2);plot3(x,y,z)surf(x,y,z,c)著色表面圖 surf(x,y,z)隱含著c=z surf(z)隱含著x,y的值為surf指令根據(jù)z的尺寸自動生成 surfc 畫出具有基本等值線的曲面圖 surfl 畫出一個具有亮度的曲面圖 shading flat 網(wǎng)線圖的某整條線段或曲面圖的某個貼片都著一種顏色 shading interp 某一線段或貼片上各點的顏色由線或片的頂端顏色經(jīng)線性插值而得 曲面圖不能設成網(wǎng)格圖那樣透明,但需要時,可以在孔洞處將數(shù)據(jù)設成nun 等高線的繪制 在二維空間繪制等高線contour contour(x,y,z,n)繪制n條等值線(n可省略) contour(x,y,z,v)在向量v所指定的高度上繪制等高線(可?。?/p> c=contour(x,y,z)計算等值線的高度值 c=contourc(x,y,z,n)計算n條等高線的x-y坐標數(shù)據(jù) c=contourc(x,y,z,v)計算向量v所指定的等高線的x-y坐標數(shù)據(jù) clabel(c)給c陣所表示的等高線加注高度標識 clabel(c,v)給向量v所指定的等高線加注高度標識 clabel(c,’manual’)借助鼠標給點中的等高線加注高度標識 三維空間繪制等高線contour3(x,y,z)[x,y,z]=peaks(30);contour3(x,y,z,16,'g')二元函數(shù)的偽彩圖pcolor(x,y,z)是指令surf的二維等效指令,代表偽彩色,可與contour單色等值線結(jié)合畫彩色等值線圖 [x,y,z]=peaks(30); pcolor(x,y,z);偽彩色 shading interp 顏色插值,使顏色平均漸變 hold on,contour(x,y,z,20,'k')...畫等值線 colorbar('horiz')水平顏色標尺 c=contour(x,y,z,8);clabel(c)標注等高線 矢量場圖(速度圖)quiver 用于描述函數(shù)z=f(x,y)在點(x,y)的梯度大小和方向 [X,Y]=meshgrid(x,y)X,Y為Z陣元素的坐標矩陣 [U,V]=gradient(Z,dx,dy)U,V分別為Z對x對y的導數(shù),dx dy是x y方向上的計算步長 quiver(X,Y,U,V,s,’linespec’,’filled’)U,V為必選項,決定矢量場圖中各矢量的大小和方向,s為指定所畫箭頭的大小,缺省時取1,linespec為字符串,指定合法的線形和彩色,filled用于填充定義的繪圖標識符 [x,y]=meshgrid(-2:.2:2,-1:.15:1);z=x.*exp(-y.^2); [px,py]=gradient(z,.2,.15);contour(x,y,z); hold on,quiver(x,y,px,py),axis image 多邊形的填色fill(x,y,c) c定義顏色字符串,可以是’r’,’b’等,也可以用RGB三色表示[r,g,b]值為0-1 圖形的四維表現(xiàn) 1、命令x=0:0.2:2中的賦值格式是matlab常用的變量賦值格式,其中0表示初始值,0.2表示增量,而2表示終止值。若數(shù)組x無規(guī)律可循,那么x賦值得逐一輸入單個元素了,這時要使用賦值格式符“[]”,如x=[0 5 8 1]表示把0 5 8 1 賦值給變量x.2、命令y=x.^3中的“.”表示對數(shù)組x逐一操作而不是把數(shù)組看做一個整體進行操作,而“^”表示數(shù)組的冪指數(shù)即對數(shù)組進行相乘的操作。 3、假設要建立起始值為0,終止值為?,間隔為0.1?的數(shù)組x,那么用前三種方法創(chuàng)建x的具體命令為: 4.x=[0 0.1*pi 0.2*pi 0.3*pi 0.4*pi 0.5*pi 0.6*pi 0.7*pi 0.8*pi 0.9*pi pi] x=(0:0.1:1)*pi x=linspace(0,pi,10)如果沒有10這個數(shù)字表示將[0, ?]分成間距相等的100個點。而x=logspace(1,2,10)表示對數(shù)(lg)間距相等的十個點,如沒有10這個數(shù)字,表示將在[10,102]之間產(chǎn)生對數(shù)間距相等的50十個點。 5.tic和toc用來記錄時間。6.tic A=[]; A=diag(5*ones(5,1))+diag(ones(4,1),1)+diag(ones(4,1),-1) Toc 可用來做出一個矩陣。 7.學會掌握for——end的循環(huán)語句。 8.學會使用while-end循環(huán)語句,此語句適合適用于循環(huán)次數(shù)不確定情況下。只要表達式的值非零即為邏輯“真”,則程序就會一直循環(huán)下去。 9.循環(huán)終止問題,用break來實現(xiàn)。 10.調(diào)試程序時文件名是什么就在命令窗口輸入什么,而且要先在第一行弄出紅點才行。11.符號變量的創(chuàng)建用sym和syms,后者可創(chuàng)建多個符號變量。 12.創(chuàng)建符號方程用的格式為:equ=('方程'),千萬不能用這種格式:equ=方程。13.數(shù)值矩陣的表現(xiàn)形式是約數(shù),而符號型矩陣的表現(xiàn)形式是精確的。數(shù)值型變量和符號型變量之間不能直接運算,即使它們都可能是數(shù)字,得先把數(shù)值型變量轉(zhuǎn)化為符號型變量。 14.一般來說,存儲matlab文件時用字母來命名才能有效。15.創(chuàng)建一個符號型實數(shù)的一般格式為: x=sym(x,'real')Y=sym(y,'real')或者sym x y real;要想清除x的符號屬性可使用以下命令:x=sym(x,'unreal')或syms x unreal 16,real(x)表示x實部,而imag(x)表示x的虛部,而conj(x)表示x的共厄復數(shù)。17.matlab運算中涉及到數(shù)值變量、字符變量和符號變量(級別按順序一次增高)的運算,系統(tǒng)將各變量轉(zhuǎn)化為最高級別的運算。 18.將其他類型的變量轉(zhuǎn)化為符號型變量的格式為:s=sym(f),f不能是矩陣或者非法的表達式。 19.用s=int2str(x)可以將x轉(zhuǎn)化為字符變量(存儲字節(jié)大些)s,當x為有理數(shù)時,得四舍五入;當x為虛數(shù)時,將只對x的實部進行轉(zhuǎn)換。 20.S=num2str(x)也是將x轉(zhuǎn)化為字符變量s,只是對x無任何限制。21.將其他變量轉(zhuǎn)化為數(shù)值變量: 1)x=double(s),如果s中含有非數(shù)值的符號,系統(tǒng)將給出錯誤的信息,當s為字符變量時,該命令將s轉(zhuǎn)化為數(shù)值矩陣x。矩陣中的元素值為s中的相應字符的ASCII碼值。 2)當s是一個包含非數(shù)字字符的變量時,str2num(s)命令將返回一個空矩陣s。 3)x=numeric(s)命令可將變量s轉(zhuǎn)化為數(shù)值變量x,這里s既可以是字符變量也可以是符號變量,但s不能是矩陣,否則將出錯誤信息。 22.利用findsym命令可以找到符號表達式或者符號矩陣中的符號變量,并且符號變量以 23.Pretty將代數(shù)式A由機器格式轉(zhuǎn)變?yōu)闀鴮懜袷?,在轉(zhuǎn)化過程中,不會對A進行任何簡化。 24.collect(A):按默認變量對表達式A進行降冪排列,默認變量是指由findsym確定的變量。 25.collect(A,v)按照指定變量v對表達式A進行降冪排列。26.expand(S):將表達式S展開。 27.horner(S):把符號表達式S展開為:ax(bx(cx···(dx+z)+e···)+f)+g.28.factor(S):把符號表達式S展成重疊式。 29.Simplify(S):用一般化簡方法化簡符號表達式S.但共有六種化簡法,此種化簡法常用,但不具精確性。 30.不定化簡法:simple(S):用不定化簡法化簡符號表達式S。若S為矩陣,則返回結(jié)果為整個矩陣(而不是單個元素)的最簡短表達式。 31.[R,HOW]=simple(S):用不定化簡法化簡表達式S,其中R為S的化簡結(jié)果,HOW為對應結(jié)果所采用的化簡方法或者轉(zhuǎn)換方法。 32.combine(trig)用三角函數(shù)的運算性質(zhì)對主對角代數(shù)式進行化簡; convert(exp):將代數(shù)式盡量轉(zhuǎn)化為由ex、eix表示的指數(shù)形式。 convert(sincos):將代數(shù)式盡量轉(zhuǎn)化為由sin(x)、cos(x)形式表示的式子。 convert(tan):將代數(shù)式盡量轉(zhuǎn)化為由tan(x)形式表示的式子。 33.[n,d]=numden(S)用分子分母法化簡符號表達式S。返回結(jié)果n為分子,d為分母。34.[Y,SIGMA]=subexpr(X,'SIGMA'):X表示待整理的符號表達式或者符號表達式的矩陣。 SIGMA:在整理過程中提出的各種因子將以矩陣的格式保存在名為SIGMA的變量中。Y:已提取各種因子后,將整理完畢的符號表達式或者符號表達式的矩陣保存在Y中。35:SS=subs(s,old,new):s為符號表達式,old為s中將要被代替的“舊”變量名,new是用來代替s中old的“新”變量名或代數(shù)式。(注意subs不但可以進行單一變量的代換,還可以同時進行多個變量的替換) 36.SS=subs(S)利用由函數(shù)或MATLAB工作空間中得到的具體值(無論是數(shù)值型還是字符型)來代替S中相應的所有變量。 37.SS==subs(s,new):用new來代替S中的自由符號變量。 第五章 微分: 1.diff(x,'v')可用來對變量'v'求導,diff(x,'v',n)是對變量‘v’求n階導數(shù)。2.diff(X,N)按第一個非單元素集合的維計算X的N階導數(shù)。積分: 不定積分:1.int(s);int(s,v)這兩種格式都是求s的不定積分,求別在于:第一種調(diào)用格式以findsym(S)命令尋找到的變量為自變量,計算S的不定積分;而第二種調(diào)用格式則針對指定變量V進行不定積分運算。 定積分:int(S, v, a, b)其中S為表達式,v為指定變量,a為積分下限,b為積分上限。當a或b取inf或(-inf)時該命令計算的是廣義積分。但是這只能得到一個具體的表達式,而使用numeric便可以得到一個值。求極限: limit(S,v):其中S為表達式,v為指定變量。該命令的功能:用于求當v→0時的表達式S的極限值。 limit(S):其中S為表達式,該命令的功能:用于求當系統(tǒng)默認變量→0時的表達式S的極限值。 limit(F,x,a):該命令的功能:用于求當x→a時表達式F的極限值。 limit(F,x,a,'right'):該命令的功能:用于求當x→a?時表達式F的極限值(即右極限值)。 limit(F,x,a,'left'):該命令的功能:用于求當x→a?時表達式F的極限值(左極限值)。求級數(shù): symsum(S):以函數(shù)findsym(S)j決定的變量(比如說自變量為K),求K從0開始到k-1為止S的前K項和。 symsum(S,v):功能上,只不過指定變量為v。 symsum(S,v,a,b):求自變量V從a到b時S的和。經(jīng)常和simple連用。級數(shù)展開:taylor(f):用于求f關于默認變量的5階近似麥克勞林多項式。taylor(f,n):用于求f關于默認變量的n-1階近似麥克勞林多項式。taylor(f,v):同上,只不過自變量為指定變量V.taylor(f,a): 前三種調(diào)用格式求出的結(jié)果均是關于自變量等于零的展開式,而該命令則可以求解函數(shù)f在自變量等于a處的泰勒展式。 多元函數(shù)泰勒級展開式:maple('readlib(mtaylor)');maple('mtaylor(f,v,n,w)')傅里葉展開式先建立個函數(shù)mfourier 1)函數(shù)的建立:function [a0,an,bn]=mfourier(f) syms n x ao=int(f,-pi,pi)/pi; an=int(f*cos(n*x),-pi,pi)/pi;bn=int(f*sin(n*x),-pi,pi)/pi;dig命令:diag(v,k):當V是由n個元素組成的矢量時,該命令的返回值是階數(shù)為n+abs(k)的方陣。其中對角線由矢量v的元素組成,其余元素由0組成。當k=0時,v為主對角線;當k>0時,v位于主對角線之上;當k<0時,v位于主對角線之下。diag(v):與dig(v,0)完全相同,把矢量v置于主對角線之上。 diag(A,k):其中A為矩陣。該命令返回值是由矩陣A的第k條對角線的元素所組成的列矢量。 diag(A):相當于diag(A,0),得到由矩陣A的主對角線元素所組成的列矢量。triu命令(抽取矩陣的上三角部分)triu(A):抽取矩陣的上三角部分組成一個新的矩陣,其余元素用0來填充。 triu(A,k):抽取矩陣的第k條對角線上的三角部分組成一個新的矩陣,其余元素用0填充。當k=0時,triu(A,0)與triu(A)功能完全相同,抽取矩陣A主對角線以上的三角部分;k>0抽取元素對應矩陣A主對角線以上、第k條對角線以上的部分,k<抽取元素對應矩陣A主對角線以下、第k條對角線以上的部分。tril命令(抽取矩陣的下三角部分):和triu相似。inv命令(矩陣求逆):inv(A):返回矩陣A的逆。det命令(求矩陣的行列式):det(A):返回矩陣A的行列式。 rank命令(求矩陣的秩):rank(A,tol):返回矩陣A的奇異值中大于誤差tol的奇異值個數(shù)。 rank(A):同上,默認精度tol=max(size(A)*norm(A))*eps.null命令(求矩陣的零空間的正交基):Z=null(A):求矩陣A的零空間的正交基,它是由矩陣A的奇異值分解得到的。 Z=null(A,'r'):求矩陣A的零空間的正交基,它是由縮減行階梯矩陣得到的并且A*Z=0。Colspace命令(求矩陣的列空間的基):Z=colspace(A):返回矩陣A的列空間的基,并且有size(Z,2)=rank(A)。 eig命令(求矩陣的特征值和特征矢量)E=eig(X):返回由方陣X的特征值組成的特征矢量。 [V ,D]=eig(X):返回方陣X的特征值矩陣D和特征矢量矩陣V,其中X、V、D滿足XV=VD;特征值矩陣D是以X的特征值為對角線的元素生成的對對角矩陣;矩陣X的第k個特征值對應的特征矢量是矩陣D的第k列列矢量。只有這樣才有XV=VD.svd命令(矩陣的奇異分解值) S=svd(X):f返回由矩陣X的奇異值組成的矢量。jordan命令(求矩陣的約旦標準形)jordan(X):返回矩陣X的約旦標準形。[V,J]:jordan(X):除了返回矩陣X的約旦標準形J外,還給出了相似變換矩陣V,并有VA*V=J。 poly命令(求矩陣的特征多項式) P=poly(X):若X為nxn的矩陣,則該命令返回X的特征多項式P。P為包含n+1個元素的矢量,是特征多項式的系數(shù)。Expm命令(求矩陣的指數(shù)形式)expm(X):用pade法計算ex。 一般代數(shù)方程的求解:solve(Equ):Equ為符號方程,該命令可以求Equ關于系統(tǒng)默認變量為自變量的符號方程的解。 solve(Equ,var):同上,但var為指定的自變量,求出的解是關于指定變量的解。solve('equ','equ',···,'equ') [a1,a2,···,an]=solve('equ1','equ2',···,'equn','var1','var2',···,'varn') 最后兩種調(diào)用格式相差無幾,都是求代數(shù)方程組的解,只不過最后一種調(diào)用格式制定了自變量var1,var2,···,varn.事實上,var1,var2,···,varn可有可無,只是因為solvem命令只有當方程組的數(shù)目和自變量的數(shù)目相同時才能進行求解,并且解得的結(jié)果并不是按照solve命令括號中var1,var2,···,varn的順序分別賦給a1,a2,··,an的,而是按照英文字母表的順序依次賦給a1,a2,···,an。即當var1在所有變量中按字母表順序排序時排在最后一個,那么在結(jié)果中an才是對應變量var1的解。 注意:lambertw是個函數(shù)(稱為Lambert W 函數(shù)),lambertw(A)是指滿足?e=A這樣的表達式所對應的值。 注意:當用表達式s1,s2···sn代替solve命令中的符號方程組equ1,equ2,···,equn時,就意味著所求的是以s1=0,s2=0,···,sn=0所構(gòu)成的方程組的解。線性代數(shù)方程組的求解: X=linsolve(A,B):求AX=B的解,返回X。常微分方程組的求解: 注意:Matlab中用D表示對變量求導數(shù),Dy表示對y求一階導數(shù),Dny表示對y求n階導數(shù)。因此,y''+2y'=x這一微分方程在Matlab中需描述為:D2y+2Dy=x.無初值條件的常微分方程:調(diào)用格式為:dsolve('equ')或desolve('equ','var')后者中“var”為指定變量。 ?有初值條件的常微分方程:dsolve('equ,''condition1,condition2,···,conditionn','var')dsolve('equ','condition1','condition2',···,'conditionn','var')求解常微分方程組: dsolve('equ1','equ2',···,'equn','var')dsolve('equ1,equ2,···,equn','var')desolve('equ1','equ2',···,'equn','condition','condition1','condition2',···,'condition','var')desolve('equ1,equ2,···,equn','condition,condition1,condition2,···,condition','var')求解線性常微分方程組:使用這個函數(shù): function y=dsolve(A)syms t real e=eig(A);%求變量的特征矢量。 [v,d]=eig(A);%求得A的特征值矩陣d和特征值矢量矩陣v y=exp(d*t)'*v;%求得線性齊次常微分方程組X'=AX的解。反函數(shù)和復合函數(shù)的求法: g=finverse(f):返回值g是已知函數(shù)f的反函數(shù)(自變量由系統(tǒng)的默認變量確定)。若f為單符號變量(如x)的一個標量,那么g是一個涉及符號變量的標量,并且滿足g(f(x))=x。 g=finverse(f,v):同上,但指定變量為v。該命令在f含有多個符號的情況下,求它關于某個變量的反函數(shù)時要比第一種調(diào)用格式顯得明了了。求復合函數(shù): compose(f,g):返回值為f(g(y)),其中f=f(x),g=g(y)。compose(f,g,z):返回值為f(g(z)),其中f=f(x),g=g(y)compose(f,g,x,z):返回值f(g(z))且視x為f的自變量,即如果f=cos(g(z)txtxg(z)),則compose(f,g,x,z)返回值就是cos(),而compose(f,g,t,z),則返回值為cos()。 compose(f,g,x,y,z):返回值為f(g(z))且視x為f的自變量,視y為g的自變量。例如:xtyusin(zu)f=cos(),g=sin()則compose(f,g,x,y,z)返回值為cos(t),,而compose sin(yz)(f,g,x,u,z)則返回為cos(t)。 第六章 傅立葉變換及其逆變換: F=fourier(f):對自變量為x的表達式f(x)進行變換,返回值為F(w);當f是變量w的函數(shù)即f=f(w)時,則變量結(jié)果為F=F(t);如果變量表達式中沒有t和x這兩個變量,則該命令將對系統(tǒng)默認的變量進行傅立葉變換。 F=Fourier(f,v):指定了變量結(jié)果為變量v的函數(shù)。表現(xiàn)在計算過程中則公式變?yōu)椋?/p> ??F(v)=???f(x)e?ivxdx。用MATLAB語言則可描述為:fourier(f,v)<=>F(v)=int(f(x)*exp(-i*v*x),x,-inf,inf)F=fourier(f,u,v):指定了要對函數(shù)表達式做關于變量u的fourier變換。對應此時的??傅立葉變換公式為:F(v)?逆變換: ???f(u)e?ivudu。 f=ifourier(F):F為待進行傅立葉逆變換的代數(shù)表達式。該命令對F(w)實行傅立葉逆變換得到一個自變量為x的函數(shù)f(x)。如果F=F(x)則該命令將返回一個自變量為t的函數(shù)f(t).f=fourier(F,u)f=fourier(F,v,u)后兩種調(diào)用格式中u,v的用法和fourier命令中的用法完全一致。拉普拉斯變換及其逆變換: ??拉普拉斯公式:L(s)??F(t)e0?stdt。 L=laplace(F):F為待進行拉普拉斯變換的代數(shù)表達式,其默認變量為t,若p不含t。則針對系統(tǒng)默認的變量對表達式進行拉普拉斯變換,該命令返回的函數(shù)其默認自變量為s。如果F=F(s)那么該命令的返回結(jié)果為L=L(t)。該命令可用MATLAB語言描述為:Laplace(F)<=>L(s)=int(F(t)*exp(-s*t),0,inf)并且積分針對變量t進行。 L=laplace(F,t)指定返回結(jié)果L為自變量t的函數(shù),而不是系統(tǒng)默認的S用MATLAB語言可以描述為:Laplace(F,t)<=>L(t)=int(F(x)*exp(-x*t),0,inf)。用公式可表示為:??L(t)??F(x)e0?txdx。 L=laplace(F,w,z)與傅立葉變換的解是類似。 c?i?拉普拉斯逆變換:公式為:F(t)?F=ilaplace(L)F=ilaplace(L,y)F=ilaplace(L,y,x)這些與傅立葉變換的解釋類似。 ??L(s)ec?i?stds Z變換:公式為F(z)?F=ztrans(f).F=ztrans(f,w)F=ztrans(f,k,w) ?0f(n)zn。 和傅立葉變換解釋差不多。f=iztrans(F)f=iztrans(F,k)f=iztrans(F,w,k)和傅立葉變換解釋差不多.幾個補充命令: 1、double(X):返回值是X的雙精度型矩陣,通常在循環(huán)語句中或者判斷語句中使用double命令。 2、poly2sym(C):返回值對應矢量C的多項式表達式,返回結(jié)果的默認變量是X。 Poly2sym(C,‘v’):只不過將變量X換成v.3、sym2poly(P)與2的命令功能相反:該命令返回的結(jié)果是一個行矢量,該式量的元素是多項式的系數(shù)。 4、ccode(s):返回符號表達式s的C語言編碼形式。 5、sinint正弦積分函數(shù):sinint(x)=int(sin(t)/t,t,0,x) 6、余弦積分函數(shù)cosint(x)=Gamma+log(x)+int((cos(t)-1),t,0,s).其中Gamma是歐拉常數(shù),為:?=0.577215664901··· 7、zeta(z)=sum(1/k^z,k,1,inf),即計算 8、zeta(n,z)=計算zeta(z)的k階導數(shù)。 注意:浮點運算誤差較大,而符號運算結(jié)果精確。 9、r=vpa(s):按Digit可控精度計算s的值。digits(n)可設定有效數(shù)值、vpa(s,d)指定s的精度為d為有效數(shù)值。 10、創(chuàng)建抽象函數(shù)的格式:f=sym('f(var1,var2,var3,···)') 11、用map命令創(chuàng)建抽象函數(shù): map(fcn,expr,arg1,arg2,···,argn) map(fcn,arg1,expr,arg2,···,argn)以上命令中,fcn:一個操作手續(xù)或者名稱;expr表達式;arg1:用于操作對象。 12、調(diào)用特殊函數(shù)可用mfun('函數(shù)')來調(diào)用。 13、函數(shù)計算器的使用:在命令欄中輸入funtool,打開操作器。 第一排按鈕是:df/dx:求函數(shù)的導數(shù) intf:求函數(shù)的積分 simplef:對函數(shù)f(x)化簡 numf:求函數(shù)的分子部分 denf:求函數(shù)的分子部分 1/f:求函數(shù)的倒數(shù) finv:求函數(shù)的反函數(shù)。swap:交換f和g的值。 1kz的積分。 在命令欄中輸入taylor可調(diào)出泰勒計算器。 第七章符號函數(shù)圖形的繪制 fplot(fun,lims,str,tol):直接繪制函數(shù)y=fun(x)的圖形其中l(wèi)ims為一個向量,若lims只包含兩個元素,則表示x軸的范圍;若lims包含四個元素則前兩個元素表示x軸的范圍,后兩個元素表示y的范圍。str可以指定圖形的線性和顏色。tol值小于一,代表相對誤差。 fplot(fun,lims,n):用最少為n+1個點來繪制函數(shù)fun的圖形。用fplot(@humps,[-1,5])來繪制函數(shù)humps的圖形比較光滑,其中@humps表示以函數(shù)句柄的形式引用函數(shù),若是直接輸入函數(shù),而不是函數(shù)名,則用單引號括起。 fplot('[tan(x),sin(x),cos(x)]',[-2*pi,2*pi])plot('sin(1/x)',[0.01 0.1],1e-3)ezplot()可繪制二元函數(shù): 1、ezplot(f):在默認區(qū)間x?(?2?,2?),上繪制函數(shù)f(x,y)的圖形。 2、ezplot(f,[a,b]):在區(qū)間x?(?2?,2?)上繪制函數(shù)圖形。對于隱函數(shù)f(x,y)來說,1、ezplot(f):在默認區(qū)間x?(?2?,2?),y?(?2?,2?)上繪制函數(shù)f(x,y)的圖形。 2、ezplot(f,[x1,x2,y1,y2]):在這兩個區(qū)間上繪制圖形f(x,y).3、Ezplot('u^2-v^2-1',[-3,2,-2,3])就是區(qū)間u?(-3,2),v?(-2,3)上繪制u^2-v^2-1=0的函數(shù)圖象,因為變量不是x,y所以區(qū)間按字母分配。 4、ezplot(x,y):在默認區(qū)間t?(0,2*pi)上繪制函數(shù)x=x(t)和函數(shù)y=y(t)的圖形。 5、ezplot(x,y,[tmin,tmax]):在區(qū)間(tmin,tmax)上繪制參數(shù)函數(shù)x=x(t),y=y(t)的圖形 ezpolar繪制極坐標下的圖形 ezpolar(f):在默認區(qū)間theta?(0,2?)上繪制函數(shù)rho=f(theta)的圖形,其中theta為極角,rho為極徑。 ezpolar(f,[a,b]):在區(qū)間theta?(a,b)上繪制函數(shù)rho=f(theta)的圖形。ezplot3繪制三維空間曲線 ezplot3(x,y,z):繪制三維曲線,含參數(shù)t.ezplot3(x,y,z,[tmin,tmax]):在區(qū)間t?(tmin,tmax)內(nèi)繪制三維曲線。ezplot3(x,y,z,[tmin,tmax],'animate'):產(chǎn)生空間曲線的動畫繪制效果。 1.function [center, r] = solve_circle(pt1, pt2, pt3) 2.%Effect: solve the circle which across points 'pt1', 'pt2' and 'pt3' 3.%Inputs: 4.%pt1, pt2, pt3: [x, y] 5.%center: the circle center [x0;y0] 6.%r: the radius of the circle 7.%Author: Su dongcai at 2012/1/2 8.A = zeros(2, 2);B = zeros(2, 1);9.[A(1, :), B(1)] = circle2line(pt1, pt2);10.[A(2, :), B(2)] = circle2line(pt2, pt3);11.center = AB; 12.r = norm(pt1'(y2^2 + y2^2)18.%(a-x2)^2 +(b-y2)^2 = r^2 | 19.%Inputs: 20.%pt1, pt2: [x1, y1], [x2, y2] 21.%Outputs: 22.%A: 2[x1-x2, y1-y2] 23.%B:(x1^2 + y1^2)pt2); 26.B = norm(pt1)^2-norm(pt2)^2; close all;clear;clc;>> i=imread('rice.png');%>> imshow(i);>> background=imopen(i,strel('disk',15));>> i2=imsubtract(i,background);%>> figure,imshow(i2);>> i3=imadjust(i2,stretchlim(i2),[0 1]);%>> figure,imshow(i3);>> level=graythresh(i3);>> bw=im2bw(i3,level);%>> figure,imshow(bw);>> [labeled,numobjects]=bwlabel(bw,4);graindata=regionprops(labeled,'all'); close all;clear;clc;i=imread('rice.png');background=imopen(i,strel('disk',15));i2=imsubtract(i,background);i3=imadjust(i2,stretchlim(i2),[0 1]);level=graythresh(i3);bw=im2bw(i3,level);[labeled,numobjects]=bwlabel(bw,4);data=regionprops(labeled,'all'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.2 close all;clear;clc;>> i=imread('r.jpg');%>> figure,imshow(i);>> imgray=rgb2gray(i);>> figure,imshow(imgray)>> background=imopen(imgray,strel('disk',15));>> i2=imsubtract(imgray,background);%>> figure,imshow(i2);>> i3=imadjust(i2,stretchlim(i2),[0 1]);%>> figure,imshow(i3);>> level=graythresh(i3);>> bw=im2bw(i3,level);%>> figure,imshow(bw);>> imnobord=imclearborder(bw,4);%>> figure,imshow(imnobord);>> [labeled,numobjects]=bwlabel(bw,4);>> rgb_label=label2rgb(labeled,@spring,'c','shuffle');>> figure,imshow(rgb_label);>> graindata=regionprops(labeled,'all');hold on;for k=1:numobjects lab=sprintf('%d',k);text(graindata(k).Centroid(1),graindata(k).Centroid(2),lab,'Color','k');end hold off;%剔除碎米粒 >> idxdown=find([graindata.Area]<150);%剔除碎米粒 little=ismember(labeled,idxdown);figure,imshow(little); [lab_little,num_little]=bwlabel(little,4);rgb_little=label2rgb(lab_little,@spring,'c','shuffle');figure,imshow(rgb_little); little_data=regionprops(lab_little,'all');hold on;for k=1:num_little lab=sprintf('%d',k);text(little_data(k).Centroid(1),little_data(k).Centroid(2),lab,'Color','k');end hold off;%>> graindata(idxdown,:)=[];%剔除碎米粒 %剔除連接米粒 >> idxup=find([graindata.Area]>250);%剔除連接米粒 big=ismember(labeled,idxup);figure,imshow(big); [lab_big,num_big]=bwlabel(big,4);rgb_big=label2rgb(lab_big,@spring,'c','shuffle');figure,imshow(rgb_big); big_data=regionprops(lab_big,'all');hold on;for k=1:num_big lab=sprintf('%d',k);text(big_data(k).Centroid(1),big_data(k).Centroid(2),lab,'Color','k');end hold off;%>> graindata(numup,:)=[];%剔除連接米粒 %獲取完整米粒 idxsuit=find([graindata.Area]>=150&[graindata.Area]<=250);suit=ismember(labeled,idxsuit);figure,imshow(suit);%獲取完整米粒 [lab_suit,num_suit]=bwlabel(suit,4);suit_data=regionprops(lab_suit,'all');hold on;for k=1:num_suit signature=sprintf('%d',k);text(suit_data(k).Centroid(1),suit_data(k).Centroid(2),signature,'Color','r');end hold off;%獲取完整米粒 whos graindata whos little_data whos big_data whos suit_data >> graindata >> mean([graindata.Area])>> mean([graindata.Eccentricity])>> mean([graindata.MajorAxisLength])>> mean([graindata.MinorAxisLength])>> mean([graindata.EquivDiameter])>> figure,hist([graindata.Area],20);>> figure,hist([graindata.Eccentricity],20);>> figure,hist([graindata.MajorAxisLength],20);>> figure,hist([graindata.MinorAxisLength],20);>> figure,hist([graindata.EquivDiameter],20); data=[graindata.Area] data=[graindata.Centroid] data=[graindata.BoundingBox] data=[graindata.SubarrayIdx] data=[graindata.MajorAxisLength] data=[graindata.MinorAxisLength] data=[graindata.Eccentricity] data=[graindata.Orientation] data=[graindata.ConvexHull] data=[graindata.ConvexImage] data=[graindata.ConvexArea] data=[graindata.Image] data=[graindata.FilledImage] data=[graindata.FilledArea] data=[graindata.EulerNumber] data=[graindata.Extrema] data=[graindata.EquivDiameter] data=[graindata.Solidity] data=[graindata.Extent] data=[graindata.PixelIdxList] data=[graindata.PixelList] Area 計算各個連通區(qū)域中的象素總數(shù) BoundingBox 包含相應區(qū)域的最小矩形 Centroid 給出每個區(qū)域的質(zhì)心 MajorAxisLength 與區(qū)域具有相同標準二階中心矩(又叫標準差)的橢圓的長軸長度 MinorAxisLength 與區(qū)域具有相同標準二階中心矩的橢圓的短軸長度 Eccentricity 與區(qū)域具有相同標準二階中心矩的橢圓的離心率 Orientation 與區(qū)域具有相同標準二階中心矩的橢圓的長軸與x軸的交角 Image 二值圖像,與某區(qū)域具有相同大小的邏輯矩陣。 FilledImage 與上相同,唯一區(qū)別是這是個做了填充的邏輯矩陣!本例中和上面的沒有區(qū)別,只有 區(qū)域有空洞時才有明顯差別。 FilledArea 是標量,填充區(qū)域圖像中的 on 像素個數(shù) ConvexHull 是p行2列的矩陣,包含某區(qū)域的最小凸多邊形 ConvexImage 二值圖像,用來畫出上述的區(qū)域最小凸多邊形 ConvexArea 是標量,填充區(qū)域凸多邊形圖像中的 on 像素個數(shù) EulerNumber 等于圖像中目標個數(shù)減去這些目標中空洞的個數(shù) Extrema 8行2列矩陣,八方向區(qū)域極值點 EquivDiameter 是標量,等價直徑:與區(qū)域具有相同面積的圓的直徑.計算公式為:sqrt(4*Area/pi) Solidity 是標量,同時在區(qū)域和其最小凸多邊形中的像素比例。計算公式為: Area/ConvexArea,這也是個仿射特征,實際上反映出區(qū)域的固靠性程度。 Extent 是標量,同時在區(qū)域和其最小邊界矩形中的像素比例。計算公式為:Area除以邊界矩 形面積,這也是個仿射特征,實際上反映出區(qū)域的擴展范圍程度。 PixelIdxList p元向量,存儲區(qū)域像素的索引下標 PixelList p行ndims(L)列矩陣,存儲上述索引對應的像素坐標 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 基于特定原則的區(qū)域選擇 當你要基于特定準則條件選擇某個區(qū)域時,將函數(shù) ismember 和 regionprops 聯(lián)合使用是很有用處的。例如:創(chuàng)建一個只包含面積大于80的二值圖像,用以下命令 idx = find([stats.Area] > 80);BW2 = ismember(L,idx);regionprops函數(shù)的擴展思路 在regionprops函數(shù)的基礎上,你可以使用它提供的基本數(shù)據(jù)來擴展它的功能,比如我就將區(qū)域的曲率數(shù)據(jù)和骨架數(shù)據(jù)作為它的另外屬性值來開發(fā),從而希望它能用來做更細致的特征提取。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.2 P221圖像粒度測定(雪花)>> i=imread('snowflakes.png');>> figure,imshow(i);>> %(2)>> clahei=adapthisteq(i,'numtiles',[10 10]);>> clahei=imadjust(clahei);>> imshow(clahei);>> gi=imadjust(im2double(i),[],[0 1]);>> figure,imshow(gi),title('adjusted grayscale image');>> %(3)>> se=strel('disk',10);>> topi=imtophat(gi,se);>> figure,imshow(topi),title('top-hat image');>> %(4)>> for counter=0:22 remain=imopen(clahei,strel('disk',counter));intensity_area(counter+1)=sum(remain(:));end >> figure,plot(intensity_area,'m-*'),grid on;>> title('sum of opening(pixels)');>> title('sum of opening values in opened image as a function of radius');>> xlabel('radius of opening(pixels)');>> ylabel('pixel value sum of opened objects(intensity)');>> >> >> >> for counter=0:20 remain=imopen(topi,strel('disk',counter));surfarea(counter+1)=sum(remain(:));end >> figure,plot(surfarea,'m-*'),grid on;>> set(gca,'xtick',[0 2 4 6 8 10 12 14 16 18 20]);>> title('surface area of opened objects as a function of radius');>> xlabel('radius of opening(pixels)');>> ylabel('surface area of opened objects(pixels)');>> %(5)>> intensity_area_prime=diff(intensity_area);>> figure,plot(intensity_area_prime,'m-*'),grid on;>> title('Granulometry(size distrubution)of snowflakes');>> set(gca,'xtick',[0 2 4 6 8 10 12 14 16 18 20 22]);>> xlabel('radius of snowflakes(pixels)');>> ylabel('sum of pixel values in snowflakes as a function of radius');>> derivsurfarea=diff(surfarea);>> figure,plot(derivsurfarea,'m-*'),grid on;>> title('granulometry(size distribution)of stars');>> xlabel('radius of stars(pixels)');>> ylabel('loss of pixels between two successive openings'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.2 花椒檢測 clc;clear;close all;i=imread('gj.jpg');imshow(i);icanny=edge(i,'canny');imshow(icanny);se90=strel('line',2,90);se0=strel('line',2,0);bwsdil=imdilate(icanny,[se90 se0]);figure,imshow(bwsdil),title('dilated');ifill=imfill(bwsdil,'holes');figure,imshow(ifill); %bwero=imerode(bwsdil,[se90 se0]);%figure,imshow(bwero);%i2fill=imfill(bwero,'holes');%figure,imshow(bwero);%imshow(i2fill); %bwnobord=imclearborder(bwsdil,4);%figure,imshow(bwnobord);bwnobord=imclearborder(ifill,4);figure,imshow(bwnobord);se=strel('disk',5);bwc=imclose(bwnobord,se);bwco=imopen(bwnobord,se);figure,imshow(bwc);figure,imshow(bwco);%mask=bwsdil&bwco;%figure,imshow(mask);clc [labeled,numobjects]=bwlabel(bwco);numobjects jdata=regionprops(labeled,'all');%jdata jarea=[jdata.Area];mean(jarea)max(jarea)min(jarea)hist(jarea,255)jdata.Eccentricity %std([jdata.Eccentricity])/(Mean([jdata.Eccentricity])jstd=std([jdata.Eccentricity])jmean=Mean([jdata.Eccentricity])jcv=jstd/jmean >> std([jdata.Area])/ mean([jdata.Area])%面積的變異系數(shù) >> std([jdata.Eccentricity])/ mean([jdata.Eccentricity])%橢圓的變異系數(shù) >> std([jdata.MajorAxisLength])/ mean([jdata.MajorAxisLength])>> std([jdata.MinorAxisLength])/ mean([jdata.MinorAxisLength])>> std([jdata.EquivDiameter])/ mean([jdata.EquivDiameter]) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.06.06 rice.png close all;clear;clc >> i=imread('rice.png');imshow(i);background=imopen(i,strel('disk',15));figure,imshow(background);i2=imsubtract(i,background);figure,imshow(i2);i3=imadjust(i2,stretchlim(i2),[0 1]);figure,imshow(i3);level=graythresh(i3);bw=im2bw(i3,level);figure,imshow(bw);imnobord=imclearborder(bw);[label,numobjects]=bwlabel(imnobord,4);numobjects rgb_label=label2rgb(label,@spring,'c','shuffle');figure,imshow(rgb_label);graindata=regionprops(label,'all');graindata >> numdown=find([graindata.Area]<150);>> graindata(numdown,:)=[];>> numup=find([graindata.Area]>250);>> graindata(numup,:)=[];>> graindata >> std([graindata.Area])/ mean([graindata.Area])%面積的變異系數(shù) >> std([graindata.Eccentricity])/ mean([graindata.Eccentricity])%橢圓的變異系數(shù) >> std([graindata.MajorAxisLength])/ mean([graindata.MajorAxisLength])>> std([graindata.MinorAxisLength])/ mean([graindata.MinorAxisLength])>> std([graindata.EquivDiameter])/ mean([graindata.EquivDiameter])%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.06.06 rice的堊白度檢測 >> clear;close all;clc;>> rgb=imread('r.jpg');>> close all;>> imshow(rgb);>> i=rgb2gray(rgb);>> j=medfilt2(i,[5 5]);>> figure,imshow(i);>> figure,imshow(j);>> imhist(j,256);>> t=0.3;>> v=imadjust(j,[t 1],[],1);>> imhist(v,256);>> t_c=0.6;>> bw_v=im2bw(v,0.01);>> chalk=imadjust(v,[t_c 1],[],1);>> bw_chalk=im2bw(chalk,0.01);>> figure,imshow(v);>> figure,imshow(bw_v);>> figure,imshow(chalk);>> figure,imshow(bw_chalk);>> degree_chalkness=bwarea(bw_chalk)/bwarea(bw_v)*100 >> bw=im2bw(j,t);>> figure,imshow(bw);>> se=(ones(3,3));>> bw1=imerode(bw,se);%兩次腐蝕 >> figure,imshow(bw1);>> bw2=imerode(bw1,se);>> figure,imshow(bw2); >> [l,num]=bwlabel(bw2);%標記腐蝕后的大米圖像 >> t_chalk=100;%設置堊白面積的下限 >> compare=(l)&(chalk>t_chalk);%>> compare=(bw2)&(bw_chalk>t_chalk);>> [r,c]=find(compare);%標記堊白米粒的位置 >> result=bwselect(l,c,r);%顯示只含有堊白米粒的圖像 >> figure,imshow(result); >> [l_chalk,num_chalk]=bwlabel(result);%標記堊白米粒圖像,便于計數(shù) >> rate_chalky_grains=num_chalk/num*100;>> rate_chalky_grains %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.17 bwmorph函數(shù) >> help bwmorph BWMORPH Perform morphological operations on binary image.BW2 = BWMORPH(BW1,OPERATION)applies a specific morphological operation to the binary image BW1.BW2 = BWMORPH(BW1,OPERATION,N)applies the operation N times.N can be Inf, in which case the operation is repeated until the image no longer changes.OPERATION is a string that can have one of these values: 'bothat' Subtract the input image from its closing 'bridge' Bridge previously unconnected pixels 'clean' Remove isolated pixels(1's surrounded by 0's)'close' Perform binary closure(dilation followed by erosion)'diag' Diagonal fill to eliminate 8-connectivity of background 'dilate' Perform dilation using the structuring element ones(3)'erode' Perform erosion using the structuring element ones(3)'fill' Fill isolated interior pixels(0's surrounded by 1's)'hbreak' Remove H-connected pixels 'majority' Set a pixel to 1 if five or more pixels in its 3-by-3 neighborhood are 1's 'open' Perform binary opening(erosion followed by dilation)'remove' Set a pixel to 0 if its 4-connected neighbors are all 1's, thus leaving only boundary pixels 'shrink' With N = Inf, shrink objects to points;shrink objects with holes to connected rings 'skel' With N = Inf, remove pixels on the boundaries of objects without allowing objects to break apart 'spur' Remove end points of lines without removing small objects completely.'thicken' With N = Inf, thicken objects by adding pixels to the exterior of objects without connected previously unconnected objects 'thin' With N = Inf, remove pixels so that an object without holes shrinks to a minimally connected stroke, and an object with holes shrinks to a ring halfway between the hold and outer boundary 'tophat' Subtract the opening from the input image Class Support-------------The input image BW1 can be numeric or logical.It must be 2-D, real and nonsparse.The output image BW2 is logical.Examples--------BW1 = imread('circles.png');imview(BW1)BW2 = bwmorph(BW1,'remove');BW3 = bwmorph(BW1,'skel',Inf);imview(BW2)imview(BW3) See also erode, dilate, bweuler, bwperim.Reference page in Help browser doc bwmorph BW1 = imread('circles.png');figure,imshow(BW1)BW2 = bwmorph(BW1,'erode');figure,imshow(BW2) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %邊界提取 b=bwmorph(bw,'remove');b=bwperim(bw,8);%又叫邊界象素測定 b=edge(bw,'canny');%又叫邊界提取 %去除孤立象素點 nosinglepixel=bwmorph(bw,'clean');%去除小面積物體 nosmall=bwareaopen(bw,CNN);%閾值處理再取反 bw=~im2bw(i,graythresh(i)); %開運算(消除小物體)與閉運算(填充物體內(nèi)細小空洞)se=strel('disk',6);iopen=imopen(bw,se);iclose=imclose(bw,se);%腐蝕與膨脹聯(lián)合操作 %(1)創(chuàng)建結(jié)構(gòu)元素 se=strel('rectangle',[40 30]);%(2)使用結(jié)構(gòu)元素腐蝕圖像 bw1=imread('circbw.tif');bw2=imerode(bw1,se);imshow(bw2);%(3)逆操作,回復矩形原來大小 bw3=imdilate(bw2,se);figure,imshow(bw3); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.18花椒子 %直接對灰度圖進行canny運算 >> i=imread('nut.bmp');>> figure,imshow(i);>> ig=rgb2gray(i);>> figure,imshow(ig);%igcanny=edge(ig,'canny');%igcfill=imfill(igcanny,'hole');igcanny_thresh=edge(ig,'canny',(graythresh(ig)*.1));igcfill=imfill(igcanny_thresh,'hole');>> figure,imshow(igcfill); %先對灰度圖濾波,再進行canny運算 >> imed=medfilt2(ig);%中值濾波后對圖像邊界有一定的損傷!!>> imedcanny=edge(imed,'canny');>> imedfill=imfill(imedcanny,'hole');>> figure,imshow(imedfill);>> nosmall=bwareaopen(imedfill,150);>> figure,imshow(nosmall); %注意:若對灰度圖像先拉氏銳化,在canny提取邊界,效果不大好?。?結(jié)論:無需拉氏銳化,也不必中值濾波,可直接canny提取邊界?。?> ifill=igcfill|imedfill;>> figure,imshow(ifill);>> nosmall=bwareaopen(ifill,150);>> figure,imshow(nosmall); %當t=0.55時,閾值處理再canny運算的效果 >> imhist(ig);>> t=0.55;>> v=imadjust(ig,[0 t],[],1);>> vcanny=edge(v,'canny');>> vfill=imfill(vcanny,'hole');>> figure,imshow(vfill);>> ifill=igcfill|vfill;>> figure,imshow(ifill);>> nosmall=bwareaopen(ifill,150);>> figure,imshow(nosmall); %當t=0.6時,閾值處理再canny運算的效果的效果 >> t=0.6;>> v=imadjust(ig,[0 t],[],1);>> vcanny=edge(v,'canny');>> vfill=imfill(vcanny,'hole');>> figure,imshow(vfill);>> ifill=igcfill|vfill;>> figure,imshow(ifill);>> nosmall=bwareaopen(ifill,150);>> figure,imshow(nosmall); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %處理花椒子 >> i=imread('nut.bmp');%figure,imshow(i);ig=rgb2gray(i);figure,imshow(ig);>> imed=medfilt2(ig);imedcanny=edge(imed,'canny');imedfill=imfill(imedcanny,'hole');%figure,imshow(imedfill);nosmall=bwareaopen(imedfill,150);>> figure,imshow(nosmall);>> [labeled,numobjects]=bwlabel(nosmall,4);>> rgb_label=label2rgb(labeled,@spring,'c','shuffle');%>> figure,imshow(rgb_label);>> nutdata=regionprops(labeled,'all');>> min([nutdata.Solidity]) >> rectangle('Position', [253.5000 207.5000 26.0000 28.0000])%畫矩形 >> rectangle('Position', [250.5000 50.5000 27.0000 26.0000])>> figure,imshow(nutdata(1).Image)%只顯示1號物體的圖像 >> figure,imshow(nutdata(1).ConvexImage)%畫出1號物體的凸多邊形 >> std([nutdata.Eccentricity])/ mean([nutdata.Eccentricity])std([nutdata.Area])/ mean([nutdata.Area])std([nutdata.Solidity])/ mean([nutdata.Solidity])>> std([nutdata.Centroid])/ mean([nutdata.Centroid])std([nutdata.MajorAxisLength])/ mean([nutdata.MajorAxisLength])std([nutdata.MinorAxisLength])/ mean([nutdata.MinorAxisLength])std([nutdata.Orientation])/ mean([nutdata.Orientation])std([nutdata.EquivDiameter])/ mean([nutdata.EquivDiameter])std([nutdata.Extent])/ mean([nutdata.Extent])std([nutdata.Extrema])/ mean([nutdata.Extrema]) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %處理花椒皮 close all;clc;clear;>> i=imread('p.bmp');imshow(i);ig=rgb2gray(i);figure,imshow(ig);imed=medfilt2(ig);imedcanny=edge(imed,'canny');figure,imshow(imedcanny);>> se90=strel('line',2,90);se0=strel('line',2,0);bwsdil=imdilate(imedcanny,[se90 se0]);figure,imshow(bwsdil),title('dilated');ifill=imfill(bwsdil,'holes');figure,imshow(ifill);>> bwero=imerode(ifill,[se90 se0]);>> figure,imshow(bwero);>> nosmall=bwareaopen(bwero,150,4);>> figure,imshow(nosmall);>> nobord=imclearborder(nosmall,4);>> figure,imshow(nobord);>> [labeled,numobjects]=bwlabel(nobord,4);>> numobjects >> pdata=regionprops(labeled,'all');>> max([pdata.Solidity])>> std([pdata.Solidity])/mean([pdata.Solidity]) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %處理混合圖像 >> clear;clc;close all;>> i=imread('m.bmp');%>> figure,imshow(i);>> ig=rgb2gray(i);figure,imshow(ig);imed=medfilt2(ig);%>> figure,imshow(imed);imedcanny=edge(imed,'canny');%>> figure,imshow(imedcanny);>> se90=strel('line',2,90);se0=strel('line',2,0);bwsdil=imdilate(imedcanny,[se90 se0]);%figure,imshow(bwsdil),title('dilated');ifill=imfill(bwsdil,'holes');%figure,imshow(ifill);bwero=imerode(ifill,[se90 se0]);%figure,imshow(bwero);>> nosmall=bwareaopen(bwero,150,4);%figure,imshow(nosmall);nobord=imclearborder(nosmall,4);figure,imshow(nobord);>> [labeled,numobjects]=bwlabel(nobord,4);>> numobjects >> rgb_label=label2rgb(labeled,@spring,'c','shuffle');figure,imshow(rgb_label);>> mexdata=regionprops(labeled,'all');hold on;%以下內(nèi)容畫在同一figure中 centr=[mexdata.Centroid];%尋找重心位置 nums=1:numobjects;for k = 1:numobjects soli=mexdata(k).Solidity;soli_string=sprintf('%2.2f',soli);%等價于轉(zhuǎn)字符串 % signal=num2str(nums(k));signal=sprintf('%d',k);%直接使用打印語句打印序號 text(centr(2*k-1),centr(2*k),signal)%按序標記物體 text(centr(2*k-1)-30,centr(2*k)-30,soli_string)%標注每個Solidity值 end for k=1:numobjects plot(mexdata(k).ConvexHull(:,1),mexdata(k).ConvexHull(:,2),...'b','Linewidth',2)end %畫出1和2號物體的外接矩形 %>> rectangle('position',[9.5000 224.5000 62.0000 63.0000])%>> rectangle('position',[65.5000 141.5000 34.0000 39.0000])%畫出每個物體的外接矩形 bb=[mexdata.BoundingBox];for k=1:numobjects rectangle('position',[bb(4*k-3)bb(4*k-2)bb(4*k-1)bb(4*k)])end %>> figure,imshow(mexdata(1).Image)%只顯示1號物體的圖像 %>> figure,imshow(mexdata(1).ConvexImage)%畫出1號物體的凸多邊形 %>> figure,imshow(mexdata(2).Image)%只顯示2號物體的圖像 %>> figure,imshow(mexdata(2).ConvexImage)%畫出2號物體的凸多邊形 %畫出單個物體的凸多邊形的填充圖形 for k=1:numobjects figure,imshow(mexdata(k).ConvexImage)end %只顯示Solidity>0.92的物體的圖像 >> idx = find([mexdata.Solidity] > 0.92);>> BW2 = ismember(labeled,idx);>> figure,imshow(BW2) >> mexdata=regionprops(labeled,'all');>> %只顯示Solidity<0.92的物體的圖像 idx = find([mexdata.Solidity] < 0.92);bw2 = ismember(labeled,idx);figure,imshow(bw2)%mexdata.Solidity; >> numdown=find([mexdata.Solidity]<0.92);mexdata(numdown,:)=[];>> mexdata %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.19 %roipoly函數(shù)的用法 I = imread('eight.tif');c = [222 272 300 270 221 194];r = [21 21 75 121 121 75];BW = roipoly(I,c,r);imview(I), imview(BW) %可以使用下面的方法創(chuàng)建相應的向量: regionprops(L,'Area');allArea = [stats.Area]; %創(chuàng)建一個只包含面積大于80的二值圖像 idx = find([stats.Area] > 80);BW2 = ismember(L,idx); %只顯示某個下標所對應的物體圖像 bw2=ismember(L,N);figure,imshow(bw2); %在調(diào)用regionprops之前必須將二值圖像轉(zhuǎn)變?yōu)闃俗⒕仃?L = bwlabel(BW);%或者 L = double(BW); %將matlab數(shù)據(jù)寫到excel中 a=ones(3);success = xlswrite('c:/matlab/work/myworkbook.xls',a,'A2:C4')%將行矩陣轉(zhuǎn)換為列矩陣 a=[1 2 3 4 5 6];b=transpose(a); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %2006.6.22球形物體的檢測和標識(循環(huán)檢測和標識算法)clc;clear;close all;%Step 1: Read image %Step 2: Threshold the image %Step 3: Remove the noise %Step 4: Find the boundaries %Step 5: Determine which objects are round >> RGB = imread('pillsetc.png');imshow(RGB)>> I = rgb2gray(RGB);threshold = graythresh(I);bw = im2bw(I,threshold);imshow(bw)>> % remove all object containing fewer than 30 pixels bw = bwareaopen(bw,30);>> figure,imshow(bw)>> % fill a gap in the pen's cap se = strel('disk',2);bw = imclose(bw,se);>> figure,imshow(bw)>> % fill any holes, so that regionprops can be used to estimate % the area enclosed by each of the boundaries bw = imfill(bw,'holes');>> figure,imshow(bw)>> [B,L] = bwboundaries(bw,'noholes');>> % Display the label matrix and draw each boundary figure,imshow(label2rgb(L, @jet, [.5.5.5]))>> hold on for k = 1:length(B)boundary = B{k};plot(boundary(:,2), boundary(:,1), 'w', 'LineWidth', 2)end >> stats = regionprops(L,'Area','Centroid');>> stats = regionprops(L,'Area','Centroid');threshold = 0.94;% loop over the boundaries for k = 1:length(B)% obtain(X,Y)boundary coordinates corresponding to label 'k' boundary = B{k};% compute a simple estimate of the object's perimeter delta_sq = diff(boundary).^2;perimeter = sum(sqrt(sum(delta_sq,2))); % obtain the area calculation corresponding to label 'k' area = stats(k).Area; % compute the roundness metric metric = 4*pi*area/perimeter^2; % display the results metric_string = sprintf('%2.2f',metric);% mark objects above the threshold with a black circle if metric > threshold centroid = stats(k).Centroid;plot(centroid(1),centroid(2),'ko');end text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...'FontSize',14,'FontWeight','bold');end >> title(['Metrics closer to 1 indicate that ',...'the object is approximately round']); 實訓小結(jié) 為期一周的MATLAB實訓在學習與忙碌中度過了,時間雖短,但我們卻真真切切的學到了知識,在現(xiàn)實工作中可以運用的知識。 在第一節(jié)課,我們便了解到MATLAB是世界上最流行的、應用最廣泛的工程計算和仿真軟件,它將計算、可視化和編程等功能同時集于一個易于開發(fā)的環(huán)境。MATLAB主要應用于數(shù)學計算、系統(tǒng)建模與仿真、數(shù)學分析與可視化、科學與工程繪圖和用戶界面設計等。對MATLAB的系統(tǒng)結(jié)構(gòu)和特點等,老師也向我們做出了大致的講解,同時,我們知道了MATLAB程序的一些最基本的應用和運算,并能夠進行一些簡單的編程。就這樣,實訓的第一天大家都在期待和興奮中度過。 接下來的時間,主要是以大家自學和練習為主,老師進行輔導和考察。在學習過程中,不懂的可以相互之間小聲的討論,也可向老師請教,但必須確保自己真正學到了知識,認真的看書并進行編程練習。一天的學習接近尾聲時,就是老師考察大家一天的收獲的時候了,老師總會出一些小題目讓大家編出它的程序,雖然有的題目對我們來說還是有些難度的,但是在老師的指點下我們還是編出程序的,當我們看到自己編的程序運行正確時,總是會萬分的興奮,充滿成就感。 就這樣,僅僅一個星期的實訓就結(jié)束了,雖然不能十分熟悉和運用MATLAB的所有程序,但是我們卻打下了一定的基礎,在以后,當我們真正開始深入學習這門學問時,我們對它將不會再那么陌生,學起來也將輕松許多。這次實訓為我們提供了一個很好的學習機會,唯一不足的就是時間有點短,我們不能在這段時間里學到更多的知識,因此,在這一周打下的基礎上,我們需要用自己的努力去自學,以獲取更多的知識。 知識是無窮無盡的,知識的獲取需要一顆上進的心,老師將我們領進了門,下面的路就應該我們自己去走,即是充滿荊棘,也要努力奮斗往前沖。 MatLab基礎知識小結(jié)來源: 吳學簫的日志 matlab常用到的永久變量。ans:計算結(jié)果的默認變量名。i j:基本虛數(shù)單位。 eps:系統(tǒng)的浮點(F10a9Bg個oht): inf: 無限大,例1/0 nan NaN:非數(shù)值(N航a nmnb謝)pi:圓周率n(n=3.1415926..)。realmax:系統(tǒng)所能表示的最大數(shù)值。realmin: 系統(tǒng)所能表示的最小數(shù)值,nargin: 函數(shù)的輸入?yún)?shù)個數(shù): nargout:函數(shù)的輸出多數(shù)個數(shù) ①matlab的所有運算都定義在復數(shù)城上。對于方根問題運算只返回處于第一象限的解。 ⑦matlab分別用左斜/和右來表示“左除和“右除”運算。對于標量運算而言,這兩者的作用沒有區(qū)別:但對于矩陣運算來說,二者將產(chǎn)生不同的結(jié)果。 多項式的表示方法和運算 p(x)=x^3-3x-5 可以表示為p=[1 0 –3 5],求x=5時的值用plotval(p,5)也可以求向量:a=[3 4 5],plotval(p,a)函數(shù)roots求多項式的根 roots(p)p=[1 0-3 5];r=roots(p)由根重組多項式poly(根)q=poly(r)real(q)有時會產(chǎn)生虛根,這時用real抽取實根即可 conv(a,b)函數(shù) 多項式乘法(執(zhí)行兩個數(shù)組的卷積)a=[1 2 3 4];b=[1 4 9 16];c=conv(a,b)多項式的加減法,低階的多項式必須用首零填補,使其與高階多項式有同樣的階次 多項式除法 [q , r]=deconv(c , b)表示b/c q為商多項式,r為余數(shù) 多項式的導數(shù) polyder(f)f=[ 2 4 5 6 2 1];s=polyder(f) 多項式的曲線擬合 x=[1 2 3 4 5];y=[5.6 40 150 250 498.9];p=polyfit(x,y,n)數(shù)據(jù)的n次多項式擬合 poly:矩陣的特征多項式、根集對應的多項式 x2=1:0.1:5;n取1時,即為最小二乘法 y2=polyval(p,x2);計算多項式的值(polyvalm計算矩陣多項式)plot(x,y,'*',x2,y2);grid on 最小二乘法 x=[1 2 3 4 5];y=[5.6 40 150 250 498.9];plot(x,y,’*’),lsline 多項式插值(p158) YI=interp1(x,y,XI,’method’)一維插值 (XI為插值點的自變量坐標向量,可以為數(shù)組或單個數(shù)。method為選擇插值算法的方法,包括: linear(線性插值)cubic(立方插值)spline(三次樣條插值)nearst(最近臨插值) 例如:人口預測 year=1900:10:1900;number=[78 91 105 ?.每十年的人口數(shù)];x=1900:1:2000;y=interp1(year,number,x,’spline’);plot(year,numeber,’*’,x,y);grid on 一維博里葉變換插值使用函數(shù)interpft實現(xiàn),計算含有周期函數(shù)值的矢量的傅里葉變換 然后使用更多的點進行傅里葉變換的逆變換,函數(shù)的使用格式如下:y=interpft(x,n)其中x是含有周期函數(shù)值的矢量,并為等距的點,n為返同等間距點的個數(shù)。 求解一元函數(shù)的最小值 y=fminbnd('humps',0.3,1)humps為一內(nèi)置函數(shù) 求解多元函數(shù)的最小值 函數(shù)fminserch用于求多元函數(shù)的最小值。它可以指定一個開始的矢量,并非指定一個區(qū)間。此函數(shù)返回一個矢量為此多元函數(shù)局部最小函數(shù)值對應的自變量 紋理成圖功能 由warp函數(shù)的紋理成圖功能實現(xiàn)平面圖像在空間三維曲面上的顯示。將文件名為flowers.tif的圖像分別投影到圓柱形和球星表面上 i=imread('flowers.tif');[x,y,z]=cylinder;subplot(1,2,1),warp(x,y,z,i);[x,y,z]=sphere(50);subplot(1,2,2),warp(x,y,z,i);warp(x,y,z,i);求函數(shù)的零點 求函數(shù)humps在[1,2]區(qū)間上的零點 fzero(‘humps’,[1,2]);也可以給一個初始值 fzero(‘humps’,0.9);對于多項式可直接由roots求其根 roots(‘4*x^3+……’);也可以用solve c=sym('c','real');x=sym('x','real');s=solve(x^3-x+c) 函數(shù)定積分 q=quadl(‘humps’,0,1)求humps函數(shù)在0 1區(qū)間上的定積分,也可以用quad語句 二重積分 首先計算內(nèi)積分,然后借助內(nèi)積分的中間結(jié)果再求出二重積分的值,類似于積分中的分步積分法。Result=dblquad(‘integrnd’,xin,xmax.,ymin,ymax)integrnd為被積函數(shù)的名稱字符串 符號積分運算int(f)最精確的是符號積分法 計算s=∫12[∫01xydx]dy syms x y 中間為空格,不能為逗號 s=int(int(‘x^y’,’x’,0,1),’y’,1,2)引號可省略 vpa(s)顯示s的值 內(nèi)積分限為函數(shù)的二重積分 I=∫14[∫√y2(x2+y2)dx]dy 符號法I=vpa(int(int(‘x^2+y^2’,’x’,sqrt(y),2),’y’,1,4) 微分運算(diff) 微分是描述一個函數(shù)在一點處的斜率,是函數(shù)的微觀性質(zhì)、因此積分對函數(shù)的形狀在小范圍內(nèi)的改變不敏感,而微分很敏感?!獋€函數(shù)的小的變化,容易產(chǎn)生相鄰點的斜率的大的改變。由干微分這個固有的困難.所以盡可能避免數(shù)值微分.特別是對實驗獲得的數(shù)據(jù)進行微分。在這種情況,最好用最小二乘曲線擬合這種數(shù)據(jù),然后對所得到的多項式進行微分;或用另一種方法對點數(shù)據(jù)進行三次樣條擬合,然后尋找樣條微分,但是,有時微分運算是不能避免的,在MATLAB中.用函數(shù)diff汁算一個矢量或者矩陣的微分(也可以理解為差分)。 a=[1 2 3 3 3 7 8 9];b=diff(a)一次微分 bb=diff(a,2)二次微分 實際上diff(a)=[a(2)-a(1),a(3)-a(2),??,a(n)-a(n-1)] 對于求矩陣的微分,即為求各列矢量的微分,從矢量的微分值可以判斷矢量的單調(diào)性、是否等間距以及是否有重復的元素。符號微分運算(diff)syms x t a f =cos(a*x)df =diff(f)由findsym的規(guī)則,隱式的指定對x進行微分 dfa=diff(f,'a')指定對變量a進行微分 dfa=diff(f,'a',3)三次微分 diff函數(shù)不僅作用在標量上,還可以在矩陣上,運算規(guī)則就是按矩陣的元素分別進行微分 syms a x A=[cos(a*x),sin(a*x),-sin(a*x),cos(a*x)];dA=diff(A)微分方程dsolve 在matlab中,符號表達式中包含字母D用來表示微分運算,D2,D3分別對應第二,第三階導數(shù),D2y表示d2y/dt2 把t缺省了 y=dsolve(‘Dy=f(y)’)單個方程,單個輸出 [u,v]=dsolve(‘Du=f(u,v)’,’Dv=g(u,v)’)2個方程,2個輸出 s=dsolve(‘Dx=f(x,y,z)’,’Dy=g(x,y,z)’,’Dz=k(x,y,z)’)s.x s.y s.z 3個方程,架構(gòu)數(shù)組 dsolve('Dx=-a*x')結(jié)果:C1*exp(-a*t)沒給定初值,所以結(jié)果中含參變量 x=dsolve('Dx=-a*x','x(0)=1','s')結(jié)果exp(-a*s)給定了初值,獨立變量設為s 計算多元函數(shù)的梯度 fx=gradient(f)f是一個矢量返回f的一維數(shù)值梯度,fx對應于x方向的微分。 [x,y]=meshgrid(-2:.2:2,-2:.2:2);z=x.*exp(-x.^2-y.^2);[px,py]=gradient(z,.2,.2);contour(z),hold on 畫等值線 quiver(px,py) matlab字符串運算 利用sym命令創(chuàng)建表達式 f=sym(‘cos(x)+sin(x)’)或 syms x , f=cos(x)+sin(x)diff(f)求其導數(shù) (也可直接用命令f=diff(‘cos(x)+cos(y)’) 當字符表達式中含有多于一個的變量時,只有—個變量是獨立變量。如果不告訴matlab哪一個變量是獨立變量,則可以通過findsym命令詢問 利用findsym命令查詢獨立變量 f=sym('sin(a*x)+b')findsym(f,1)給出獨立變量(一個變量,如果為2則給出2個變量)findsym(f)給出所有變量 符號表達式的化簡和替換 collect函數(shù) collect(f,v)表示將f表示為關于符號變量v的多項式形式,即關于v合并同類項,v缺省,則用findsym確定的缺省變量 syms x y f=x^2*y+y*x-x^2-2*x+1 collect(f)得到(-1+y)*x^2+(y-2)*x+1 collect(f,y)得到(x+x^2)*y+1-x^2-2*x expand函數(shù) expand(f)將f展開,寫成和的形式 syms x expand((x-1)^3)得到x^3-3*x^2+3*x-1 horner函數(shù) horner(f)將f寫成鑲嵌套形式 syms x horner(x^3-6*x^2)得到(-6+x)*x^2 factor函數(shù) factor(f)將f轉(zhuǎn)換成低階有理多項式的乘積 syms x f=x^3-6*x^2+11*x-6 factor(f)得到(x-1)*(x-2)*(x-3)simplify(f)函數(shù) 綜合化簡 simple(f)函數(shù)的最簡形式 syms x f=2*sin(x^2)+cos(3*x)simple(f)如果不想看到中間過程,可z=simple(f)有時使用兩次simple命令可以得到最簡式 如果想知道哪個簡化命令得到最后結(jié)果,可以加一個參數(shù)how [z,how]=simple(f) 符號表達式的替換 subs(f,new,old)f='a*x^2+b*x+c' subs(f,'t','x')得到a*(t)^2+b*(t)+c subs是一個符號函數(shù),返回一個符號變量 subexpr函數(shù) 有時matlab返回的符號表達式難以理解,用subexpr函數(shù),可以將表達式中重復出現(xiàn)的子式用一個符號表示,從而簡化表達形式 c=sym('c','real');x=sym('x','real');s=solve(x^3-x+c)a=subexpr(s)得到sigma =-108*c+12*(-12+81*c^2)^(1/2)a = [ 1/6*sigma^(1/3)+2/sigma^(1/3)] [-1/12*sigma^(1/3)-1/sigma^(1/3)+1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))] [-1/12*sigma^(1/3)-1/sigma^(1/3)-1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))] pretty函數(shù)有時也能起到同樣的作用。Pretty(f)顯示函數(shù)的習慣書寫形式 線性方程組的求解 求解線性方程組,用反斜杠 a=hilb(3)b=[1 2 3]' ab 矩陣的特征值和特征向量 用eig(v,d)函數(shù),[v,d]=eig(A);其中d將返回特征值,v返回相應的特征向量,缺省第二個參數(shù)將只返回特征值 syms a b c real A=[a b c;b c a;c a b];[v,d]=eig(A); 為了觀察更清楚,使用以前學過的替換函數(shù),這里不用默認的sigma,而改用M,顯式的代替繁瑣的表達子式 vv=subexpr(v);vs=subs(vv,'m','sigma')運行結(jié)果為 vs = [ 1, 1, 1] [-(c+(m)-a)/(c-b),-(c-(m)-a)/(c-b), 1] [-(a-(m)-b)/(c-b),-(a+(m)-b)/(c-b), 1] 再用m替換d中的表達子式 dd=subexpr(d);ds=subs(dd,’m’,’sigma’)運行結(jié)果為ds = [(m), 0, 0] [ 0,-(m), 0] [ 0, 0, c+a+b] note 求特征值也可用以下命令 f=poly(A)poly函數(shù) 用來求A的特征多項式 d=solve(f)solve(f)函數(shù)用來求多項式的解 svd()函數(shù) 求矩陣的奇異值分解,將矩陣分解為兩個正交矩陣和對角矩陣的乘積 a=sym(hilb(2))[u,s,v]=svd(a) 代數(shù)方程和方程組 代數(shù)方程的求解可用solve(f)命令,如果f不含=,matlab將給表達式置零。方程的未知量在默認的情況下由findsym決定或顯式指出 syms a b c x solve(a*x^2+b*x+c)以x為默認變量 solve(a*x^2+b*x+c,a)指定對a為變量 求含有等號的方程的解(一定要加單引號)f=solve(‘cos(x)=sin(x)’) x=solve('exp(x)=tan(x)')如果不能求得符號解,就計算可變精度解。求解方程組與單方程類似 解一個三元一次方程 v=solve('a*u^2+v^2','u-v=1','a^2-5*a+6')結(jié)果為v = a: [4x1 sym] u: [4x1 sym] v: [4x1 sym] 一些常用的符號運算 極限運算limit limit(f)求x到0的極限 limit(f,x,a)或limit(f,a)求x到a的極限 limit(f,a,’left’)limit(f,a,’right’)求x到a的左極限和右極限 limit(f,inf)求x趨于無窮的極限 符號求和symsum(s)symsum(s)以默認的findsym決定的變量求和 symsum(s,v)以s中指定的變量v求和 symsum(s,a,b)symsum(s,v,a,b)從a到b的有限項求和 syms k n symsum(k)從0到k求和 symsum(k,0,n-1)從0到n-1求和 symsum(1/k^2,1,inf)無限項求和 泰勒級數(shù)taylor(f)taylor(f)表示求f的5階talor展開,可以增加參數(shù)指定展開的階數(shù)(默認式5),也可以對于多元函數(shù)指定展開的變量,還可以指定在哪個點展開 syms x t taylor(exp(-x))taylor(log(x),6,1)在1點的6階taylor展開 taylor(x^t,3,t)對t的3階taylor展開 積分變換 fourier變換和逆變換fourier(f) fourier分析可以將信號轉(zhuǎn)換為不同頻率的正弦曲線??蓪﹄x散數(shù)據(jù)進行分析,也可對連續(xù)時間系統(tǒng)進行分析,特別在信號和圖形處理領域。離散變換(DFT)作用于有限數(shù)據(jù)的采集,最有效的是快速fourier變換(FFT) F=fourier(f)獨立變量x,返回關于參數(shù)w的函數(shù) F=fourier(f,v)返回函數(shù)F關于符號對象v的函數(shù) F=fourier(f,u,v)對關于u的函數(shù)f進行變換,而不是缺省的w,返回函數(shù)F是關于v的函數(shù) syms t v w x fourier(1/t)fourier(exp(-t)*sym('Heaviside(t)'),v)fourier(diff(sym('F(x)')),x,w)Fourier逆變換 f=ifourier(F)缺省獨立變量w,返回關于x的函數(shù)對w進行積分 f=ifourier(F,v)返回函數(shù)f是關于符號對象v的函數(shù),而不是缺省的x f=ifourier(F,u,v)是關于u的函數(shù)f進行變換,而不是缺省的x,返回函數(shù)f是關于v的函數(shù) Laplace變換和逆變換laplace(f)應用于連續(xù)系統(tǒng)(微分方程)中,可以用來求解微分方程的初值問題 laplace(F)缺省獨立變量t,缺省返回關于s的函數(shù)L laplace(F,t)返回關于t的函數(shù)L,而不是缺省的s laplace(F,w,z)對函數(shù)F的自變量w積分,返回關于z的函數(shù)L 逆變換 F=ilaplace(L)缺省獨立變量s,返回關于t的函數(shù)F F=ilaplace(L,y)返回關于y的函數(shù)F,而不是缺省的t F=ilaplace(L,y,x)對函數(shù)L的自變量y積分,返回關于x的函數(shù)F Z-變換和逆變換ztrans(f)標量符號f的Z-變換 F=ztrans(f)缺省獨立變量n,返回關于z的函數(shù) F=ztrans(f,w)返回關于符號變量w的函數(shù)F,而不是缺省的z F=ztrans(f,k,w)關于k的符號變量作Z-變換返回關于符號變量w的函數(shù) 逆變換iztrans(F)f=iztrans(F)或(F,k)或(F,w,k) 符號繪圖函數(shù) 符號函數(shù)簡易繪圖函數(shù)ezplot(f)f可以包含單個符號變量x的字符串或表達式,默認畫圖區(qū)間(-2pi,2pi),如果f包含x和y,畫出的圖像是f(x,y)=0的圖像,缺省區(qū)間是-2pi Ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])繪制在xmin [x,y]=fplot(fun,lims,…)只返回用來繪圖的點,并不繪圖,可以自己調(diào)用plot(x,y)來繪制圖形。syms x subplot(2,2,1),fplot('humps',[0,1])f='abs(exp(x*(0:9))*ones(10,1))' subplot(2,2,2),fplot(f,[0,2*pi])subplot(2,2,3),fplot('sin(1./x)',[0.01,0.1],1e-3)matlab繪圖 二維圖形的繪制 plot 在(x,y)坐標下繪制二維圖像 支持多個x-y二元結(jié)構(gòu) plot3 在(x,y,z)坐標下繪制三維圖形 loglog 在(x,y)對數(shù)坐標下繪制二維圖形 semilogx 在x為對數(shù)坐標,y為線性坐標的二維坐標中繪圖 semilogy 在x為線性坐標,y為對數(shù)坐標的二維坐標中繪圖 plotyy 在有兩個y軸的坐標下繪圖 plot用法 plot(x,y,'--rs','linewidth',2,'markeredgecolor','k',...'markerfacecolor','g','markersize',10)plotyy用法 plotyy(x1,y1,x2,y2)以x1為標準,左軸為y軸繪制y1向量,x2為基準,右軸為y軸,繪制y2向量 plotyy(x1,y1,x2,y2,fun)用字符串fun指定的繪圖函數(shù)(plot ,semilogx,semilogy,loglog,stem)plotyy((x1,y1,x2,y2,fun1,fun2)t=0:pi/20:2*pi;y=exp(sin(t));plotyy(t,y,t,y,'plot','stem')stem為二維桿圖 [ax,h1,h2]=plotyy(?)返回左右兩y軸的句柄(分別為ax(1)ax(2),以及在兩坐標軸中生成的圖形對象的句柄,分別為h1 h2 t=0:900;A=1000;a=0.005;b=0.005;z2=cos(b*t);z1=A*exp(-a*t);[haxes,hline1,hline2]=plotyy(t,z1,t,z2,'semilogy','plot');axes(haxes(1))ylabel('semilog plot')對數(shù)坐標 axes(haxes(2))ylabel('linear plot')set(hline2,'linestyle','--')其他二維圖形繪圖指令 bar(x,y)二維條形圖 hist(y,n)直方圖 histfit(y,n)帶擬和線的直方圖,n為直方的個數(shù) stem(x,y)火柴桿圖 comet(x,y)彗星狀軌跡圖 compass(x,y)羅盤圖 errorbar(x,y,l,u)誤差限圖 feather(x,y)羽毛狀圖 fill(x,y,’r’)二維填充函數(shù) 以紅色填充 pie(x)餅圖 polar(t,r)極坐標圖 r為幅值向量,t為角度向量 t=0:0.1:8*pi;r=cos(3*t/2)+1/2;polar(t,r),xlabel('polar 指令')quiver(x,y)磁力線圖 stairs(x,y)階梯圖 loglog(x,y)對數(shù)圖 semilogx semilogy 半對數(shù)圖 matlab三維作圖 plot3(x,y,z)三維線條圖 t=0:pi/50:15*pi;plot3(sin(t),cos(t),t,'r*')與plot相似 v=axis 返回各個軸的范圍 text(0,0,0,'origin')在某個坐標點加入文字 plot3 增加維數(shù)可以一次畫多個圖,使所個二維圖形眼一個軸排列 三維網(wǎng)線圖的繪制 mesh(x,y,z)網(wǎng)格圖 mesh(x,y,z,c)四維作圖,(x,y,z)代表空間三維,c代表顏色維 mesh(…,’property name’,property value,…)設置曲面各屬性的值 [x,y,z]=sphere(12);mesh(x,y,z),hidden off 曲面設置為透明 meshc(x,y,z)畫網(wǎng)格圖和基本的等值線圖 meshz(x,y,z)畫包含零平面的網(wǎng)格圖 waterfall(x,y,z)與mesh一樣,只是在效果上它的網(wǎng)格線只在x軸一個方向出現(xiàn),呈瀑布狀水線 兩個變量的標量指令meshgrid(x)或meshgrid(x,y)(p179)將兩個一維向量生成兩個二維向量,以便進行z=f(x,y)運算,算出z的所有值,z為x y的標量指令 [X,Y]=meshgrid(x)meshgrid(x,x)的簡略式 [X,Y]=meshgrid(x,y)[X,Y,Z]=meshgrid(x,y,z)用于三維圖形的繪制 [x,y]=meshgrid([-2:0.1:2]);z=x.*exp(-x.^2-y.^2);plot3(x,y,z)surf(x,y,z,c)著色表面圖 surf(x,y,z)隱含著c=z surf(z)隱含著x,y的值為surf指令根據(jù)z的尺寸自動生成 surfc 畫出具有基本等值線的曲面圖 surfl 畫出一個具有亮度的曲面圖 shading flat 網(wǎng)線圖的某整條線段或曲面圖的某個貼片都著一種顏色 shading interp 某一線段或貼片上各點的顏色由線或片的頂端顏色經(jīng)線性插值而得 曲面圖不能設成網(wǎng)格圖那樣透明,但需要時,可以在孔洞處將數(shù)據(jù)設成nun 等高線的繪制 在二維空間繪制等高線contour contour(x,y,z,n)繪制n條等值線(n可省略) contour(x,y,z,v)在向量v所指定的高度上繪制等高線(可省)c=contour(x,y,z)計算等值線的高度值 c=contourc(x,y,z,n)計算n條等高線的x-y坐標數(shù)據(jù) c=contourc(x,y,z,v)計算向量v所指定的等高線的x-y坐標數(shù)據(jù) clabel(c)給c陣所表示的等高線加注高度標識 clabel(c,v)給向量v所指定的等高線加注高度標識 clabel(c,’manual’)借助鼠標給點中的等高線加注高度標識 三維空間繪制等高線contour3(x,y,z)[x,y,z]=peaks(30);contour3(x,y,z,16,'g')二元函數(shù)的偽彩圖pcolor(x,y,z)是指令surf的二維等效指令,代表偽彩色,可與contour單色等值線結(jié)合畫彩色等值線圖 [x,y,z]=peaks(30);pcolor(x,y,z);偽彩色 shading interp 顏色插值,使顏色平均漸變 hold on,contour(x,y,z,20,'k')...畫等值線 colorbar('horiz')水平顏色標尺 c=contour(x,y,z,8);clabel(c)標注等高線 矢量場圖(速度圖)quiver 用于描述函數(shù)z=f(x,y)在點(x,y)的梯度大小和方向 [X,Y]=meshgrid(x,y)X,Y為Z陣元素的坐標矩陣 [U,V]=gradient(Z,dx,dy)U,V分別為Z對x對y的導數(shù),dx dy是x y方向上的計算步長 quiver(X,Y,U,V,s,’linespec’,’filled’)U,V為必選項,決定矢量場圖中各矢量的大小和方向,s為指定所畫箭頭的大小,缺省時取1,linespec為字符串,指定合法的線形和彩色,filled用于填充定義的繪圖標識符 [x,y]=meshgrid(-2:.2:2,-1:.15:1);z=x.*exp(-y.^2);[px,py]=gradient(z,.2,.15);contour(x,y,z);hold on,quiver(x,y,px,py),axis image 多邊形的填色fill(x,y,c)c定義顏色字符串,可以是’r’,’b’等,也可以用RGB三色表示[r,g,b]值為0-1 圖形的四維表現(xiàn) matlab常用到的永久變量。 ans:計算結(jié)果的默認變量名。i j:基本虛數(shù)單位。 eps:系統(tǒng)的浮點(F10a9Bg個oht): inf: 無限大,例1/0 nan NaN:非數(shù)值(N航a nmnb謝)pi:圓周率n(n=3.1415926..)。realmax:系統(tǒng)所能表示的最大數(shù)值。realmin: 系統(tǒng)所能表示的最小數(shù)值,nargin: 函數(shù)的輸入?yún)?shù)個數(shù): nargout:函數(shù)的輸出多數(shù)個數(shù) ①matlab的所有運算都定義在復數(shù)城上。對于方根問題運算只返回處于第一象限的解。 ⑦matlab分別用左斜/和右來表示“左除和“右除”運算。對于標量運算而言,這兩者的作用沒有區(qū)別:但對于矩陣運算來說,二者將產(chǎn)生不同的結(jié)果。多項式的表示方法和運算 p(x)=x^3-3x-5 可以表示為p=[1 0 –3 5],求x=5時的值用plotval(p,5)也可以求向量:a=[3 4 5],plotval(p,a)函數(shù)roots求多項式的根 roots(p)p=[1 0-3 5];r=roots(p)由根重組多項式poly(根)q=poly(r)real(q)有時會產(chǎn)生虛根,這時用real抽取實根即可 conv(a,b)函數(shù) 多項式乘法(執(zhí)行兩個數(shù)組的卷積)a=[1 2 3 4];b=[1 4 9 16];c=conv(a,b)多項式的加減法,低階的多項式必須用首零填補,使其與高階多項式有同樣的階次 多項式除法 [q , r]=deconv(c , b)表示b/c q為商多項式,r為余數(shù) 多項式的導數(shù) polyder(f)f=[ 2 4 5 6 2 1];s=polyder(f)MATLAB常用的基本數(shù)學函數(shù) abs(x):純量的絕對值或向量的長度 angle(z):復 數(shù)z的相角(Phase angle) sqrt(x):開平方 real(z):復數(shù)z的實部imag(z):復數(shù)z的虛 部 conj(z):復數(shù)z的共軛復數(shù) round(x):四舍五入至最近整數(shù) fix(x):無論正負,舍去小數(shù)至最近整數(shù) floor(x):地板函數(shù),即舍去正小數(shù)至最近整數(shù) ceil(x):天花板函數(shù),即加入正小數(shù)至最近整數(shù) rat(x):將實數(shù)x化為分數(shù)表示 rats(x):將實數(shù)x化為多項分數(shù)展開 sign(x):符號函數(shù)(Signum function)。 當x<0時,sign(x)=-1; 當x=0時,sign(x)=0;當x>0時,sign(x)=1。 > 小整理:MATLAB常用的三角函數(shù) sin(x):正弦函數(shù) cos(x):馀弦函數(shù) tan(x):正切函數(shù) asin(x):反正弦函數(shù) acos(x):反馀弦函數(shù) atan(x):反正切函數(shù) atan2(x,y):四象限的反正切函數(shù) sinh(x):超越正弦函數(shù) cosh(x):超越馀弦函數(shù) tanh(x):超越正切函數(shù) asinh(x):反超越正弦函數(shù) acosh(x):反超越馀弦函數(shù) atanh(x):反超越正切函數(shù) 變數(shù)也可用來存放向量或矩陣,并進行各種運算 若要輸入矩陣,則必須在每一列結(jié)尾加上分號(;),如下例: A = [1 2 3 4;5 6 7 8;9 10 11 12];第二篇:MATLAB知識總結(jié)
第三篇:matlab圖像處理小結(jié)
第四篇:MATLAB實訓小結(jié)
第五篇:MatLab基礎知識小結(jié)來源