Chapter 1 An Introduction to MATLAB.docx
- 文档编号:6229496
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:22
- 大小:63.12KB
Chapter 1 An Introduction to MATLAB.docx
《Chapter 1 An Introduction to MATLAB.docx》由会员分享,可在线阅读,更多相关《Chapter 1 An Introduction to MATLAB.docx(22页珍藏版)》请在冰豆网上搜索。
Chapter1AnIntroductiontoMATLAB
Chapter1AnIntroductiontoMATLAB
MATLAB:
♦AsoftwarepackageproducedbyMathWorks
♦ThenameMATLABisderivedfromtheterm“matrixlaboratory”
♦可用單一指令立刻執行的模式(commandwindow),或先將一串指令編成script,產生附檔名為.m的檔案,再輸入檔名執行
♦providetheuserwith
(i)easymanipulationofmatrixstructure
(ii)powerfulbuilt-inroutines
(iii)powerful2d,3dgraphingfacilities
(iv)ascriptingsystem,方便使用者發展自己所需軟體,或修改內建程式
(v)toolbox,針對不同用途設計的工具箱,可另外擴充
MATLAB視窗環境說明:
♦commandwindow:
用來輸入指令及顯示結果,可按「」鍵快速顯示上一次輸入的指令
♦workspace:
紀錄變數資訊
♦commandhistory:
記錄輸入過的指令,可直接點兩下執行
§1.3MatricesandMatrixOperations
♦name(命名法則):
字母為首(有區分大小寫),後接字母或數字
♦createa33matrix(在commandwindow裡)
e.g.:
輸入:
A=[135;101;509](注意:
1,3間有空一格)
同理,
輸入:
B=[1351;2612;10728]
♦addition,subtraction,multiplication:
C=A+B,D=A-B,E=A*B,F=2*A
♦注意:
一個statement後面若是以分號(;)結束,則結果不會顯示出來
例如:
>>A=[135;101;509];
不會輸出結果
♦矩陣A的transpose(轉置):
數學上的表示法為At或AT,MATLAB表成A.'及A'
§1.4UsingtheMATLABOperation\forMatrixDivision
A:
squarematrix,x,b:
columnvectors
解Ax=b的方法有:
(1)Gauss-JordanElimination
(2)findA-1,x=A-1b
在MATLAB裡可直接輸入:
x=A\b
§1.5ManipulatingtheElementsofaMatrix
♦表示法
A(i,j):
矩陣A在第i個row(列),第j個column(行)的元素
A(:
j):
columnjofA
A(i,:
):
rowiofA
A(:
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=
1234
90-1-2
>>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裡原先的值依序放入至填滿
e.g.:
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
Example:
>>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.'
b=
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
表示要產生一個rowvector:
[-2-1.8-1.6…1.82]
>>z=[1:
34:
2:
810:
1:
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
Example:
>>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,因為矩陣的加減本來就是元素對元素的運算)
Example:
>>a=[12;34];
>>b=[56;78];
>>a*b
ans=
1922
4350
>>a.*b
ans=
512
2132
>>a.^b
ans=
164
218765536
>>a./b
ans=
0.20000.3333
0.42860.5000
>>b.\a%注意:
a./b=b.\a
ans=
0.20000.3333
0.42860.5000
§1.11DataStructureinMATLAB
(1)characterarray(字元陣列)
※設定變數為字元或字串
>>x=abc
x=
abc
>>x
(2)%取出x字串裡的第二個字母
ans=
b
>>z=[xxyz]%將兩個字串連接起來
z=
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)
ans=
h
>>sa1(4,4)
ans=
(空白位元,因char函數加了多餘空白之故)
(2)cellarray(細胞陣列或異質陣列):
將不同size或不同type的資料放在同一陣列之中,每份資料放在一個cell裡
Example:
>>a={maths;physics;history;IT}
a=
maths
physics
history
IT
>>p=a
(2)%取出a的第二個component
p=
physics
>>a(3:
4)
ans=
history
IT
>>cont=a{3}%取出a的第三個cell的內容
cont=
history
>>cont(4)%取出cont字串的第四個字元(因沒有符號,故可取出)
ans=
t
※一個cellarray也可以由cell函數產生
Example:
>>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]'test'
[33double][]%double表示倍精確度,f的內容並未真正顯示
※Anequivalentwayofgeneratingf
>>f={[2]'test';[ones(3)][]}
※f{2,1}的內容要詳細的顯示,要使用celldisp函數
>>celldisp(f)
f{1,1}=
2
f{2,1}=
111
111
111
f{1,2}=
test
f{2,2}=
[]
(3)structure(結構陣列):
一個structure是由數個field所組成,每個field可以是不同型態的資料,structure跟cellarray很像,主要差別在field有名字而cell沒有
Example:
建一個structure“StudentRecords”,其中包含三個field如下:
NameField,FeesField,SubjectField
我們先把學生資料放進3個cellarrays:
names,feesandsubjects
>>names={'ABest','DGood','SGreen','JJones'}
names=
'ABest''DGood''SGreen''JJones'
>>fees={333450200800}
fees=
[333][450][200][800]
>>subjects={'cs','cs','maths','eng'}
subjects=
'cs''cs''maths''eng'
>>StudentRecords=struct('NameField',names,'FeesField',fees,'SubjectField',subjects)
StudentRecords=
14structarraywithfields:
NameField
FeesField
SubjectField
※若要取出第一個學生的資料:
>>StudentRecords
(1)
ans=
NameField:
'ABest'
FeesField:
333
SubjectField:
'cs'
※若要取出第二個學生的SubjectField資料:
>>StudentRecords
(2).SubjectField
ans=
cs
※要更新資料:
>>StudentRecords(3).FeesField=1000;%先不顯示,就算顯示也是如本頁紅字處
>>StudentRecords(3).FeesField
ans=
1000
※要新增第五個學生時,可直接設定:
>>StudentRecords(5).NameFiled='TLee'
也可一筆一筆設定:
>>StudentRecords(5)=struct('NameField','TLee','FeesField',200,'SubjectField','maths')
(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是設定小數後的位數。
Example:
>>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:
')
輸入字串:
a=input('Pleaseinputthevalueofa:
','s')
讀入大量data的檔案:
loadfilename
§1.13MATLABGraphics
MATLAB提供的繪圖功能可以用script呼叫或在commandwindow直接叫出
※plot函數:
plot(x,y):
用描點的方式繪出向量x對y的圖,若x跟y都是矩陣,則以columnbycolumn的方式畫出
Example:
則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
Symbol
Color
Character
solid
-
point
.
yellow
y
dashed
--
plus
+
red
r
dotted
:
star
*
green
g
dashdot
-.
circle
o
blue
b
xmark
x
black
k
Example:
(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軸
Example:
(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函數之後
Example:
(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
xlabel('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:
4;
y=f101(x);%callthefunctionf101
plot(x,y,'r');
xlabel('x');ylabel('y');
figure
(2);%將後面出現的圖放在figureNo.2視窗裡
fplot('f101',[24]);
xlabel('x');ylabel('y');
※subplot函數:
可將視窗做分割
用法:
subplot(p,q,r):
視窗分割成pq個,將圖形畫在第r個小視窗裡。
例:
將視窗切成23個小視窗
(ch1_3.m,figure1.13.4.Exampleoftheuseofsubplot)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Chapter An Introduction to MATLAB