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