Matlab磁碟檔案操作與繪圖
Load及Save
Matlab提供Load及Save指令來對磁碟檔案作 儲存。
另外有關磁碟檔案管理指令,如dir、type、
delete或chdir等(類似DOS指令)。
在不同作業系統亦提供「!」在指令前執行該 系統指令操作,如!dir/o/p、!del...等。
當然先決條件,學習者須具備作業系統操作 指令。
不同系統磁碟操作指令(部分舉例)
Matlab MS-DOS UNIX VAX/VMS
dir dir ls dir
type type cat type
delete del rm delete
chdir chdir cd set default
Matlab尚提供diary filename以記錄系統載入後的所 有記錄,並以ASCII格式存檔。
load與save的指令是將變數值或資料以ASCII或二 進位格式存取。
load file是將file內儲存資料,載入Matlab系統中;
save file則可以指定二進位或ASCII文字方式將資 料儲存。
二進位格式儲存檔案較大於ASCII所儲存檔案,但
前者亦於使用編輯軟體處理或編輯。
save temp,其附加檔案名為.mat,即 temp.mat。
save temp x則存入工作空間裡變數x的值到 temp.mat的檔案中。
同理save temp x y z則存入工作空間裡變數x、
y、z的值到temp.mat的檔案中。
儲存為ASCII檔案時則
save filename 變數1 變數2 …. /ascii。
save filename 變數1 變數2….. -ascii。
save filename 變數1 變數2….. /ascii / double。
save filename 變數1 變數2….. -ascii –double,
其中double為16字元的倍精確度格式的指令。
舉例: save temp.dat x y –ascii;表以ascii儲存x、
y變數的值至temp.dat檔案中。
特殊字元符號
特殊符號表示
字元 符號 字元 符號
\it {文字
字串} 斜體字 \gamma 字元符號
\pi 字元符號 \delta 字元符號
\alpha 字元符號 \epsilon 字元符號
\beta 字元符號 \Sigma 字元符號
字元 符號 字元 符號
\sigma 字元符號 \leftarrow 左箭號
\tau 字元符號 \rightarrow 右箭號
\Gamma 字元符號 \bullet 圓點符號
\zeta 字元符號
HorizontalAlignment:設定文字方塊在物件中 的對齊方式;left(預設值)表靠左對齊,
center表置中對齊,right表靠右對齊。
VerticalAlignment:設定文字方塊在物件中 的垂直方向對齊方式;middle(預設值)表置 中,top表向上對齊,bottom表靠向下對齊。
對齊、標題指令
legend(‘string1’,’string2’): 區分座標圖上的多重線。
標題,title(‘text’)或 title(ax,….)
x軸標題, xlabel(‘text’)或 xlabel(ax,...) 加x軸標題 至特定的軸。
y軸標題, ylabel(‘text’)或 ylabel(ay,...)加y軸標題 至特定的軸。
加字至xy或xyz座標系統位置上 text(x,y,‘string’) 或 text(x,y,z,‘string’) 。
plot(x1,y1,s1,x2,y2,s2,x3,y3,s3,……..),例如plot(x,y,'y- ',x,y,'go')。
各字元符號代表意義:
b blue(藍) . point - solid
g green(綠) o circle : dotted
r red(紅) x x-mark -. dashdot
c cyan(青綠) + plus -- dashed
m magenta(暗紅) * star (none) no line
y yellow(黃) s square
k black(黑) d diamond
v triangle (down) ^ triangle (up)
< triangle (left) > triangle (right)
繪圖
grid on加上虛線至目前軸上。
grid off將目前軸上虛線移除。
hold on維持目前圖像以讓下張圖像加入現存 圖像中。
hold off回復至初始設定值。
舉例-2D繪圖
%**2D plot**%
t=0:0.01:1.5;
a=t;
b=t.^2;
plot(t,a,'r-');
hold on;
plot(t,b,'b:');
grid;
title('The Strait line and the Parabolic curve')
hold off;
legend('Strait Line','Parabolic Curve')
text(0.4,0.4,'y=x \rightarrow
\bullet','Horizontalalignment','right')
text(0.8,0.64,'\bullet \leftarrow
y=x^{2}','Horizontalalignment','left')
text(.1,1.8,'\alpha \beta \gamma \delta \epsilon \kappa
\tau \xi \eta \zeta')
text(.1,1.6,'\Sigma \sigma \Gamma \Delta \theta \pi
\Pi')
fplot(‘函式運算式',[xmin, xmax]),例如繪製y=(e^- 0.8t )cos(4t) ,因此直接在Matlab命令視窗中鍵入
fplot(‘(exp(-0.8*t)).*cos(4*t)’,[0, 5])。
統計圖與離散資料圖
hist(x, y)
stem(x, y)
y=1/(x^3-x+1)的離散資料統計圖和-4到+4之間的常 態分佈亂數資料統計圖。
舉例
%** Set axis **%
x = 0:0.1:4*pi;
plot(x, sin(x)+sin(3*x));
set(gca, 'ytick', [-1 -0.3 0.1 1]);
set(gca, 'yticklabel', {'Min','Critical','Corupt','Max'});
grid on
% gca : 調整現行座標軸。
圓盤圖
%** Pie diagram**%
sum=0;
revenue=[363.4 35.2 138.5 96.6 22.1];
for i=1:5
sum=revenue(i)+sum;
end
percent1=['CD-ROM:' num2str(revenue(1)/sum*100) '%'];
percent2=['VCD:' num2str(revenue(2)/sum*100) '%'];
percent3=['DVD-ROM:'
percent4=['OM:' num2str(revenue(4)/sum*100) '%'];
percent5=['Misc.:' num2str(revenue(5)/sum*100) '%'];
subplot(211);
bar(revenue);
set(gca,'xtick',[ 1 2 3 4 5]);
set(gca,'xticklabel','CD-ROM|VCD|DVD- ROM|OM|Misc.');
subplot(212)
pie(revenue);
text(-4,1,percent1)
text(-4,0.75,percent2)
text(-4,0.5,percent3)
text(-4,0.25,percent4)
text(-4,0,percent5)
NUM2STR 轉換數字成字串。
SUBPLOT(2,1,1), PLOT(income)
SUBPLOT(2,1,2), PLOT(outgo)
繪製"income”圖至上半視窗,"outgo”圖至下半視 窗。
PIE(X) 在X向量繪製派圖。
%舉例
x = 0:0.1:4*pi;
subplot(2, 2, 1); plot(x, sin(x)); % 一個視窗分割產生 4 個
% 圖形,此為左上角圖形
subplot(2, 2, 2); plot(x, cos(x)); % 此為右上角圖形
subplot(2, 2, 3); plot(x, sin(x).*exp(-x/5)); % 為左下角 圖形
subplot(2, 2, 4); plot(x, x.^2); % 此為右下角圖形
%舉例
t = 0:0.1:2*pi;
x = 3*cos(t);
y = sin(t);
subplot(2, 2, 1); plot(x, y); axis normal
subplot(2, 2, 2); plot(x, y); axis square
subplot(2, 2, 3); plot(x, y); axis equal
subplot(2, 2, 4); plot(x, y); axis equal tight
%圖軸的說明文字,可舉例如下:
subplot(1,1,1);
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = exp(-x);
plot(x, y1, '--*', x, y2, ':o');
xlabel('t = 0 to 2\pi');
ylabel('values of sin(t) and e^{-x}')
title('Function Plots of sin(t) and e^{-x}');
在圖形上面加入說明文字,可用text 或gtext 指令。
text 指令的使用語法為text(x, y, string),其中x、
y 是說明文字的起始座標位置,string則代表 說明文字,舉例如下:
x = 0:0.1:2*pi;
plot(x, sin(x), x, cos(x));
text(pi/4, sin(pi/4),'\leftarrow sin(\pi/4) = 0.707');
text(5*pi/4, cos(5*pi/4),'cos(5\pi/4) = -
0.707\rightarrow', 'HorizontalAlignment', 'right');
「HorizontalAlignment」及「right」指示text 指令將 文字向右水平靠齊。
gtext 的使用語法為gtext(string),待您使用滑鼠在圖
上點選一位置後,string 即顯示在其上。需注意的是,
gtext 只能用在二維平面繪圖。
在上頁程式加入gtext(‘I got you’)。
向量繪圖指令
compass(x, y):繪製座標[x, y]對原點的向量圖形。
feather(x, y):繪製座標[x, y]在水平線上的向量圖形。
quiver(x, y):用來在座標為(x,y)上畫出向量方向[u, v],大小為s的箭頭,通常用來說明一個函數或曲 線的梯度。
%** vector plot **%
x=[-3 1 -2 5 ];y=[2 3 -4 -2 ];
subplot(221);
compass(x,y);
subplot(222);
feather(x,y);
subplot(212)
r=0:0.2:4;t=1./(r.^3-r+1);
u=gradient(r,0.2);
quiver(r,t,u,v,1);
hold on;plot(r,t);
果已知資料的誤差範圍,就可用errorbar 來表示。下 例以y 座標高度的20% 作為做資料的誤差範圍:
x = linspace(0,2*pi,30); % 在 0 到2π 間,等分取30 個 點
y = sin(x);
e = y*0.2;
errorbar(x,y,e) % 圖形上加上誤差範圍 e
fplot 指令來進行較精確的取點作圖,他會對劇烈變 化處進行較密集的取樣,例如:
fplot('sin(1/x)', [0.02 0.2]); % [0.02 0.2]是繪圖範圍
產生極座標圖形,可用polar 指令:
theta = linspace(0, 2*pi);
r = cos(4*theta);
polar(theta, r); % 進行極座標繪圖
對於大量的資料,可用hist 指令來繪製統計上常用 的「質方圖」(Histogram),以顯示資料的分佈情 況和統計特性。hist 指令可將資料依大小分成數堆,
並將每堆的個數畫出。例如,欲將10000 個由randn 產生的正規分佈之亂數分成25 堆,可進行如下:
x = randn(10000, 1); % 產生10000 個正規分佈亂數
hist(x, 25);
% 繪出質方圖,顯示 x 資料的分佈情況和統計特性,
% 數字 25 代表資料依大小分堆的堆數,即是指方 圖內長條的個數
set(findobj(gca, 'type', 'patch'), 'edgecolor', 'w');
% 上例set 指令將長條圖的邊緣設定成白色,詳細使
用語法請參考本書第八章「握把式圖形及 GUI 設計」
極座標繪製表示。其產生圖形類似玫瑰花瓣,故以
「rose」名之。舉例如下:
x = randn(5000, 1);
rose(x);
% x 資料大小為角度,x 資料個數為距離,
% 進行繪製類似玫瑰花瓣的極座標質方圖
使用compass 指令,可畫出一組以原點為起始點的 向量圖,稱為「羅盤圖」,例如:
theta = linspace(0,2*pi, 50);
rho = sin(0.5*theta);
[x, y] = pol2cart(theta, rho); % 由極座標轉換至直角 座標
compass(x, y); % 畫出以原點為向量起始點的羅盤圖
雙y軸座標繪圖指令
雙y軸座標繪圖指令: plotyy
plotyy(x1,y1,x2,y2): 將(x1,y1)關係圖繪出,但y軸 的記標則顯示在左邊的y軸上;將(x2,y2)繪出,但 y軸的記標則顯示在右邊的y軸上。
plotyy(x1,y1,x2,y2, FUN): 與上相似,但可以用 FUN字串來代表所要繪製座標圖類別。
`plot’:一般的線性直角座標
`semilogx’: x-軸為對數座標。
‘semilogy’: y-軸為對數座標。
`loglog’: x-軸、y-軸均為對數座標。
`stem’: 離散顯示的座標。
.
.
plotyy(x1,y1,x2,y2, FUN1, FUN2): 與上相似,差別 是可以分別對(x1,y1)及(x2,y2)來設定所要繪製座 標圖類別。
%** plotyy **%
r=0:0.1:4;
t=1./(r.^3-r+1);
plotyy(r,t,r,t,'plot','semilogy');
三維立體圖
surf(x, y, z)與mesh(x,y,z)相似,唯前者表現出立體 圖形中色彩;後者則為格線。
%** surf **%
x=0:0.1:4;
y=0:0.1:4;
[x,y]=meshgrid(linspace(0,4,40),linspace(0,4,40));
z=1./(x.^3-x+1)+1./(y.^2-y+1);
surf(x,y,z)
shading interp; %使格線消失
countour3(x,y,z,n)及countourf(x,y,z,n): 前者三維空 間等高線,n為等高線條數;後者為塗滿彩色。
%** contour3 **%
[x,y]=meshgrid(linspace(0,4,40),linspace(0,4,40));
z=1./(x.^3-x+1)+1./(y.^2-y+1);
subplot(211)
contour3(x,y,z,10)
subplot(212)
contourf(x,y,z,10)
subplot(111)
%** contour **%
x=0:0.1:4;
y=0:0.1:4;
[x,y]=meshgrid(linspace(0,4,40),linspace(0,4,40));
z=1./(x.^3-x+1)+1./(y.^2-y+1);
subplot(111)
contour(x,y,z,10);
hold on;
[u,v]=gradient(z,1); % [FX,FY] = GRADIENT(F,H) 近似梯度,以F矩陣之數值梯度回應,H為純量為 點間數,在X方向上FX相對於dF/dX,在Y方向上 FY相對於dF/dY
quiver(x,y,u,v,0.5); %繪製在(x,y)點之速度向量(u, v)
hold off;
surfc(x, y, z)與meshc(x,y,z):與surf(x, y, z)和
mesh(x,y,z)相似,表現出立體圖外也繪出等高線 圖。
%** meshc&surfc **%
[x,y]=meshgrid(linspace(0,4,40),linspace(0,4,40));
z=1./(x.^3-x+1)+1./(y.^2-y+1);
subplot(211)
meshc(x,y,z)
subplot(212)
surfc(x,y,z)
shading interp;%利用內插重新以較高速率擷 取資料,以原來速率乘於X倍擷取向量X
subplot(111)