《計算機(jī)仿真技術(shù)復(fù)習(xí)總結(jié).doc》由會員分享,可在線閱讀,更多相關(guān)《計算機(jī)仿真技術(shù)復(fù)習(xí)總結(jié).doc(16頁珍藏版)》請在裝配圖網(wǎng)上搜索。
計算機(jī)仿真技術(shù)復(fù)習(xí)總結(jié)
y=zeros(m,n)
兩個作用:①為矩陣y賦初值
②為矩陣y分配mn的存儲空間
sum(x):矩陣各列元素的和
幾個取整函數(shù)的區(qū)別:
round
4舍5入到整數(shù)
fix
向最接近0取整
floor
向最接近-∞取整
ceil
向最接近+∞取整
exp
自然指數(shù)
log
自然對數(shù)
log10
以10為底的對數(shù)
數(shù)組尋址:
1.通過對數(shù)組下標(biāo)的訪問來實現(xiàn)數(shù)組尋址
>> A=1:6
A =1 2 3 4 5 6
訪問單個元素時,直接采用訪問下標(biāo)的方法。
>> A(4)
ans =4
一次訪問一塊數(shù)據(jù)(即訪問數(shù)組中的連續(xù)元素),可以使用冒號。
>> A(2:6)
ans =2 3 4 5 6
訪問多個不連續(xù)的元素,可以使用中括號。
>> A([1 3 4 6])
ans =1 3 4 6
end參數(shù)用來表示數(shù)組的結(jié)尾。
>> A(3:end)
ans =3 4 5 6
圖形對象屬性:包括屬性名與屬性值
用get函數(shù)獲取屬性值
用set函數(shù)設(shè)置屬性值
2.1矩陣和數(shù)組的概念
標(biāo)量(Scalar):是指11的矩陣,即只含一個數(shù)的矩陣。
向量(Vector):是指1n或n1的矩陣,即只有一行或者一列的矩陣。
矩陣(Matrix):是一個矩形的數(shù)組,即二維數(shù)組,其中向量和標(biāo)量都是矩陣的特例,00矩陣為空矩陣([])。
數(shù)組(Array):是指n維的數(shù)組,為矩陣的延伸,其中矩陣和向量都是數(shù)組的特例。
復(fù)數(shù)由實部和虛部組成,MATLAB用特殊變量“i”和“j”表示虛數(shù)的單位。
z=a+b*i或z=a+b*j
z=a+bi或z=a+bj(當(dāng)b為常量時)
z=r*exp(i*theta)
得出一個復(fù)數(shù)的實部、虛部、幅值和相角。
a=real(z) %計算實部
b=imag(z) %計算虛部
r=abs(z) %計算幅值
t=angle(z) %計算相角
1. 變量的命名規(guī)則
區(qū)分字母的大小寫。例如,“a”和“A”是不同的變量。
不能超過63個字符,第63個字符后的字符被忽略。
必須以字母開頭,變量名的組成可以是任意字母、數(shù)字或者下劃線,但不能含有空格和標(biāo)點(diǎn)符號(如,。%等)。例如,“6ABC”、“AB%C”都是不合法的變量名。
關(guān)鍵字(如if、while等)不能作為變量名。
1. 通過顯式元素列表輸入矩陣
例如:>> c=[1 2;3 4;5 3*2]
% [ ]表示構(gòu)成矩陣,分號分隔行,空格分隔元素
2.通過語句生成矩陣
(1) 使用from:step:to方式生成向量
from、step和to分別表示開始值、步長和結(jié)束值。當(dāng)step省略時則默認(rèn)為step=1。
使用“from:step:to”方式生成以下矩陣。
x1=2:5
x1 =2 3 4 5
x2=5:-1:2
x2 =5 4 3 2
x3=2:-1:3 %空矩陣
x3 =Empty matrix: 1-by-0
X4=2:-1:0.5
X4 =2 1
x5=[1:2:5;1:3:7] %兩行向量構(gòu)成矩陣
x5 =
1 3 5
1 4 7
(2) 使用linspace和logspace函數(shù)
linspace(a,b,n)
a、b、n分別表示開始值、結(jié)束值和元素個數(shù),n如果省略則默認(rèn)值為100 。
logspace(a,b,n)
a、b、n分別表示開始值10a 、結(jié)束值10b和數(shù)據(jù)個數(shù),n,如果省略則默認(rèn)值為50 。
3. 由矩陣生成函數(shù)產(chǎn)生特殊矩陣
zeros(m,n) 產(chǎn)生mn的全0矩陣
ones(m,n) 產(chǎn)生mn的全1矩陣
rand(m,n) 產(chǎn)生均勻分布的隨機(jī)矩陣,元素取值范圍0.0~1.0。
randn(m,n) 產(chǎn)生正態(tài)分布的隨機(jī)矩陣
magic(N) 產(chǎn)生N階魔方矩陣(矩陣的行、列和對角線上元素的和相等)
eye(m,n) 產(chǎn)生mn的單位矩陣
zeros、ones、rand、randn和eye函數(shù)當(dāng)只有一個參數(shù)n時,則為nn的方陣;
當(dāng)eye(m,n)函數(shù)的m和n參數(shù)不相等時則單位矩陣會出現(xiàn)全0行或列。
2.2.2 矩陣元素
1. 矩陣的下標(biāo)(Subscript)
(1) 全下標(biāo)方式
一個mn的a矩陣的第i行第j列的元素表示為a(i,j)。
(2) 單下標(biāo)方式
以mn的矩陣a為例,若元素a(i,j)則對應(yīng)的“單下標(biāo)”為s= (j-1)m+i。
2. 子矩陣塊的產(chǎn)生
子矩陣是從對應(yīng)矩陣中取出一部分元素構(gòu)成,用全下標(biāo)和單下標(biāo)方式取子矩陣。
(1) 用全下標(biāo)方式
取行數(shù)為1、3,列數(shù)為2、3的元素構(gòu)成子矩陣。
a([1 3],[2 3])
ans =
2 0
6 9
取行數(shù)為1~3,列數(shù)為2~3的元素構(gòu)成子矩陣,“1:3”表示1、2、3行下標(biāo)。
a(1:3,2:3)
ans =
2 0
4 0
6 9
(2) 用單下標(biāo)方式
取單下標(biāo)為1、3、2、6的元素構(gòu)成子矩陣。
a([1 3;2 6])
ans =
1 5
3 6
3. 矩陣的賦值
矩陣的賦值有:全下標(biāo)方式、單下標(biāo)方式和全元素方式。
4. 矩陣元素的刪除
可以對矩陣的單個元素、子矩陣塊和所有元素賦值為空矩陣進(jìn)行刪除操作 ,就是簡單地將其賦值為空矩陣(用[]表示)。
EX:
a(:,3)=[] %刪除一列元素
a(1)=[] %刪除一個元素,矩陣變?yōu)橄蛄?
a=[] %刪除所有元素為空矩陣
5. 生成大矩陣(Concatenating Matrices)
可以通過方括號“[]”實現(xiàn)將小矩陣生成一個較大的矩陣。
例:[a;a] 與[a,a]的區(qū)別
6. 常用矩陣翻轉(zhuǎn)函數(shù):
flipud(X)
使矩陣X沿水平軸上下翻轉(zhuǎn)
fliplr(X)
使矩陣X沿垂直軸左右翻轉(zhuǎn)
rot90(X)
使矩陣X逆時針旋轉(zhuǎn)900
2.2.3 字符串(Character Arrays)
一個字符串由多個字符組成,用單引號(’’)來界定。字符串是按行向量進(jìn)行存儲的。
1. 字符串占用的字節(jié)
每一個字符會占用兩個字節(jié)。
>> str2=I like MATLAB
%重復(fù)單引號來輸入含有單引號的字符串
2. 字符串函數(shù)
length:用來計算字符串的長度。
double:用來查看字符串的ASCII碼儲存內(nèi)容。
char:用來將ASCII碼轉(zhuǎn)換成字符串形式。
class或ischar:用來判斷某一個變量是否為字符串。
3. 使用一個變量來儲存多個字符串
(1) 多個字符串組成一個新的行向量
將多個字符串變量直接用“,”連接,構(gòu)成一個行向量,就可以得到一個新字符串變量。
(2) 使用二維字符數(shù)組
將每個字符串放在一行,多個字符串可以構(gòu)成一個二維字符數(shù)組,但必須先在短字符串結(jié)尾補(bǔ)上空格符,以確保每個字符串(即每一行)的長度一樣。否則會提示出錯:
(3) 使用str2mat、strvcat和char函數(shù)
使用專門的str2mat、strvcat和char函數(shù)可以構(gòu)造出字符串矩陣,而不必考慮每行的字符數(shù)是否相等,總是按最長的設(shè)置,不足的末尾用空格補(bǔ)齊。
例如:
>> str6=str2mat(str1,str2,str3)
5. 執(zhí)行字符串
使用eval命令直接“執(zhí)行”某一字符串。
6. 顯示字符串
直接使用disp命令顯示字符串。
>> disp(請輸入2*2的矩陣a)
矩陣運(yùn)算的函數(shù)
det(X):計算方陣行列式
rank(X):求矩陣的秩,得出的行列式不為零的最大方陣邊長。
inv(X):求矩陣的逆陣。 inv(X)=X-1
[v,d]=eig(X):計算矩陣特征值和特征向量
diag(X):產(chǎn)生X矩陣的對角陣
[v,d]=eig(X) 計算矩陣特征值和特征向量。如果方程Xv=vd存在非零解,則v為特征向量,d為特征值。
(1) 矩陣和數(shù)組的加(addition)、減運(yùn)算(subtraction)
矩陣加、減運(yùn)算表達(dá)式分別為“A+B”、“A-B”。
(2) 矩陣和數(shù)組的乘法運(yùn)算(muliplication)
矩陣的乘法運(yùn)算表達(dá)式為“A*B” 。
矩陣A的列數(shù)必須等于矩陣B的行數(shù),除非其中有一個是標(biāo)量。
數(shù)組的乘法運(yùn)算表達(dá)式為“A.*B” ,表示數(shù)組A和B中的對應(yīng)元素相乘。A和B數(shù)組必須大小相同,除非其中有一個是標(biāo)量。
(3) 矩陣和數(shù)組的除法
矩陣除法可以用來方便地解線性方程組:
AX=B X=A\B
A*X=B X= inv(A)*B=A\B
矩陣運(yùn)算符為“\”和“/”分別表示左除和右除。
A\B=A-1*B
A/B=A*B-1。
其中:A-1是矩陣的逆,也可用inv(A)求逆矩陣。
數(shù)組的除法運(yùn)算表達(dá)式
“A.\B”和“A./B”,分別為數(shù)組的左除和右除,表示數(shù)組相應(yīng)元素相除。
A和B數(shù)組必須大小相同,除非其中有一個是標(biāo)量。
【例2.12】已知方程組,用矩陣除法來解線性方程組。
解:將該方程變換成AX=B的形式。
其中:
,
A=[2 -1 3;3 1 -5;4 -1 1];
B=[5;5;9];
X=A\B;
X =2 -1 0
在線性方程組A*X=B中,mn階矩陣A的行數(shù)m表示方程數(shù),列數(shù)n表示未知數(shù)的個數(shù)。
n=m,A為方陣,A\B=inv(A)*B。
m > n,是最小二乘解,X=inv(A’*A)*(A’*B)
m
、>=、 = =(等于)、 ~=(不等于)。
關(guān)系運(yùn)算規(guī)則:
如果兩個標(biāo)量,則結(jié)果為真(1)或假(0)。
如果比較的兩個數(shù)組變量,則必須大小相同,數(shù)組的元素為0或1。
如果比較一個數(shù)組和一個標(biāo)量,則把數(shù)組的每個元素分別與標(biāo)量比較。
<、<= 和 >、>=僅對變量的實部進(jìn)行比較,而= = 和 ~= 則同時對實部和虛部進(jìn)行比較。
邏輯操作符有:&(and)、|(or)、~(not)和xor、&&(先決與)、|| (先決或) 。
在MATLAB中各種運(yùn)算符的優(yōu)先級如下:
(矩陣轉(zhuǎn)置)、^(矩陣冪)和.(數(shù)組轉(zhuǎn)置)、.^(數(shù)組冪) ~(邏輯非) *(乘)、/(左除)、\(右除)和.*(點(diǎn)乘)、./(點(diǎn)左除)、.\(點(diǎn)右除) +、-(加減): (冒號) <、<=、>、>=、~= &(邏輯與) |(邏輯或) &&(先決與) ||(先決或),
邏輯運(yùn)算規(guī)則:在邏輯運(yùn)算中,非0元素表示真(1),0元素表示假(0),邏輯運(yùn)算的結(jié)果為0或1
關(guān)系運(yùn)算和邏輯運(yùn)算:
>> b=[0 1;1 0]
b =
0 1
1 0
>> find(b)
ans = 2 3
>> a=[1,2,3,4,5]
a = 1 2 3 4 5
>> b=a
b = 1 2 3 4 5
>> b(a>=3)=1
b = 1 2 1 1 1
注:關(guān)系和邏輯運(yùn)算很重要。由于MATLAB以0和1表示關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果,所以巧妙利用關(guān)系運(yùn)算和邏輯運(yùn)算能對函數(shù)值進(jìn)行分段處理,即不需條件判斷就能求分段函數(shù)的值。
(3) 函數(shù)運(yùn)算
關(guān)系邏輯函數(shù)
all(A)判斷A的列向量元素是否全非0,全非0則為1
any(A)判斷A的列向量元素中是否有非0元素,有則為1
isequal(A,B)判斷A、B對應(yīng)元素是否全相等,相等為1
isempty(A)判斷A是否為空矩陣,為空則為1,否則為0
isfinite(A)判斷A的各元素值是否有限,是則為1
isinf(A) 判斷A的各元素值是否無窮大,是則為1
isnan(A) 判斷A的各元素值是否為NAN,是則為1
isnumeric(A) 判斷數(shù)組A的元素是否全為數(shù)值型數(shù)組
isreal(A) 判斷數(shù)組A的元素是否全為實數(shù),是則為1
isprime(A) 判斷A的各元素值是否為質(zhì)數(shù),是則為1
isspace(A) 判斷A的各元素值是否為空格,是則為1
find(A) 尋找A數(shù)組非0元素的下標(biāo)和值
2.2、多維數(shù)組的創(chuàng)建
(1) 通過“全下標(biāo)”元素賦值方式創(chuàng)建
(2) 由函數(shù)ones、zeros、rand和randn直接創(chuàng)建
(3) 利用函數(shù)生成數(shù)組
將一系列數(shù)組沿著特定的維連接成一個多維數(shù)組。 cat(維,p1,p2,……)
按指定行列數(shù)放置模塊數(shù)組生成多維數(shù)組repmat(p)。
在總元素的數(shù)目不變的前提下重新確定數(shù)組的行列數(shù)來重組數(shù)組。reshape(p)
多項式按降冪排列為:
p(x)=anxn+an-1xn-1+…+a1x+a0
用行向量表示為:p=[an an-1… a1 a0]
即把多項式的各項系數(shù)按降冪次序排放成行向量,如果多項式中缺某冪次項,則用零代替該冪次項的系數(shù)。
例如: x3+21x2+20x
>> p1=[1 21 20 0]
1. 多項式求值
函數(shù)polyval(p,s)可以用來計算多項式在給定變量時的值。P為多項式,s為給定值
2. 多項式求根
Roots:用來計算多項式的根。
Poly:根據(jù)多項式的根來計算多項式的系數(shù)。
3. 特征多項式
函數(shù)poly計算矩陣的特征多項式的系數(shù)。
特征值用roots函數(shù)來計算。
4. 部分分式展開
用residue函數(shù)來實現(xiàn)將分式表達(dá)式進(jìn)行多項式的部分分式展開。
[r,p,k]=residue(b,a)
[b,a]=residue(r,p,k)
1. 多項式的乘法和除法
多項式的乘法和除法運(yùn)算分別使用函數(shù)conv和deconv來實現(xiàn),這兩個函數(shù)也可以對應(yīng)于卷積和解卷運(yùn)算。
p=conv(pl,p2)
[q,r] = deconv(v,u)
多維數(shù)組:
reshape函數(shù):在總元素的數(shù)目不變的前提下重新確定數(shù)組的行列數(shù)來重組數(shù)組(P55)
reshape(p,行 列 頁 ……)
說明:第一個變量是待重組的數(shù)組p,后面的變量是重新生成數(shù)組的行數(shù)、列數(shù)、頁數(shù)。
>> a=[1,2,3;4,5,6]
a =
1 2 3
4 5 6
>> b=reshape(a,1,6)
注:此處是按單下標(biāo)的方式重組數(shù)組
2. 多項式的微分和積分
多項式的微分由polyder函數(shù)實現(xiàn)。
可以用[p./[length(p):-1:1],k]的方法來完成積分,k為常數(shù)。
第三章
符號計算是可以對未賦值的符號對象(可以是常數(shù)、變量、表達(dá)式)進(jìn)行運(yùn)算和處理。
與數(shù)值運(yùn)算的區(qū)別:
※ 數(shù)值運(yùn)算中必須先對變量賦值,然后才能參與運(yùn)算。
※ 符號運(yùn)算無須事先對獨(dú)立變量賦值,運(yùn)算結(jié)果以標(biāo)準(zhǔn)的符號形式表達(dá)。
3.1 符號表達(dá)式的建立
3.1.1 創(chuàng)建符號常量
符號常量是不含變量的符號表達(dá)式。
sym(‘常量’) %創(chuàng)建符號常量
sym(常量,參數(shù)) %按某種格式轉(zhuǎn)換為符號常量
說明:參數(shù)可以選擇為’d’、’f’、’e’或’r’ 四種格式,也可省略。
EX: >>a=sym(sin(2))
>> a=sym(sin(2),r)
3.1.2 創(chuàng)建符號變量和表達(dá)式
1. 使用sym命令創(chuàng)建符號變量和表達(dá)式
sym(‘變量’,參數(shù)) %把變量定義為符號對象
2.使用syms命令創(chuàng)建符號變量和符號表達(dá)式
syms(‘a(chǎn)rg1’, ‘a(chǎn)rg2’, …,參數(shù))
syms arg1 arg2 …,參數(shù)
例如:
>> f1=sym(‘a(chǎn)*x^2+b*x+c’) %創(chuàng)建表達(dá)式
>> syms a b c x %創(chuàng)建變量
>> f2=a*x^2+b*x+c %創(chuàng)建表達(dá)式
>> syms(a,b,c,x)
>> f3=a*x^2+b*x+c
符號表達(dá)式()中的參數(shù)一定要用 單引號括起來。
3.1.3 符號矩陣
例如,使用sym命令創(chuàng)建的符號矩陣:
>> A=sym([a,b;c,d])
例如,使用syms命令創(chuàng)建相同的符號矩陣:
>> syms a b c d
>> A=[a b;c d]
3.2.1符號表達(dá)式的代數(shù)運(yùn)算
1. 符號運(yùn)算中的運(yùn)算符
基本運(yùn)算符
運(yùn)算符“+”,“-”,“*”,“\”,“/”,“^”分別實現(xiàn)符號矩陣的加、減、乘、左除、右除、求冪運(yùn)算。
運(yùn)算符“.*”,“./”,“.\”,“.^”分別實現(xiàn)符號數(shù)組的乘、除、求冪,即數(shù)組間元素與元素的運(yùn)算。
運(yùn)算符“′”,“.′”分別實現(xiàn)符號矩陣的共軛轉(zhuǎn)置、非共軛轉(zhuǎn)置。
(2)關(guān)系運(yùn)算符
運(yùn)算符“= =”、“~=”分別對運(yùn)算符兩邊的符號對象進(jìn)行“相等”、“不等”的比較。
在Symbolic Math Toolbox中有三種不同的算術(shù)運(yùn)算:
數(shù)值型:MATLAB的浮點(diǎn)運(yùn)算。
有理數(shù)型:Maple的精確符號運(yùn)算。
VPA型:Maple的任意精度運(yùn)算。
任意精度的VPA型運(yùn)算可以使用digits和vpa命令來實現(xiàn)。
digits(n) %設(shè)定默認(rèn)的精度
S=vpa(s,n) %將s表示為n位有效位數(shù)的符號對象
自由變量的確定原則:
符號表達(dá)式“f=ax2+bx+c” 中只有一個變量是獨(dú)立變量:
小寫字母i和j不能作為自由變量。
符號表達(dá)式中如果有多個符號變量,則按照以下順序選擇自由變量:首先選擇x作為自由變量;如果沒有x,則選擇在字母順序中最接近x的字符變量;如果與x相同距離,則在x后面的優(yōu)先。
大寫字母比所有的小寫字母都靠后。
也可以用findsym函數(shù)來自動確定。
3.3.3 符號表達(dá)式的替換(Substitutions)
subs函數(shù):對符號表達(dá)式中符號變量的替換。
subs(s)%用給定值替換符號表達(dá)式s中的所有變量
subs(s,new)%用new替換符號表達(dá)式s中的自由變量
subs(s,old,new) %用new替換符號表達(dá)式s中的old變量
例:
>> f=sym(x^3-6*x^2+11*x-6)
>> x=5
>> subs(f)
>>subs(f,5)
>>subs(f,’x’,5)
可以用來計算多項式的值,以及化簡。
3.4 符號極限、微積分和級數(shù)求和
3.4.1符號極限(Limits)
【例3.14】分別求1/x在0處從兩邊趨近、從左邊趨近和從右邊趨近的三個極限值。
>> f=sym(1/x)
>> limit(f) %對x求趨近于0的極限
>> limit(f,x,0) %對x求趨近于0的極限
>> limit(f,x,0,left) %左趨近于0
>> limit(f,x,0,right) %右趨近于0
3.4.2 符號微分 (Differentiation)
函數(shù)diff是用來求符號表達(dá)式的微分。
diff(f) %求f對自由變量的一階微分
diff(f,t)%求f對符號變量t的一階微分
diff(f,n)%求f對自由變量的n階微分
diff(f,t,n)%求f對符號變量t的n階微分
3.4.3 符號積分(Integration)
積分有定積分和不定積分,運(yùn)用函數(shù)int可以求得符號表達(dá)式的積分,即找出一個符號表達(dá)式F使得diff(F)=f,也可以說是求微分的逆運(yùn)算。
int(f,’t’) %求符號變量t的不定積分
int(f,’t’,a,b) %求符號變量t的定積分
int(f,’t’,’m’,’n’) %求符號變量t的定積分
3.4.4 符號級數(shù)
1. symsum函數(shù)(Symbolic Summation)
symsum(s,x,a,b) %計算表達(dá)式s的級數(shù)和
說明:x為自變量,x省略則默認(rèn)為對自由變量求和;s為符號表達(dá)式;[a,b]為參數(shù)x的取值范圍。
2. taylor函數(shù)(Taylor Series)
taylor(F,x,n) %求泰勒級數(shù)展開
說明:x為自變量,F(xiàn)為符號表達(dá)式;對F進(jìn)行泰勒級數(shù)展開至n項,參數(shù)n省略則默認(rèn)展開前5項。
4.1.1基本繪圖命令
plot命令是MATLAB中最簡單而且使用最廣泛的一個繪圖命令,用來繪制二維曲線。
語法:
plot(x) %繪制以x為縱坐標(biāo)的二維曲線
plot(x,y) %繪制以x為橫坐標(biāo)y為縱坐標(biāo)的二維曲線
說明:x和y可以是向量或矩陣。
4.1二維曲線的繪制
1. plot(x) 繪制x向量曲線
當(dāng)x是長度為n的數(shù)值向量,則坐標(biāo)系的縱坐標(biāo)為向量x,橫坐標(biāo)為MATLAB系統(tǒng)根據(jù)x向量的元素序號自動生成的從1開始的向量。
plot(x)命令是在坐標(biāo)系中順序地用直線段連接各點(diǎn),生成一條折線,當(dāng)向量的元素充分多時,可以得到一條光滑的曲線。
2. plot(x,y) 繪制向量x和y的曲線
當(dāng)參數(shù)x和y都是長度為n的向量,x、y的長度必須相等,plot(x,y)命令繪制縱坐標(biāo)為向量y橫坐標(biāo)為向量x的曲線。
【例4.2】繪制正弦曲線y=sin(x)和方波曲線,如圖4.2所示。
>> x1=0:0.1:2*pi;
>> y1=sin(x1); %y1為x1的正弦函數(shù)
>> plot(x1,y1)
>> x2=[0 1 1 2 2 3 ];
>> y2=[1 1 0 0 1 1 ];
>> plot(x2,y2)
>> axis([0 4 0 2]) %將坐標(biāo)軸范圍設(shè)定為0-4和0-2
1. 指定圖形窗口
在4.1.1小節(jié)中介紹的plot命令,繪制的圖形都是在默認(rèn)的“Figure No.1”窗口中繪制的,當(dāng)?shù)诙问褂胮lot命令時,就將第一次繪制的圖形覆蓋了。因此,如果需要多個圖形窗口同時打開時,可以使用figure語句。
語法:
figure(n) %產(chǎn)生新圖形窗口
說明:如果該窗口不存在,則產(chǎn)生新圖形窗口并設(shè)置為當(dāng)前圖形窗口,該窗口名為“Figure No.n”,而不關(guān)閉其它窗口。
例如,可以使用“figure (1)”、“figure (2)”等語句來同時打開多個圖形窗口。
2. 同一窗口多個子圖
如果需要在同一個圖形窗口中布置幾幅獨(dú)立的子圖,可以在plot命令前加上subplot命令來將一個圖形窗口劃分為多個區(qū)域,每個區(qū)域一幅子圖。
語法:
subplot(m,n,k) %使(mn)幅子圖中的第k幅成為當(dāng)前圖
【例4.6】用subplot命令畫四個子圖,如圖4.6所示。
>> x=0:0.1:2*pi;
>> subplot(2,2,1) %分割為2*2個子圖,左上方為當(dāng)前圖
>> plot(x,sin(x))
>> subplot(2,2,2) %右上方為當(dāng)前圖
>> plot(x,cos(x))
>> subplot(2,2,3) %左下方為當(dāng)前圖
>> plot(x,sin(3*x))
>> subplot(224) %右下方為當(dāng)前圖,省略逗號
>> plot(x,cos(3*x))
3. 同一窗口多次疊繪
在當(dāng)前坐標(biāo)系中繪圖時,每調(diào)用一次plot函數(shù),會擦掉圖形窗口中已有的圖形。為了在一個坐標(biāo)系中增加新的圖形對象,可以用“hold”命令來保留原圖形對象。
語法:
hold on %使當(dāng)前坐標(biāo)系和圖形保留
hold off %使當(dāng)前坐標(biāo)系和圖形不保留
hold %在以上兩個命令中切換
說明:在設(shè)置了“hold on”后,如果畫多個圖形對象,則在生成新的圖形時保留當(dāng)前坐標(biāo)系中已存在的圖形對象,MATLAB會根據(jù)新圖形的大小,重新改變坐標(biāo)系的比例。
【例4.7】在同一窗口畫出函數(shù)sinx在區(qū)間[0 2π]的曲線和cosx在區(qū)間[-π π]的曲線,如圖4.7(a)所示。
>> x1=0:0.1:2*pi;
>> plot(x1,sin(x1))
>> hold on
>> x2=-pi:.1:pi;
>> plot(x2,cos(x2))
4. 雙縱坐標(biāo)圖
語法:
plotyy(x1,y1,x2,y2) %以左、右不同縱軸繪制兩條曲線
說明:左縱軸用于(x1,y1)數(shù)據(jù),右縱軸用于(x2,y2)數(shù)據(jù)來繪制兩條曲線。坐標(biāo)軸的范圍、刻度都自動產(chǎn)生。
【例4.7續(xù)】用plotyy函數(shù)實現(xiàn)在同一圖形窗口繪制兩條曲線,如圖4.7(b)所示。
>> plotyy(x1,sin(x1),x2,cos(x2))
4.2設(shè)置坐標(biāo)軸和文字標(biāo)注
2. 分格線和坐標(biāo)框
(1) 使用grid命令顯示分格線
語法:
grid on %顯示分格線
grid off %不顯示分格線
grid %在以上兩個命令間切換
說明:不顯示分格線是MATLAB的默認(rèn)設(shè)置。分格線的疏密取決于坐標(biāo)刻度,如果要改變分格線的疏密,必須先定義坐標(biāo)刻度。
(2) 使用box命令顯示坐標(biāo)框
語法:
box on %使當(dāng)前坐標(biāo)框呈封閉形式
box off %使當(dāng)前坐標(biāo)框呈開啟形式
box %在以上兩個命令間切換
3. 文字標(biāo)注
圖形的文字標(biāo)注是指在圖形中添加標(biāo)識性的注釋,文字標(biāo)注包括:圖名(Title)、坐標(biāo)軸名(Label)、文字注釋(Text)和圖例(Legend)。
(1) 添加圖名
語法:
title(s) %書寫圖名
說明:s為圖名,為字符串,可以是英文或中文。
(2) 添加坐標(biāo)軸名
語法:
xlabel(s) %橫坐標(biāo)軸名
ylabel(s) %縱坐標(biāo)軸名
(3) 添加圖例
語法:
legend(s,pos) %在指定位置建立圖例
legend off %擦除當(dāng)前圖中的圖例
說明:參數(shù)s是圖例中的文字注釋,如果多個注釋則可以用’s1’,’s2’,…的方式;參數(shù)pos是圖例在圖上位置的指定符,它的取值如表4.4所示。
pos取值
0
1
2
3
4
-1
圖例位置
自動取最佳位置
右上角(默認(rèn))
左上角
左下角
右下角
圖右側(cè)
(4) 添加文字注釋
語法:
text(xt,yt,s) %在圖形的(xt,yt)坐標(biāo)處書寫文字注釋
【例4.10】在圖形窗口中添加文字注釋,如圖4.10所示。
>> x=0:0.1:2*pi;
>> plot(x,sin(x))
>> hold on
>> plot(x,cos(x),ro)
>> title(y1=sin(x),y2=cos(x)) %添加標(biāo)題
>> xlabel(x) %添加橫坐標(biāo)名
>> legend(‘sin(x)’,‘cos(x)’,4) %在右下角添加圖例
>> text(pi,sin(pi),x=\pi) %在pi,sin(pi)處添加文字注釋
4.2.1繪制三維線圖命令
三維曲面圖的繪制:MATLAB繪制網(wǎng)線圖和曲面圖的函數(shù)分別是mesh( )和surf( ),其具體操作步驟是:
用函數(shù)meshgrid( )生成平面柵格點(diǎn)矩陣[X,Y];
由[X,Y]計算函數(shù)數(shù)值矩陣Z;
用mesh( )繪制網(wǎng)線圖,用surf( )繪制曲面圖
1. meshgrid命令
為了繪制三維立體圖形,MATLAB的方法是將x方向劃分為m份,將y方向劃分為n份,meshgrid命令是以x、y向量為基準(zhǔn),來產(chǎn)生在x-y平面的各柵格點(diǎn)坐標(biāo)值的矩陣。
語法:
[X,Y]=meshgrid(x,y)
說明:X、Y是柵格點(diǎn)的坐標(biāo),為矩陣;x、y為向量。
例如,將x(1m)向量和y(1n)向量轉(zhuǎn)換為(nm)的矩陣:
x=[1 2 3 4];
y=[5 6 7];
[xx,yy]=meshgrid(x,y)
在MATLAB的三維圖形命令中plot3最易于理解,plot3是用來繪制三維曲線的。
語法:
plot3(x,y,z, s) %繪制三維曲線
plot3(x1,y1,z1, s1,x2,y2,z2, s2,…) %繪制多條三維曲線
【例4.13】三維曲線繪圖,如圖4.12所示。
>> x=0:0.1:20*pi;
>> plot3(x,sin(x),cos(x)) %按系統(tǒng)默認(rèn)設(shè)置繪圖
2. 三維網(wǎng)線圖
語法:
mesh(z) %畫三維網(wǎng)線圖
mesh(x,y,z,c)
【例4.14續(xù)】用mesh查看peaks函數(shù)的三維網(wǎng)線圖,如圖4.15所示。
>> mesh(xx,yy,zz)
3. 三維曲面圖 語法:
surf (z) %畫三維曲面圖
surf (x,y, z,c)
【例4.14續(xù)】用surf查看peaks函數(shù)的三維曲面圖,如圖4.16所
>> surf (xx,yy,zz)
4. 其它立體網(wǎng)線圖和曲面圖
立體網(wǎng)線圖mesh命令還有幾種格式,meshc命令為立體網(wǎng)狀圖加等高線;meshz為立體網(wǎng)狀圖加“圍裙”。
【例4.14續(xù)】用meshz和meshc查看peaks函數(shù)的三維曲面圖,如圖4.17所示。
>> meshz(xx,yy,zz)
>> meshc(xx,yy,zz)
第五章
M 函數(shù)文件的基本格式:
函數(shù)聲明行
H1行(用%開頭的注釋行)
在線幫助文本(用%開頭)
編寫和修改記錄(用%開頭)
函數(shù)體
說明:(1) 函數(shù)聲明行(the Function Definition Line)是M函數(shù)文件必須有的,M腳本文件沒有;函數(shù)名和文件名一致,當(dāng)不一致時,MATLAB以文件名為準(zhǔn);
(2) H1行通常包含大寫的函數(shù)文件名,可以提供給help和lookfor關(guān)鍵詞查詢使用;
(3) 在線幫助文本通常包含函數(shù)輸入輸出變量的含義、格式說明;
(4) 編寫和修改記錄一般在空一行后,記錄作者、日期和版本記錄,用于軟件檔案管理。
(5) 函數(shù)體由實現(xiàn)M函數(shù)文件功能的MATLAB命令組成。
5.2 程序流程控制
5.2.1 for ... end循環(huán)結(jié)構(gòu)
for 循環(huán)變量=array
循環(huán)體
end
說明:執(zhí)行的次數(shù)就是array的列數(shù),array可以是向量也可以是矩陣,循環(huán)變量依次取array的各列,每取一次循環(huán)體執(zhí)行一次。
例:
for n=1:2:10
循環(huán)五次
5.2.2 while ... end循環(huán)結(jié)構(gòu)
while 表達(dá)式
循環(huán)體
end
說明:表達(dá)式可以是向量也可以是矩陣,如果為矩陣則當(dāng)所有的元素都為真才執(zhí)行循環(huán)體,如果表達(dá)式為nan,MATLAB認(rèn)為是假,不執(zhí)行循環(huán)體。
例如:
While n>0
end
5.2.3 If…else…end條件轉(zhuǎn)移結(jié)構(gòu)
if 條件式1
語句段1
elseif 條件式2
語句段2
...
else
語句段n+1
end
說明:If…else…end結(jié)構(gòu)也可以是沒有elseif和else的簡單結(jié)構(gòu)。
5.2.4 switch…case開關(guān)結(jié)構(gòu)
switch 開關(guān)表達(dá)式
case 表達(dá)式1
語句段1
case表達(dá)式2
語句段2
...
otherwise
語句段n
end
說明:
(1) 如果表達(dá)式1不滿足,則與下一個表達(dá)式2比較,如果都不滿足則執(zhí)行otherwise后面的語句段n。
(2) 開關(guān)表達(dá)式只能是標(biāo)量或字符串。
(3) case后面的表達(dá)式可以是標(biāo)量、字符串或元胞數(shù)組,如果是元胞數(shù)組則將開關(guān)表達(dá)式與元胞數(shù)組的所有元素進(jìn)行比較。
1. 子函數(shù)(Subfunctions)
在M函數(shù)文件中只有一個主函數(shù),其它則為子函數(shù)。
(1) 在一個M文件中,主函數(shù)必須出現(xiàn)在最上方,其后是子函數(shù),子函數(shù)的次序無任何限制;
(2) 子函數(shù)不能被其它文件的函數(shù)調(diào)用,只能被同一文件中的函數(shù)(可以是主函數(shù)或子函數(shù))調(diào)用;
(3) 同一文件的主函數(shù)和子函數(shù)變量的工作空間相互獨(dú)立;
(4) 用help和lookfor命令不能提供子函數(shù)的幫助信息。
function Ex0511()%主函數(shù)
z1=0.3;
Ex0502(z1); %調(diào)用Ex0502
hold on
z1=0.5
Ex0502(z1) %調(diào)用Ex0502
z1=0.707;
Ex0502(z1) %調(diào)用Ex0502
function y=Ex0502(zeta)
%子函數(shù),畫二階系統(tǒng)時域曲線
x=0:0.1:20;
y=1-1/sqrt(1-zeta^2)*exp(-zeta*x).*sin(sqrt(1-zeta^2)…
*x+acos(zeta))
plot(x,y)
2. 私有函數(shù)(Private Functions)
私有函數(shù)是指存放在private子目錄中的M函數(shù)文件,具有以下性質(zhì):
(1)在private目錄下的私有函數(shù),只能被其父目錄的M函數(shù)文件所調(diào)用,而不能被其它目錄的函數(shù)調(diào)用;
(2)私有函數(shù)父目錄的M腳本文件也不可調(diào)用私有函數(shù);
(3)在函數(shù)調(diào)用搜索時,私有函數(shù)優(yōu)先于其它MATLAB路徑上的函數(shù)。
3. 調(diào)用函數(shù)的搜索順序
在MATLAB中調(diào)用一個函數(shù),搜索的順序如下:
查找是否子函數(shù);
查找是否私有函數(shù);
從當(dāng)前路徑中搜索此函數(shù);
從搜索路徑中搜索此函數(shù)。
函數(shù)調(diào)用的格式:
[輸出參數(shù)1,輸出參數(shù)2,…]=函數(shù)名(輸入?yún)?shù)1,輸入?yún)?shù)2,…)
1. 參數(shù)傳遞規(guī)則
函數(shù)內(nèi)變量與外界(包括其它函數(shù)和工作空間)的唯一聯(lián)系就是通過函數(shù)的輸入輸出參數(shù)。輸入?yún)?shù)在函數(shù)中的任何變化,都僅在函數(shù)內(nèi)進(jìn)行,不會傳遞回去。
【例5.13】將【例5.11】畫二階系統(tǒng)時域的函數(shù)修改,使用輸入輸出參數(shù)來實現(xiàn)參數(shù)傳遞。
function Ex0513()
% EX0513 參數(shù)傳遞繪制二階系統(tǒng)時域響應(yīng)
z1=0.3;
[x1,y1]=Ex0502(z1);
plot(x1,y1)
hold on
z1=0.5;
[x2,y2]=Ex0502(z1);
plot(x2,y2)
function [x,y]=Ex0502(zeta)
%子函數(shù),畫二階系統(tǒng)時域曲線
x=0:0.1:20;
y=1-1/sqrt(1-zeta^2)*exp(-zeta*x).*sin...
(sqrt(1-zeta^2)*x+acos(zeta));
程序分析:主函數(shù)Ex0513調(diào)用子函數(shù)Ex0502,子函數(shù)中的zeta為輸入?yún)?shù),函數(shù)調(diào)用時將z1傳遞給子函數(shù)zeta,子函數(shù)計算后將輸出參數(shù)x和y傳回給主函數(shù)的x1、y1。
2. 函數(shù)參數(shù)的個數(shù)
(1) nargin和nargout變量
函數(shù)的輸入輸出參數(shù)的個數(shù)可以通過變量nargin和nargout獲得。
nargin用于獲得輸入?yún)?shù)的個數(shù),nargout用于獲得輸出參數(shù)的個數(shù)。
(2) varargin和varargout變量
“varargin”和“varargout”可以獲得輸入輸出變量的各元素內(nèi)容,varargin和varargout都是元胞數(shù)組。
【例9.5】單位沖激序列和單位階躍序列
n=-5:5;
y1=zeros(1,length(n));
y1(n==0)=1;
y2=zeros(1,length(n));
y2(n>=0)=1;
subplot(211),stem(n,y1,.),ylim([0,2]),title(單位沖激序列);
subplot(212),stem(n,y2,.),ylim([0,2]),title(單位階躍序列);
[例9-10] 生成一個實指數(shù)序列的程序如下:
%實指數(shù)序列
n=-5:5;
y=2.^n;
stem(n,y,r*)
axis([-5,5,0,50])
xlabel(n);
ylabel(x[n]);
【例9.9】編寫卷積積分的計算函數(shù)
function [f,t]=ctsconv(f1,f2,t1,t2,Ts)
%計算連續(xù)時間信號的卷積積分:f=f1*f2
%f1、f2:輸入信號的樣值向量
%t1、t2:輸入信號的時間向量
%Ts:采樣間隔
%t1、t2的采樣間隔必須等于Ts
%--------------------------------------------------------------------
f=conv(f1,f2); %計算序列f1與f2的卷積和f
f=f*Ts; %計算卷積積分信號f(t)離散樣值
t0=t1(1)+t2(1) ; %計算序列f非零樣值的起點(diǎn)位置
l=length(t1)+length(t2)-2; %計算卷積積分f的非零樣值的寬度
t=t0:Ts:(t0+l*Ts) %確定卷積積分f非零樣值的時間向量
連續(xù)函數(shù)的卷積
【例9.10】已知x(t)=u(t)-u(t-1),h(t)=u(t-1)-u(t-3),求y=x(t)*h(t)
clear;
p=0.01;
t1=0:p:1;
f1=ones(size(t1));
t2=1:p:3;
f2=ones(size(t2));
[f,t]=ctsconv(f1,f2,t1,t2,p);
離散函數(shù)的卷積
subplot(2,2,1)
plot(t1,f1)
title(x(t))
xlabel(t1)
subplot(2,2,2)
plot(t2,f2)
title(h(t))
xlabel(t2)
subplot(2,2,3)
plot(t,f);
p=get(gca,position);
p(3)=2.5*p(3); % p(3)代表坐標(biāo)軸的寬度(width) set(gca,position,p)
%將第三個子圖的橫坐標(biāo)范圍擴(kuò)為原來的2.5倍
title(y(t)=x(t)*h(t))
xlabel(t)
【例9.13】符號運(yùn)算求解積分的方法求解傅里葉級數(shù)系數(shù)
function [an,bn]=fs(x,t,T,K)
%求解周期信號的傅里葉級數(shù)系數(shù)
%x:周期信號在【-T/2,T/2】內(nèi)的符號表達(dá)式
%t:符號表達(dá)式中的自變量
%T:周期信號的周期
%K:傅里葉級數(shù)分解的諧波次數(shù)
%---------------------------------------------------------
syms n;
an = zeros(K+1,1);
bn = zeros(K+1,1);
A0 =int(x,t,-T/2,T/2)/T;
An=2*int(x*cos(2*pi*n*t/T),t,-T/2,T/2)/T;
Bn=2*int(x*sin(2*pi*n*t/T),t,-T/2,T/2)/T;
an(1) = double(A0);
for k=1:K
an(k+1)=double(subs(An,n,k));
bn(k+1)=double(subs(Bn,n,k));
end
【例9.28】用雙線性變換法設(shè)計一個巴特沃斯低通IIR數(shù)字濾波器。設(shè)計指標(biāo)參數(shù)為:在通帶內(nèi)頻率低于時,最大衰減小于1dB,在阻帶 頻率區(qū)間上,最小衰減大于15dB。畫出數(shù)字濾波器在頻率區(qū)間上的幅頻響應(yīng)特性曲線。
clear,close all;
Wp=0.2*pi;Ws=0.3*pi;Rp=1;Rs=15;
T=2;Fs=1/T;
wp=2*tan(Wp/2)/T;ws=2*tan(Ws/2)/T; %預(yù)畸變
[N,wc]=buttord(wp,ws,Rp,Rs,s); %計算過渡模擬濾波器階數(shù)N和3dB截止頻率
[B,A]=butter(N,wc,s); %計算模擬濾波器系統(tǒng)函數(shù)
[Bz,Az]=bilinear(B,A,Fs); %用雙線性變換法將模擬濾波器轉(zhuǎn)換為數(shù)字濾波器
w=linspace(0,pi,1024); %將0到π之間均分1024個頻率采樣點(diǎn)
h=freqz(Bz,Az,w); %計算數(shù)字濾波器的復(fù)頻響h,頻率點(diǎn)由向量w指定
plot(w/pi,20*log10(abs(h)),k);grid on;
set(gca,ytick,[-15,-1,0]); %在衰減1dB和15dB處標(biāo)明縱坐標(biāo)
set(gca,xtick,[0,0.2,0.3,0.5]); %在通帶和阻帶截止頻率處標(biāo)明橫坐標(biāo)
axis([0,0.5,-50,0]);
xlabel(ω/π);ylabel(幅度(dB));
實驗一、(4)利用矩陣的基本運(yùn)算求解矩陣方程。已知矩陣A和B滿足關(guān)系式,其中A=,計算矩陣B。(演算出來)
a=[1/3 0 0;0 1/4 0;0 0 1/7]
eye(3)
c=a-eye(3)
b=c\(6*e)
(5)計算函數(shù)的值,其中t的范圍為0~2π,步長取0.1π;z為0.707;為>=0的部分,計算的值。
t=0:0.1*pi:2*pi;
z=0.707;
f=10*sqrt(1-z^2)*exp(-2*t).*sin(4*t)
y=(f>=0);
f1=f.*y
(6)兩個多項式為,,計算,并計算的根;當(dāng)時,計算的值;計算x在[0,20]內(nèi)多項式的值;將進(jìn)行部分分式展開
a=[5 4 3 2 1];
b=[3 0 1];
c=conv(a,b)
roots(c)
polyval(c,2)
x=0:1:20
c=polyval(c,x)
[r,p,k]=residue(b,a)
鏈接地址:http://www.hcyjhs8.com/p-9134239.html