matlab實用函數(shù)及技巧整理===============================================
小整理:MATLAB常用的基本數(shù)學(xué)函數(shù)
abs(x):純量的絕對值或向量的長度
angle(z):復(fù)數(shù)z的相角(Phase angle)
sqrt(x):開平方
real(z):復(fù)數(shù)z的實部
imag(z):復(fù)數(shù)z的虛部
conj(z):復(fù)數(shù)z的共軛復(fù)數(shù)
round(x):四舍五入至最近整數(shù)
fix(x):無論正負(fù),舍去小數(shù)至最近整數(shù)
floor(x):地板函數(shù),即舍去正小數(shù)至最近整數(shù)
ceil(x):天花板函數(shù),即加入正小數(shù)至最近整數(shù)
rat(x):將實數(shù)x化為分?jǐn)?shù)表示
rats(x):將實數(shù)x化為多項分?jǐn)?shù)展開
sign(x):符號函數(shù) (Signum function)。
當(dāng)x<0時,sign(x)=-1;
當(dāng)x=0時,sign(x)=0;
當(dāng)x>0時,sign(x)=1。
rem(x,y):求x除以y的馀數(shù)
gcd(x,y):整數(shù)x和y的最大公因數(shù)
lcm(x,y):整數(shù)x和y的最小公倍數(shù)
exp(x):自然指數(shù)
pow2(x):2的指數(shù)
log(x):以e為底的對數(shù),即自然對數(shù)或
log2(x):以2為底的對數(shù)
log10(x):以10為底的對數(shù)
===============================================
小整理: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ù)有:
min(x): 向量x的元素的最小值
max(x): 向量x的元素的最大值
mean(x): 向量x的元素的平均值
median(x): 向量x的元素的中位數(shù)
std(x): 向量x的元素的標(biāo)準(zhǔn)差
diff(x): 向量x的相鄰元素的差
sort(x): 對向量x的元素進(jìn)行排序(Sorting)
length(x): 向量x的元素個數(shù)
norm(x): 向量x的歐氏(Euclidean)長度
sum(x): 向量x的元素總和
prod(x): 向量x的元素總乘積
cumsum(x): 向量x的累計元素總和
cumprod(x): 向量x的累計元素總乘積
dot(x, y): 向量x和y的內(nèi)積
cross(x, y): 向量x和y的外積
(大部份的向量函數(shù)也可適用於矩陣,詳見下述。)
====================================================
小整理:MATLAB的查詢命令
help:用來查詢已知命令的用法。例如已知inv是用來計算反矩陣,鍵入
help inv即可得知有關(guān)inv命令的用法。(鍵入help help則顯示help的用
法,請試看看?。?p style="TEXT-INDENT: 2em">
lookfor:用來尋找未知的命令。例如要尋找計算反矩陣的命令,可鍵入
lookfor
inverse,MATLAB即會列出所有和關(guān)鍵字inverse相關(guān)的指令。找到所需的
命令後,即可用help進(jìn)一步找出其用法。(lookfor事實上是對所有在搜尋
路徑下的M檔案進(jìn)行關(guān)鍵字對第一注解行的比對,詳見後敘
===============================================
下表即為MATLAB常用到的永久常數(shù)。
小整理:MATLAB的永久常數(shù)
i或j:基本虛數(shù)單位(即)
eps:系統(tǒng)的浮點(diǎn)(Floating-point)精確度
inf:無限大, 例如1/0
nan或NaN:非數(shù)值(Not a number),例如0/0
pi:圓周率 p(= 3.1415926...)
realmax:系統(tǒng)所能表示的最大數(shù)值
realmin:系統(tǒng)所能表示的最小數(shù)值
nargin: 函數(shù)的輸入引數(shù)個數(shù)
nargin: 函數(shù)的輸出引數(shù)個數(shù)
====================================================
1-7、結(jié)束MATLAB
有三種方法可以結(jié)束MATLAB:
1.鍵入exit
2.鍵入quit
3.直接關(guān)閉MATLAB的命令視窗(Command window)
====================================================
小整理:MATLAB基本繪圖函數(shù)
plot: x軸和y軸均為線性刻度(Linear scale)
loglog: x軸和y軸均為對數(shù)刻度(Logarithmic scale)
semilogx: x軸為對數(shù)刻度,y軸為線性刻度
semilogy: x軸為線性刻度,y軸為對數(shù)刻度
====================================================
若要畫出多條曲線,只需將座標(biāo)對依次放入plot函數(shù)即可:
plot(x, sin(x), x, cos(x));
若要改變顏色,在座標(biāo)對後面加上相關(guān)字串即可:
plot(x, sin(x), 'c', x, cos(x), 'g');
若要同時改變顏色及圖線型態(tài)(Line style),也是在座標(biāo)對後面加上相
關(guān)字串即可:
plot(x, sin(x), 'co', x, cos(x), 'g*');
====================================================
小整理:plot繪圖函數(shù)的叁數(shù)
字元 顏色 字元 圖線型態(tài)
y 黃色 . 點(diǎn)
k 黑色 o 圓
w 白色 x x
b 藍(lán)色 + +
g 綠色 * *
r 紅色 - 實線
c 亮青色 : 點(diǎn)線
m 錳紫色 -. 點(diǎn)虛線
-- 虛線
====================================================
圖形完成後,我們可用axis([xmin,xmax,ymin,ymax])函數(shù)來調(diào)整圖軸的范
圍:
axis([0, 6, -1.2, 1.2]);
此外,MATLAB也可對圖形加上各種注解與處理:
xlabel('Input v alue'); % x軸注解
ylabel('Function v alue'); % y軸注解
title('Two Trigonometric Functions'); % 圖形標(biāo)題
legend('y = sin(x)','y = cos(x)'); % 圖形注解
grid on; % 顯示格線
我們可用subplot來同時畫出數(shù)個小圖形於同一個視窗之中:
subplot(2,2,1); plot(x, sin(x));
subplot(2,2,2); plot(x, cos(x));
subplot(2,2,3); plot(x, sinh(x));
subplot(2,2,4); plot(x, cosh(x));
MATLAB還有其他各種二維繪圖函數(shù),以適合不同的應(yīng)用,詳見下表。
====================================================
小整理:其他各種二維繪圖函數(shù)
bar 長條圖
errorbar 圖形加上誤差范圍
fplot 較精確的函數(shù)圖形
polar 極座標(biāo)圖
hist 累計圖
rose 極座標(biāo)累計圖
stairs 階梯圖
stem 針狀圖
fill 實心圖
feather 羽毛圖
compass 羅盤圖
quiver 向量場圖
====================================================
以下我們針對每個函數(shù)舉例。
當(dāng)資料點(diǎn)數(shù)量不多時,長條圖是很適合的表示方式:
close all; % 關(guān)閉所有的圖形視窗
x=1:10;
y=rand(size(x));
bar(x,y);
如果已知資料的誤差量,就可用errorbar來表示。下例以單位標(biāo)準(zhǔn)差來做
資料的誤差量:
x = linspace(0,2*pi,30);
y = sin(x);
e = std(y)*ones(size(x));
errorbar(x,y,e)
對於變化劇烈的函數(shù),可用fplot來進(jìn)行較精確的繪圖,會對劇烈變化處進(jìn)
行較密集的取樣,如下例:
fplot('sin(1/x)', [0.02 0.2]); % [0.02 0.2]是繪圖范圍
若要產(chǎn)生極座標(biāo)圖形,可用polar:
theta=linspace(0, 2*pi);
r=cos(4*theta);
polar(theta, r);
對於大量的資料,我們可用hist來顯示資料的分 情況和統(tǒng)計特性。下面
幾個命令可用來驗證randn產(chǎn)生的高斯亂數(shù)分?。?p style="TEXT-INDENT: 2em">
x=randn(5000, 1); % 產(chǎn)生5000個 ?=0,?=1 的高斯亂數(shù)
hist(x,20); % 20代表長條的個數(shù)
rose和hist很接近,只不過是將資料大小視為角度,資料個數(shù)視為距離,?⒂眉 昊嬤票硎荊?
x=randn(1000, 1);
rose(x);
stairs可畫出階梯圖:
x=linspace(0,10,50);
y=sin(x).*exp(-x/3);
stairs(x,y);
stems可產(chǎn)生針狀圖,常被用來繪制數(shù)位訊號:
x=linspace(0,10,50);
y=sin(x).*exp(-x/3);
stem(x,y);
stairs將資料點(diǎn)視為多邊行頂點(diǎn),并將此多邊行涂上顏色:
x=linspace(0,10,50);
y=sin(x).*exp(-x/3);
fill(x,y,'b'); % 'b'為藍(lán)色
feather將每一個資料點(diǎn)視復(fù)數(shù),并以箭號畫出:
theta=linspace(0, 2*pi, 20);
z = cos(theta)+i*sin(theta);
feather(z);
compass和feather很接近,只是每個箭號的起點(diǎn)都在圓點(diǎn):
theta=linspace(0, 2*pi, 20);
z = cos(theta)+i*sin(theta);
compass(z);
--
3.基本XYZ立體繪圖命令
在科學(xué)目視表示(Scientific visualization)中,三度空間的立體圖是
一個非常重要的技巧。本章將介紹MATLAB基本XYZ三度空間的各項繪圖命
令。
mesh和plot是三度空間立體繪圖的基本命令,mesh可畫出立體網(wǎng)狀圖,
plot則可畫出立體曲面圖,兩者產(chǎn)生的圖形都會依高度而有不同顏色。下
列命令可畫出由函數(shù) 形成的立體網(wǎng)狀圖:
x=linspace(-2, 2, 25); % 在x軸上取25點(diǎn)
y=linspace(-2, 2, 25); % 在y軸上取25點(diǎn)
[xx,yy]=meshgrid(x, y); % xx和yy都是21x21的矩陣
zz=xx.*exp(-xx.^2-yy.^2); % 計算函數(shù)值,zz也是21x21的矩陣
mesh(xx, yy, zz); % 畫出立體網(wǎng)狀圖
surf和mesh的用法類似:
x=linspace(-2, 2, 25); % 在x軸上取25點(diǎn)
y=linspace(-2, 2, 25); % 在y軸上取25點(diǎn)
[xx,yy]=meshgrid(x, y); % xx和yy都是21x21的矩陣
zz=xx.*exp(-xx.^2-yy.^2); % 計算函數(shù)值,zz也是21x21的矩陣
surf(xx, yy, zz); % 畫出立體曲面圖
為了方便測試立體繪圖,MATLAB提供了一個peaks函數(shù),可產(chǎn)生一個凹凸有
致的曲面,包含了三個局部極大點(diǎn)及三個局部極小點(diǎn),其方程式為:
要畫出此函數(shù)的最快方法即是直接鍵入peaks:
peaks
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ...
- 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ...
- 1/3*exp(-(x+1).^2 - y.^2)
我們亦可對peaks函數(shù)取點(diǎn),再以各種不同方法進(jìn)行繪圖。meshz可將曲面
加上圍裙:
[x,y,z]=peaks;
meshz(x,y,z);
axis([-inf inf -inf inf -inf inf]);
waterfall可在x方向或y方向產(chǎn)生水流效果:
[x,y,z]=peaks;
waterfall(x,y,z);
axis([-inf inf -inf inf -inf inf]);
下列命令產(chǎn)生在y方向的水流效果:
[x,y,z]=peaks;
waterfall(x',y',z');
axis([-inf inf -inf inf -inf inf]);
meshc同時畫出網(wǎng)狀圖與等高線:
[x,y,z]=peaks;
meshc(x,y,z);
axis([-inf inf -inf inf -inf inf]);
surfc同時畫出曲面圖與等高線:
[x,y,z]=peaks;
surfc(x,y,z);
axis([-inf inf -inf inf -inf inf]);
contour3畫出曲面在三度空間中的等高線:
contour3(peaks, 20);
axis([-inf inf -inf inf -inf inf]);
contour畫出曲面等高線在XY平面的投影:
contour(peaks, 20);
plot3可畫出三度空間中的曲線:
t=linspace(0,20*pi, 501);
plot3(t.*sin(t), t.*cos(t), t);
亦可同時畫出兩條三度空間中的曲線:
t=linspace(0, 10*pi, 501);
plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t);
y(2:4)-1 % 取出y的第二至第四個元素來做運(yùn)算
同樣的方法可用於產(chǎn)生公差為1的等差數(shù)列:x = 7:16
x = 7:3:16 % 公差為3的等差數(shù)列
x = linspace(4, 10, 6) % 等差數(shù)列:首項為4,末項為10,項數(shù)為6
若要重新安排矩陣的形狀,可用reshape命令:B = reshape(A, 4, 2) % 4是新矩陣的列數(shù),2是新矩陣的行數(shù)
舉例來說,下列命令會產(chǎn)生一個長度為6的調(diào)和數(shù)列(Harmonic
sequence):
x = zeros(1,6); % x是一個16的零矩陣
for i = 1:6,
x(i) = 1/i;
end
for 圈可以是多層的,下例產(chǎn)生一個16的Hilbert矩陣h,其中為於第i
列、第j行的元素為:
h = zeros(6);
for i = 1:6,
for j = 1:6,
h(i,j) = 1/(i+j-1);
end
end
format rat % 使用分?jǐn)?shù)來表示數(shù)值
>>disp(x)
1 1/2 1/3 1/4 1/5 1/6
function output = fact(n)
% FACT Calculate factorial of a given positive integer.
output = 1;
for i = 1:n,
output = output*i;
end
其中fact是函數(shù)名,n是輸入引數(shù),output是輸出引數(shù),而i則是此函數(shù)用
到的暫時變數(shù)。要使用此函數(shù),直接鍵入函數(shù)名及適當(dāng)輸入引數(shù)值即可:
MATLAB的函數(shù)也可以是遞 式的(Recursive),也就是說,一個函數(shù)可以
呼叫它本身。舉例來說,n! =
n*(n-1)!,因此前面的階乘函數(shù)可以改成遞 式的寫法:
function output = fact(n)% FACT Calculate factorial of a given positive integer recursively.
if n == 1, % Terminating condition
output = 1;
return;
end
output = n*fact(n-1);
在寫一個遞 函數(shù)時,一定要包含結(jié)束條件(Terminating
condition),否則此函數(shù)將會一再呼叫自己,永遠(yuǎn)不會停止,直到電腦的
記憶體被耗盡為止。以上例而言,n==1即滿足結(jié)束條件,此時我們直接將
output設(shè)為1,而不再呼叫此函數(shù)本身。