Chapter 1 An Introduction to MATLABWord格式.docx
《Chapter 1 An Introduction to MATLABWord格式.docx》由会员分享,可在线阅读,更多相关《Chapter 1 An Introduction to MATLABWord格式.docx(22页珍藏版)》请在冰豆网上搜索。
A(i,j):
矩陣A在第i個row(列),第j個column(行)的元素
A(:
j):
columnjofA
A(i,:
):
rowiofA
4:
9):
allthe4th~9thcolumnsofA(是A的子矩陣)
♦矩陣內的entries可分別自行運算
e.g.:
X(1,3)=C(4,5)+V(9,1)
Example:
(assignamatrix)(>
後面為自行輸入的部分)
A=[1234;
5678;
90-1-2]
A=
1234
5678
90-1-2
v=[13];
b=A(v,2)
b=
2
0
c=A(v,:
)
c=
d=zeros
(2);
%產生22的零矩陣,注意MATLAB用%表示後面是註解
d(:
1)=A(v,2)
d=
20
00
e=A(2:
3,3:
4)
e=
78
-1-2
♦reshape函數:
把mn的矩陣轉換成cd的矩陣(注意:
mn=cd)
做法:
將每個column裡原先的值依序放入至填滿
p=
2345
3579
-2-3-4-5
reshape(p,6,2)
ans=%沒有定義output變數時,用ans表示
24
37
-2-4
35
59
-3-5
1.6TransposingMatrices
※符號:
“'
”表示complexconjugatetranspose(共軛及轉置)
“.'
”表示transposewithoutconjugation
a=[1+2i3+5i;
4+2i3+4i]
a=
1+2i3+5i
4+2i3+4i
b=a'
b=
1-2i4-2i
3-5i3-4i
c=a.'
1+2i4+2i
3+5i3+4i
1.7SpecialMatrices
ones(m,n):
mn的全為1的矩陣(當矩陣size是nn時,可簡寫成ones(n))
zeros(m,n):
mn的全為0的矩陣
rand(m,n):
mn的亂數矩陣(數值為[0,1]間的均勻分佈)
randn(m,n):
mn的亂數矩陣(數值為N(0,1)之常態分佈)
eye(n):
nn的identitymatrix,即對角線上都是1,其餘都是0的方陣
B=zeros(size(A)):
B是跟矩陣A之size相同的零矩陣
1.8GeneratingMatriceswithSpecifiedElementValues
※產生連續數字
x=-10:
1:
10(起始值-10,間距為1,最末值10)
表示要產生一個rowvector:
[-10-9-8…01…910]
y=-2:
.2:
[-2-1.8-1.6…1.82]
z=[1:
34:
2:
810:
12]
z=
123468101112
※由一個矩陣產生更複雜的矩陣
C=[2.34.9;
0.93.1];
D=[Cones(size(C));
eye(size(C))zeros(size(C))]
D=
2.34.911
0.93.111
1000
0100
1.9SomeSpecialMatrixOperations
A^p:
矩陣A的p次方
D=sqrtm(A):
A=D2
sqrt(A):
矩陣A的每個元素都開根號
expm(A):
Ae
a=[12;
34]
a=
12
34
t=sqrtm(a)
t=
0.5537+0.4644i0.8070-0.2124i
1.2104-0.3186i1.7641+0.1458i
t^2%t^2=a
ans=
1.0000+0.0000i2.0000+0.0000i
3.0000+0.0000i4.0000+0.0000i
t1=sqrt(a)
t1=
1.00001.4142
1.73212.0000
1.10Element-by-ElementOperations(兩個矩陣間元素對元素的運算)
做法:
在運算元之前加一個“.”,如:
x.^y,x.*y,x./y等
(沒有x.+y跟x.-y,因為矩陣的加減本來就是元素對元素的運算)
34];
b=[56;
78];
a*b
ans=
1922
4350
a.*b
512
2132
a.^b
164
218765536
a./b
ans=
0.20000.3333
0.42860.5000
b.\a%注意:
a./b=b.\a
1.11DataStructureinMATLAB
(1)characterarray(字元陣列)
※設定變數為字元或字串
x=abc
x=
abc
x
(2)%取出x字串裡的第二個字母
b
z=[xxyz]%將兩個字串連接起來
abcxyz
※字串可以排成array形式
sa=[exit;
oval;
rock]
sa=
exit
oval
rock
sa1=[maths;
physics;
history;
IT]
?
Allrowsinthebracketedexpressionmusthavethesamenumberofcolumns
(出現錯誤訊息,因column數目不同,即每個字串長度不同)
※若改用char函數,它會加入多餘的空白來克服上述問題
sa1=char(maths,physics,history,IT)
sa1=
maths
physics
history
IT
※取出上面stringarray中元素的方式跟matrix一樣
sa1(2,2)
h
sa1(4,4)
(空白位元,因char函數加了多餘空白之故)
(2)cellarray(細胞陣列或異質陣列):
將不同size或不同type的資料放在同一陣列之中,每份資料放在一個cell裡
a={maths;
IT}
maths
physics
history
IT
p=a
(2)%取出a的第二個component
p=
a(3:
cont=a{3}%取出a的第三個cell的內容
cont=
cont(4)%取出cont字串的第四個字元(因沒有符號,故可取出)
t
※一個cellarray也可以由cell函數產生
f=cell(2,2)%產生22的emptycellarray
f=
[][]
f{1,1}=2;
%assign第一個cell內的資料是數字2
f{1,2}='
test'
;
%assign第一列第二個cell內的資料是字串
f{2,1}=ones(3)%assign第二列第一個cell裡是一個33全為1的矩陣
f=
[2]'
[33double][]%double表示倍精確度,f的內容並未真正顯示
※Anequivalentwayofgeneratingf
f={[2]'
[ones(3)][]}
※f{2,1}的內容要詳細的顯示,要使用celldisp函數
celldisp(f)
f{1,1}=
f{2,1}=
111
111
f{1,2}=
test
f{2,2}=
[]
(3)structure(結構陣列):
一個structure是由數個field所組成,每個field可以是不同型態的資料,structure跟cellarray很像,主要差別在field有名字而cell沒有
建一個structure“StudentRecords”,其中包含三個field如下:
NameField,FeesField,SubjectField
我們先把學生資料放進3個cellarrays:
names,feesandsubjects
names={'
ABest'
'
DGood'
SGreen'
JJones'
}
names=
'
fees={333450200800}
fees=
[333][450][200][800]
subjects={'
cs'
maths'
eng'
}
subjects=
StudentRecords=struct('
NameField'
names,'
FeesField'
fees,'
SubjectField'
subjects)
StudentRecords=
14structarraywithfields:
NameField
FeesField
SubjectField
※若要取出第一個學生的資料:
StudentRecords
(1)
NameField:
FeesField:
333
SubjectField:
※若要取出第二個學生的SubjectField資料:
StudentRecords
(2).SubjectField
cs
※要更新資料:
StudentRecords(3).FeesField=1000;
%先不顯示,就算顯示也是如本頁紅字處
StudentRecords(3).FeesField
1000
※要新增第五個學生時,可直接設定:
StudentRecords(5).NameFiled='
TLee'
也可一筆一筆設定:
StudentRecords(5)=struct('
200,'
(4)其他:
MATLAB也提供其他的函數來轉換資料的型態:
cell2struct
struct2cell
num2cell
str2num
num2str:
doubleprecisionnumberstring
int2str
mat2str
full:
sparsematrixfullmatrix
sparse:
fullmatrixsparsematrix
double:
doubleprecision
1.12InputandOutputinMATLAB
※取消指令結尾的“;
”號即可顯示結果,但一般來說較亂,較沒有組織。
※用disp函數呈現較清楚的結果(文字及數字)
(1)顯示矩陣A:
disp(A)
(2)顯示字串,加單引號:
disp('
thiswilldisplaythistext'
(3)顯示字串組合,加中括號:
x=2.678;
disp(['
Valueofiterateis'
num2str(x),'
atthisstage'
])
Valueofiterateis2.678atthisstage
※用fprintf函數將結果依指定的格式輸出至螢幕或檔案,其形式為:
fprintf(‘filename’,‘formatstring’,list);
其中,filename的部分是optional,若省略則輸出至螢幕。
list的部分放的是變數的名稱,多個變數時要用逗號隔開。
formatstring的設定格式如下:
%P.Qe表示指數的格式
%P.Qf表示fixedpoint(定點格式)
%P.Qgbecomes%P.Qeor%P.Qfwhicheverisshorter
\n換行
上述符號中的P跟Q都是可以自行設定的整數,其中P是設定field寬度(含小數點),Q是設定小數後的位數。
x=1007.46;
y=2.1278;
k=17;
fprintf('
\nx=%8.2fy=%8.6fk=%2.0f\n'
x,y,k);
x=1007.46y=2.127800k=17
fprintf('
x=%3.1f'
x);
x=1007.5
※由鍵盤取得輸入的文數字之法:
輸入數字或矩陣:
a=input('
Pleaseinputthevalueofa:
輸入字串:
s'
讀入大量data的檔案:
loadfilename
1.13MATLABGraphics
MATLAB提供的繪圖功能可以用script呼叫或在commandwindow直接叫出
※plot函數:
plot(x,y):
用描點的方式繪出向量x對y的圖,若x跟y都是矩陣,則以columnbycolumn的方式畫出
則plot(x,y)會畫三條線(因有三個column)如下:
第一條通過:
(0,0),(1,1),(2,2),(3,3)
第二條通過:
(1,2),(2,4),(3,6),(4,8)
第三條通過:
(2,6),(3,9),(4,12),(5,15)
plot(x1,y1,‘type1’,x2,y2,‘type2’):
以type1的形式畫第一對向量(x1,y1),以type2的形式畫第二對向量(x2,y2)
※plot函數裡可使用的type:
Lines
Symbol
Points
Color
Character
solid
-
point
.
yellow
y
dashed
--
plus
+
red
r
dotted
:
star
*
green
g
dashdot
-.
circle
o
blue
xmark
x
black
k
(ch1_plot.m,Anexampleofplotfunction)
x=0:
0.5:
4*pi;
%在0到4π間每隔0.5取一點
y=sin(x);
plot(x,y,'
g:
*'
)%綠色,點線,mark為*(type的順序沒有影響)
※整理:
(MATLAB基本二維繪圖指令)
plot:
x軸跟y軸都是線性刻度
loglog:
x軸跟y軸都是對數刻度
semilogx:
x軸為對數刻度,y軸是線性刻度
semilogy:
x軸是線性刻度,y軸為對數刻度
plotyy:
畫出兩個不同刻度的y軸
(ch1_plotyy.m,Anexampleofplotyyfunction)
x=linspace(0,2*pi);
%在0到2π間,等分取100個點
y1=sin(x);
y2=exp(-x);
plotyy(x,y1,x,y2)%針對y1及y2兩線,畫出兩個不同刻度的y軸
(左邊是y1的,右邊是y2的)
※修改圖軸標題、格線、軸界及其他設定等:
title('
title'
):
在圖形上方顯示標題
xlabel('
x_axis_name'
顯示x軸名稱
ylabel('
y_axis_name'
顯示y軸名稱
gridon/off:
畫出或取消圖形上的格線
text(x,y,‘text-at-x,y’):
在圖形中的(x,y)位置顯示文字
gtext(‘text’):
使用滑鼠決定文字位置
axis([xmin,xmax,ymin,ymax]):
指定x軸及y軸的上下限
holdon/off:
將holdon之後出現的圖形放在同一個figure視窗裡(off則取消)
ginput:
將游標點下的(x,y)座標資訊取出([x,y]=ginput可取多點,按Enter結束,[x,y]=ginput(n)可取恰好n點)
clf函數:
將視窗內的圖形清除
注意:
上述指令需出現在plot函數之後
(ch1_1.m)
%figure1.13.1.Superimposedgraphsobtainedusingplot(x,y)andholdstatements.
x=-4:
0.05:
4;
y=exp(-0.5*x).*sin(5*x);
figure
(1);
plot(x,y,'
r'
);
%thegraphappearsinFigureNo.1
x-axis'
ylabel('
y-axis'
holdon;
%將之後出現的圖放在同一個視窗裡
y=exp(-0.5*x).*cos(5*x);
plot(x,y);
grid;
gtext('
Twotails...'
%"
grid"
and"
gridon"
isthesame
[x,y]=ginput%getinformationfromgraphs
holdoff
※fplot函數:
給定函數及函數的x軸範圍,由fplot自己選擇適當的x點來畫圖,故比plot函數畫出的逼真。
例:
函數為
存成f101.m檔如下:
functionv=f101(x)
v=sin(x.^3);
ch1_2.m檔:
%figure1.13.2.Plotofy=sin(x^3)using75equispacedplottingpoints.
%figure1.13.3.Plotofy=sin(x^3)usingthefunctionfplot.
x=2:
.04:
y=f101(x);
%callthefunctionf101
x'
y'
figure
(2);
%將後面出現的圖放在figureNo.2視窗裡
fplot('
f101'
[24]);
※subplot函數:
可將視窗做分割
用法:
subplot(p,q,r):
視窗分割成pq個,將圖形畫在第r個小視窗裡。
將視窗切成23個小視窗
(ch1_3.m,figure1.13.4.Exampleoftheuseofsubplot)