MatLab 知識小結

 

matlab常用到的永久變量。
ans:計算結果的默認變量名。
i j:基本虛數單位。
eps:系統的浮點(F10a9Bg個oht):
inf: 無限大,例1/0
nan NaN:非數值(N航a nmnb謝)
pi:圓周率n(n=3.1415926..)。
realmax:系統所能表示的最大數值。
realmin: 系統所能表示的最小數值,
nargin: 函數的輸入參數個數:
nargout:函數的輸出多數個數

①matlab的所有運算都定義在複數城上。對於方根問題運算只返回處於第一象限的解。
⑦matlab分別用左斜/和右/來表示“左除和“右除”運算。對於標量運算而言,這兩者的作用沒有區別:但對於矩陣運算來說,二者將產生不同的結果。

多項式的表示方法和運算
p(x)=x^3-3x-5 可以表示爲p=[1 0 –3 5],求x=5時的值用plotval(p,5)
也可以求向量:a=[3 4 5],plotval(p,a)
函數roots求多項式的根 roots(p)
p=[1 0 -3 5];
r=roots(p)
由根重組多項式poly(根)
q=poly(r)
real(q) 有時會產生虛根,這時用real抽取實根即可
conv(a,b)函數多項式乘法(執行兩個數組的卷積)
a=[1 2 3 4];
b=[1 4 9 16];
c=conv(a,b)
多項式的加減法,低階的多項式必須用首零填補,使其與高階多項式有同樣的階次
多項式除法 [q , r]=deconv(c , b) 表示b/c q爲商多項式,r爲餘數
多項式的導數 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) 數據的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爲插值點的自變量座標向量,可以爲數組或單個數。
method爲選擇插值算法的方法,包括:
linear(線性插值)
cubic(立方插值)
spline(三次樣條插值)
nearst(最近臨插值)

例如:人口預測
year=1900:10:1900;
number=[78 91 105 ….每十年的人口數];
x=1900:1:2000;
y=interp1(year,number,x,’spline’);
plot(year,numeber,’*’,x,y);grid on

一維博裏葉變換插值使用函數interpft實現,計算含有周期函數值的矢量的傅里葉變換
然後使用更多的點進行傅里葉變換的逆變換,函數的使用格式如下:y=interpft(x,n) 其中x是含有周期函數值的矢量,併爲等距的點,n爲返同等間距點的個數。

求解一元函數的最小值
y=fminbnd('humps',0.3,1) humps爲一內置函數
求解多元函數的最小值
函數fminserch用於求多元函數的最小值。它可以指定一個開始的矢量,並非指定一個區間。此函數返回一個矢量爲此多元函數局部最小函數值對應的自變量

紋理成圖功能
由warp函數的紋理成圖功能實現平面圖像在空間三維曲面上的顯示。
將文件名爲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);

求函數的零點
求函數humps在[1,2]區間上的零點 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)

函數定積分
q=quadl(‘humps’,0,1) 求humps函數在0 1區間上的定積分,也可以用quad語句

二重積分首先計算內積分,然後藉助內積分的中間結果再求出二重積分的值,類似於積分中的分步積分法。
Result=dblquad(‘integrnd’,xin,xmax.,ymin,ymax) integrnd爲被積函數的名稱字符串

符號積分運算int(f)
最精確的是符號積分法
計算s=∫12[∫01xydx]dy
syms x y 中間爲空格,不能爲逗號
s=int(int(‘x^y’,’x’,0,1),’y’,1,2) 引號可省略
vpa(s) 顯示s的值
內積分限爲函數的二重積分
I=∫14[∫√y2(x2+y2)dx]dy
符號法I=vpa(int(int(‘x^2+y^2’,’x’,sqrt(y),2),’y’,1,4)

微分運算(diff)
微分是描述一個函數在一點處的斜率,是函數的微觀性質、因此積分對函數的形狀在小範圍內的改變不敏感,而微分很敏感。—個函數的小的變化,容易產生相鄰點的斜率的大的改變。由幹微分這個固有的困難.所以儘可能避免數值微分.特別是對實驗獲得的數據進行微分。在這種情況,最好用最小二乘曲線擬合這種數據,然後對所得到的多項式進行微分;或用另一種方法對點數據進行三次樣條擬合,然後尋找樣條微分,但是,有時微分運算是不能避免的,在MATLAB中.用函數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)]
對於求矩陣的微分,即爲求各列矢量的微分,從矢量的微分值可以判斷矢量的單調性、是否等間距以及是否有重複的元素。
符號微分運算(diff)
syms x t a
f =cos(a*x)
df =diff(f) 由findsym的規則,隱式的指定對x進行微分
dfa=diff(f,'a') 指定對變量a進行微分
dfa=diff(f,'a',3) 三次微分
diff函數不僅作用在標量上,還可以在矩陣上,運算規則就是按矩陣的元素分別進行微分
syms a x
A=[cos(a*x),sin(a*x),-sin(a*x),cos(a*x)];
dA=diff(A)
微分方程dsolve
在matlab中,符號表達式中包含字母D用來表示微分運算,D2,D3分別對應第二,第三階導數,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個方程,架構數組

dsolve('Dx=-a*x') 結果:C1*exp(-a*t) 沒給定初值,所以結果中含參變量
x=dsolve('Dx=-a*x','x(0)=1','s') 結果exp(-a*s) 給定了初值,獨立變量設爲s
計算多元函數的梯度
fx=gradient(f) f是一個矢量返回f的一維數值梯度,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命令創建表達式
f=sym(‘cos(x)+sin(x)’)或 syms x , f=cos(x)+sin(x)
diff(f) 求其導數
(也可直接用命令f=diff(‘cos(x)+cos(y)’)

當字符表達式中含有多於一個的變量時,只有—個變量是獨立變量。如果不告訴matlab哪一個變量是獨立變量,則可以通過findsym命令詢問
利用findsym命令查詢獨立變量
f=sym('sin(a*x)+b')
findsym(f,1) 給出獨立變量(一個變量,如果爲2則給出2個變量)
findsym(f) 給出所有變量

符號表達式的化簡和替換
collect函數 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函數 expand(f)將f展開,寫成和的形式
syms x
expand((x-1)^3) 得到x^3-3*x^2+3*x-1
horner函數 horner(f)將f寫成鑲嵌套形式
syms x
horner(x^3-6*x^2) 得到(-6+x)*x^2
factor函數 factor(f)將f轉換成低階有理多項式的乘積
syms x
f=x^3-6*x^2+11*x-6
factor(f) 得到 (x-1)*(x-2)*(x-3)
simplify(f)函數綜合化簡
simple(f) 函數的最簡形式
syms x
f=2*sin(x^2)+cos(3*x)
simple(f) 如果不想看到中間過程,可z=simple(f) 有時使用兩次simple命令可以得到最簡式
如果想知道哪個簡化命令得到最後結果,可以加一個參數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是一個符號函數,返回一個符號變量
subexpr函數有時matlab返回的符號表達式難以理解,用subexpr函數,可以將表達式中重複出現的子式用一個符號表示,從而簡化表達形式
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函數有時也能起到同樣的作用。
Pretty(f) 顯示函數的習慣書寫形式

線性方程組的求解
求解線性方程組,用反斜槓/
a=hilb(3)
b=[1 2 3]'
a/b

矩陣的特徵值和特徵向量
用eig(v,d)函數,[v,d]=eig(A); 其中d將返回特徵值,v返回相應的特徵向量,缺省第二個參數將只返回特徵值
syms a b c real
A=[a b c; b c a; c a b];
[v,d]=eig(A);

爲了觀察更清楚,使用以前學過的替換函數,這裏不用默認的sigma,而改用M,顯式的代替繁瑣的表達子式
vv=subexpr(v);
vs=subs(vv,'m','sigma') 運行結果爲
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’)
運行結果爲ds =

[ (m), 0, 0]
[ 0, -(m), 0]
[ 0, 0, c+a+b]
note 求特徵值也可用以下命令
f=poly(A) poly函數用來求A的特徵多項式
d=solve(f) solve(f)函數用來求多項式的解

svd( )函數求矩陣的奇異值分解,將矩陣分解爲兩個正交矩陣和對角矩陣的乘積
a=sym(hilb(2))
[u,s,v]=svd(a)

代數方程和方程組
代數方程的求解可用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')
結果爲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) 無限項求和
泰勒級數taylor(f)
taylor(f)表示求f的5階talor展開,可以增加參數指定展開的階數(默認式5),也可以對於多元函數指定展開的變量,還可以指定在哪個點展開
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分析可以將信號轉換爲不同頻率的正弦曲線。可對離散數據進行分析,也可對連續時間系統進行分析,特別在信號和圖形處理領域。離散變換(DFT)作用於有限數據的採集,最有效的是快速fourier變換(FFT)
F=fourier(f) 獨立變量x,返回關於參數w的函數
F=fourier(f,v) 返回函數F關於符號對象v的函數
F=fourier(f,u,v) 對關於u的函數f進行變換,而不是缺省的w,返回函數F是關於v的函數
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的函數對w進行積分
f=ifourier(F,v) 返回函數f是關於符號對象v的函數,而不是缺省的x
f=ifourier(F,u,v) 是關於u的函數f進行變換,而不是缺省的x,返回函數f是關於v的函數
Laplace變換和逆變換laplace(f)
應用於連續系統(微分方程)中,可以用來求解微分方程的初值問題
laplace(F) 缺省獨立變量t,缺省返回關於s的函數L
laplace(F,t) 返回關於t的函數L,而不是缺省的s
laplace(F,w,z) 對函數F的自變量w積分,返回關於z的函數L
逆變換
F=ilaplace(L) 缺省獨立變量s,返回關於t的函數F
F=ilaplace(L,y) 返回關於y的函數F,而不是缺省的t
F=ilaplace(L,y,x) 對函數L的自變量y積分,返回關於x的函數F
Z-變換和逆變換ztrans(f) 標量符號f的Z-變換
F=ztrans(f) 缺省獨立變量n,返回關於z的函數
F=ztrans(f,w) 返回關於符號變量w的函數F,而不是缺省的z
F=ztrans(f,k,w) 關於k的符號變量作Z-變換返回關於符號變量w的函數
逆變換iztrans(F)
f=iztrans(F) 或(F,k)或 (F,w,k)

符號繪圖函數
符號函數簡易繪圖函數ezplot(f)
f可以包含單個符號變量x的字符串或表達式,默認畫圖區間(-2pi,2pi),如果f包含x和y,畫出的圖像是f(x,y)=0的圖像,缺省區間是-2piEzplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])繪製在xminsyms x t
ezplot('t*cos(t)','t*sin(t)',[0,4*pi])
繪製符號圖像函數fplot(fun,lims,tol,’linespec’,n)
其中lims=[xmin,xmax]或[xmin,xmax,ymin,ymax] tol爲指定相對誤差,默認0.001 ‘linespec’指定繪圖的線型 n指定最少以n+1個點繪圖
[x,y]=fplot(fun,lims,…) 只返回用來繪圖的點,並不繪圖,可以自己調用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二元結構
plot3 在(x,y,z)座標下繪製三維圖形
loglog 在(x,y)對數座標下繪製二維圖形
semilogx 在x爲對數座標,y爲線性座標的二維座標中繪圖
semilogy 在x爲線性座標,y爲對數座標的二維座標中繪圖
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指定的繪圖函數(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') 對數座標
axes(haxes(2))
ylabel('linear plot')
set(hline2,'linestyle','--')
其他二維圖形繪圖指令
bar(x,y) 二維條形圖
hist(y,n) 直方圖
histfit(y,n) 帶擬和線的直方圖,n爲直方的個數
stem(x,y) 火柴桿圖
comet(x,y) 彗星狀軌跡圖
compass(x,y) 羅盤圖
errorbar(x,y,l,u) 誤差限圖
feather(x,y) 羽毛狀圖
fill(x,y,’r’) 二維填充函數以紅色填充
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) 對數圖
semilogx semilogy 半對數圖

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 增加維數可以一次畫多個圖,使所個二維圖形眼一個軸排列

三維網線圖的繪製
mesh(x,y,z) 網格圖
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) 畫網格圖和基本的等值線圖
meshz(x,y,z) 畫包含零平面的網格圖
waterfall(x,y,z) 與mesh一樣,只是在效果上它的網格線只在x軸一個方向出現,呈瀑布狀水線
兩個變量的標量指令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指令根據z的尺寸自動生成
surfc 畫出具有基本等值線的曲面圖
surfl 畫出一個具有亮度的曲面圖
shading flat 網線圖的某整條線段或曲面圖的某個貼片都着一種顏色
shading interp 某一線段或貼片上各點的顏色由線或片的頂端顏色經線性插值而得
曲面圖不能設成網格圖那樣透明,但需要時,可以在孔洞處將數據設成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座標數據
c=contourc(x,y,z,v) 計算向量v所指定的等高線的x-y座標數據
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')
二元函數的僞彩圖pcolor(x,y,z)
是指令surf的二維等效指令,代表僞彩色,可與contour單色等值線結合畫彩色等值線圖
[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
用於描述函數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的導數,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
圖形的四維表現

link

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