MatLab 知識小結

來源:互聯網
上載者:User

 

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.