《MATLAB程序設(shè)計基礎(chǔ)教程》課件第2章_第1頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第2章_第2頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第2章_第3頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第2章_第4頁
《MATLAB程序設(shè)計基礎(chǔ)教程》課件第2章_第5頁
已閱讀5頁,還剩195頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第2章向量、數(shù)組和矩陣2.1矩陣的特征參數(shù)運算2.2向量、數(shù)組與矩陣的創(chuàng)建2.3向量、數(shù)組和矩陣的尋址與賦值2.4標(biāo)準(zhǔn)矩陣與特殊矩陣2.5基本的四則運算2.6向量、數(shù)組和矩陣的其他運算2.7矩陣的操作2.8單元數(shù)組2.9結(jié)構(gòu)體 2.1向量、數(shù)組與矩陣的創(chuàng)建

2.1.1向量的創(chuàng)建

1.簡單向量的創(chuàng)建

在MATLAB中,生成向量(一維數(shù)組)最簡單的方法就是在命令窗口中按一定格式直接輸入。輸入的格式要求是:向量元素用“[]”括起來,元素之間用空格、逗號或者分號相隔。需要注意的是,用它們相隔生成的向量形式是不相同的。

(1)用空格或逗號生成不同列的元素,即行向量。(2)用分號生成不同行的元素,即列向量。例如:

>>a1=[15;21;27;93;101];

>>a1

a1=

15

21

27

93

101

>>a2=[15,21,27,93,101];

>>a2

a2=

>>a3=[1234]

a3=

1234

2.冒號表達(dá)式創(chuàng)建等差數(shù)組

當(dāng)向量的元素過多,同時向量各元素有等差的規(guī)律時,采用直接輸入法將顯得過于繁瑣。針對這種情況,可以使用冒號(:)和linspace()函數(shù)來生成等差元素向量。

冒號表達(dá)式是MATLAB中最具特色的表示方法,其調(diào)用格式如下:

a=j:i:k

這一語句可以生成一個行向量,其中,j為向量的起始值,i為增量步距,而k為向量的終止值。當(dāng)i==0、i>0且j>k或i<0且j<k時,返回一個空向量。例如:

>>vec1=10:5:60

vec1=

1015202530354045505560

a=j:k

當(dāng)冒號表達(dá)式用于整數(shù),不指定步距時,默認(rèn)步距為1,步距可省略,等同于[j,j+1,...,k],而當(dāng)j>k時,返回一個空向量。例如:

>>D=1:4

D=

1234

冒號表達(dá)式也可用于實數(shù)。使用兩個冒號生成一個實數(shù)向量。例如:

>>E=0:.1:.5

E=

00.10000.20000.30000.40000.5000

3.linspace()函數(shù)與等差數(shù)組的創(chuàng)建

linspace()函數(shù)類似于冒號操作符,生成以線性間隔分布的向量,相鄰的兩個數(shù)據(jù)的差保持不變,構(gòu)成等差數(shù)列,其語法格式如下:

(1)?y=linspace(a,b)。在a、b之間(包括a、b)生成100點線性間隔分布的行向量y,即向量y有100個元素,a為起始元素,b為結(jié)束元素。

(2)?y=linspace(a,b,n)。在a、b之間(包括a、b)生成n點線性間隔分布的行向量y,即向量y有n個元素。如果n小于2,linspace返回b。例如:

>>vec2=linspace(10,60,11)

vec2=

1015202530354045505560

>>vec3=linspace(10,60,10)

vec3=

10.000015.555621.111126.666732.222237.777843.333348.888954.444460.0000

4.等比數(shù)組的創(chuàng)建

冒號表達(dá)式能夠直接指定數(shù)據(jù)間的增量,而不用指定數(shù)據(jù)點的個數(shù)。Linspace()函數(shù)能夠直接指定數(shù)據(jù)點的個數(shù),而不用指定數(shù)據(jù)間的增量。這兩種方式產(chǎn)生的數(shù)據(jù)都是等間隔分布的,即等差向量。而實際中也需要使用等比數(shù)列向量。函數(shù)logspace()用來生成等比形式排列的行向量。函數(shù)logspace()的用法如下:

(1)?X=logspace(a,b)。在10a和10b之間生成50個以對數(shù)間隔等分?jǐn)?shù)據(jù)的行向量。構(gòu)成等比數(shù)列,數(shù)列的第一項X(1)=10a,最后一項X(50)=10b。

(2)?X=logspace(a,b,n)。在a和b之間生成n個對數(shù)間隔等分?jǐn)?shù)據(jù)的行向量。構(gòu)成等比數(shù)列,數(shù)列的第一項X(1)=10a,最后一項X(n)=10b。

(3)?y=logspace(a,pi)。在10a和之間生成等比數(shù)列的點。用于數(shù)字信號處理,在單位圓上等間隔頻率采樣。2.1.2向量的轉(zhuǎn)置與操作

1.普通轉(zhuǎn)置

使用分號可以生成列向量;使用冒號、linspace()和logspace()函數(shù)可以生成行向量;使用轉(zhuǎn)置符號(')可以將行向量轉(zhuǎn)成列向量,b=a',即b是a的轉(zhuǎn)置向量。例如:

>>f=1:4

f=

1234

>>F=f'

F=

1

2

3

4

再次使用轉(zhuǎn)置符號(')可將列向量轉(zhuǎn)回成行向量。

2.點轉(zhuǎn)置

MATLAB還提供了點轉(zhuǎn)置(.')符號。對實數(shù)而言,(.')與(')操作是等效的;對于復(fù)數(shù),(')操作結(jié)果是復(fù)數(shù)共軛轉(zhuǎn)置。也就是說,在轉(zhuǎn)置過程中,虛部的符號也改變了,而(.')操作只轉(zhuǎn)置,不進(jìn)行共軛操作。例如:

>>f=1:3

f=

123

>>x=complex(f,f)

x=

1.0000+1.0000i2.0000+2.0000i3.0000+3.0000i

>>y=x'

y=

1.0000-1.0000i

2.0000-2.0000i

3.0000-3.0000i

>>z=x.'

z=

1.0000+1.0000i

2.0000+2.0000i

3.0000+3.0000i

3.向量元素的操作或運算

MATLAB亦可取出向量中的一個或一部分元素進(jìn)行操作或運算。例如:

>>x(3)=2%將向量x的第三個元素更改為2

x=10.000047.50002.000022.500060.0000

>>x(6)=10 %在向量t加入第六個元素,其值為10

x=10.000047.50002.000022.500060.000010.0000

>>x(4)=[]%將向量t的第四個元素刪除,[]代表空集合

x=10.000047.50002.000060.000010.0000

4.適用于向量的常用函數(shù)

適用于向量的常用函數(shù)有以下幾種:

(1)?min(x)、max(x):向量x的元素的最小值、最大值。

(2)?mean(x):向量x的元素的平均值。

(3)?median(x):向量x的元素的中位數(shù)。

(4)?std(x):向量x的元素的標(biāo)準(zhǔn)差。

(5)?diff(x):向量x的相鄰元素的差。

(6)?sort(x):對向量x的元素進(jìn)行排序(Sorting)。

(7)?length(x):向量x的長度(元素個數(shù))。

(8)?norm(x):向量x的歐氏(Euclidean)長度。

(9)?sum(x)、prod(x):向量x的元素總和、總乘積。

(10)?cumsum(x)、cumprod(x):向量x元素的累計總和、累計總乘積。

(11)?dot(x,y)、cross(x,y):向量x和y的內(nèi)積、外積。2.1.3向量的點乘、叉乘和混合積

1.向量的點乘

向量的點乘又稱為內(nèi)積或數(shù)量積,顧名思義,它所得的結(jié)果是一個數(shù)。

(1)?|a.b|=|a|*|b|*cos(a,b),其結(jié)果是標(biāo)量,(a,b)為兩個向量的夾角。它的幾何意義是兩個向量的模和兩個向量之間的夾角余弦三者的乘積?;蛘哒f是其中一個向量的模與另一個向量在這個向量的方向上的投影的乘積。

(2)若向量a=(a1,b1,c1)、向量b=(a2,b2,c2),則a·b=a1a2+b1b2+c1c2,即點乘的運算是:對應(yīng)元素相乘后求和,相當(dāng)于sum(a.*b)。

(3)在MATLAB中,實現(xiàn)點乘的函數(shù)是dot(),該函數(shù)的用法:dot(A,B),其中A和B的維數(shù)必須相同。例如:

>>x1=[11223344];x2=[1234];

>>X=dot(x1,x2)

X=330

>>sum(x1.*x2)

ans=330

當(dāng)A和B都是行向量時,dot(A,B)與A.*B'?相同,例如:

>>x1*x2'

ans=330當(dāng)A和B都是列向量時,dot(A,B)與A'*B相同,例如:

>>y1=[1;2;3]

y1=

1

2

3

>>y2=[4;5;6]

y2=

4

5

6

>>y=dot(y1,y2)

y=

32

>>y1'*y2

ans=

32

2.向量的叉乘

叉乘也叫向量的外積、向量積。顧名思義,它所得的結(jié)果是一個向量。

(1)?|a×b|=|a|*|b|*sin(a,b),其結(jié)果是矢量,(a,b)為兩個向量的夾角。兩個向量叉積的幾何意義是指以兩個向量模的乘積為模,方向和兩個向量構(gòu)成右手坐標(biāo)系(即過兩個相交向量的交點,并與這兩個向量所在平面垂直)的向量。

(2)若向量a=(a1,b1,c1)、向量b=(a2,b2,c2),則

a?×?b?=

|a1b1c1|

×

|a2b2c2|

=[b1c2-b2c1,c1a2-a1c2,a1b2-a2b1]

(3)向量的外積不遵守乘法交換率,因此向量的叉乘不可交換。

(4)在MATLAB中,函數(shù)cross()用于實現(xiàn)向量的叉乘。用法如下:

C=cross(A,B)

返回A、B向量的叉乘:C=A?×?B。A和B必須是以上元素的向量。

>>z1=[123];z2=[567];

>>z3=cross(z1,z2)

z3=

-48-4

3.向量的混合積

向量的混合積的幾何意義是:它的絕對值表示以三個向量為棱的平行六面體的體積,符號由右手法則確定。

向量的混合積由點乘和叉乘逐步實現(xiàn):dot(A,cross(B,C))。

>>a=[123]

>>b=[456]

>>c=[251]

>>d=dot(a,cross(b,c))

d=212.1.4二維數(shù)組與多維數(shù)組

1.二維數(shù)組的生成規(guī)則

生成數(shù)組同樣遵循行向量和列向量的生成規(guī)則,即創(chuàng)建二維數(shù)組與創(chuàng)建一維數(shù)組的方式類似。在創(chuàng)建二維數(shù)組時,用逗號或者空格區(qū)分同一行中的不同列元素,用分號或者回車(Enter)區(qū)分不同行。數(shù)組既包含行向量,也包含列向量,即數(shù)組可以以矩陣形式存在。例如:

>>s=[123;456]

s=

123

456

s是一個2行3列的數(shù)組或矩陣。

對矩陣或多維數(shù)組A可以使用size(A)來測其大小,也可以使用reshape()函數(shù)重新按列排列。對向量來說,還可以用length(A)來測其長度。

2.cat()函數(shù)與多維數(shù)組連接

對于多維數(shù)組,使用cat()函數(shù)按其指定維數(shù)連接,用法如下:

C=cat(dim,A,B)

按其指定維數(shù)dim連接A、B。cat(2,A,B)等同于[A,B],即把矩陣A和B按行向量連接。cat(1,A,B)等同于[A;B],即把矩陣A和B按列向量連接。例如:

>>A=[12;34]

>>B=[45;67]

則cat(1,A,B)、cat(2,A,B)、cat(3,A,B)連接的結(jié)果如圖2-1所示。圖2-1cat函數(shù)連接的結(jié)果2.1.5矩陣的創(chuàng)建方法

在MATLAB中,矩陣是進(jìn)行數(shù)據(jù)處理和運算的基本元素。如果數(shù)組可以既包含行向量,又包含列向量,則數(shù)組可以以矩陣形式存在。

在MATLAB中創(chuàng)建矩陣,同樣遵循行向量和列向量的生成規(guī)則:

(1)矩陣元素必須在“[]”內(nèi);

(2)矩陣的同行元素之間用空格或逗號(,)隔開;

(3)矩陣的行與行之間用分號(;)或回車符隔開;

(4)矩陣的元素既可以是數(shù)值、變量、表達(dá)式或函數(shù),也可以是實數(shù),甚至是復(fù)數(shù)。

(5)矩陣的尺寸不必預(yù)先定義。需要說明的是:

矩陣的復(fù)數(shù)元素之間不能有空格,如“-1+2j”可以作為一個矩陣元素,而“-1+2j”就不可以。

“-1+2j”可以被正確地解釋,而“-1+j2”就不行,MATLAB把“j2”解釋為一個變量名,可以寫成“-1+j*2”。

通常意義上的數(shù)量(標(biāo)量)是矩陣的特殊情況,可看成是“1?×?1”,即一個元素的矩陣。

n維向量可看成是“n?×?1”的矩陣,即向量可以看做是只有一行或一列元素的矩陣。

多項式可由它的系數(shù)矩陣完全確定。

1.直接輸入法

最簡單的建立矩陣的方法是從鍵盤直接輸入矩陣的元素,輸入的方法遵循以上規(guī)則。例如:

>>s=[123;456;359]

s=

123

456

359

s是一個3行3列的數(shù)組或矩陣。

MATLAB和其他語言不同,它無需事先聲明矩陣的維數(shù)。下面的語句可以建立一個更大的矩陣:

>>B(2,5)=1

B=

1.0000+9.0000i2.0000+8.0000i3.0000+7.0000i

0

0

4.0000+6.0000i5.0000+5.0000i6.0000+4.0000i

0

1.0000

7.0000+3.0000i8.0000+2.0000i

0+1.0000i

0

0

2.利用MATLAB函數(shù)創(chuàng)建矩陣

MATLAB提供了許多矩陣函數(shù),可以利用這些函數(shù)創(chuàng)建矩陣,如標(biāo)準(zhǔn)矩陣、特殊矩陣等。

3.利用文件建立矩陣

當(dāng)矩陣尺寸較大或為經(jīng)常使用的數(shù)據(jù)矩陣時,則可以將此矩陣保存為文件,在需要時直接將文件利用load命令調(diào)入工作環(huán)境中使用即可。同時可以利用函數(shù)reshape對調(diào)入的矩陣進(jìn)行重排。若要在矩陣總元素保持不變的前提下,將矩陣A重新排成m×n的二維矩陣,其格式為reshape(A,m,n)。 2.2向量、數(shù)組和矩陣的尋址與賦值

2.2.1向量的尋址與賦值

1.向量尋址

向量中各元素可以用單下標(biāo)來尋址。

(1)?A(j):向量A的第j個元素。例如:

>>vec1=10:5:60

vec1=

1015202530354045505560

>>vec1(3)

ans=20

(2)?A([i,j,k]):提取向量A中第i、j、k號元素。例如:

>>vec1([1347])

ans=

10202540

2.向量的賦值

在MATLAB中,使用賦值符號(=)對向量元素賦值。例如:

>>y=[0123456]

y=

0123456

(1)單下標(biāo)方式賦值。例如:將向量y的第3個元素賦值為8。

>>y(3)=8

y=

0183456

將向量y的第1、第6個元素分別賦值為1、3。

>>y([16])=[13]

y=

1183436

(2)全元素賦值方式。例如:將向量y的所有元素,按5~11分別賦值。

>>y(:)=5:11

y=

5678910112.2.2矩陣(數(shù)組)的下標(biāo)索引

對于二維數(shù)組,其下標(biāo)可以是按列排序的單下標(biāo),如圖2-2所示;也可以是按行、列順序編號的雙下標(biāo),如圖2-3所示。圖2-2單下標(biāo)表示圖2-3雙下標(biāo)表示

1.矩陣的索引與提取

在MATLAB中,所有的矩陣內(nèi)部都是表示為以列為主的一維向量,在實際應(yīng)用中,可以使用一維A(k)或二維A(i,j)下標(biāo)來存取矩陣元素。如圖2-4所示。圖2-4矩陣的下標(biāo)

(1)使用雙下標(biāo)來進(jìn)行矩陣的索引。在矩陣A中,位于第i行、第j列的元素可表示為A(i,j),i與j即是此元素的下標(biāo)(Subscript)或索引(Index)。例如:>>A=[410162;82947;75715;03454;23131303]

A=

410162

82947

75715

03454

23131303

>>A(2,2)

ans=2

>>A(4:5,2:3):取出矩陣A的第4、5行與2、3列所形成的部分矩陣。

ans=

34

1313

(2)使用單下標(biāo)進(jìn)行矩陣的索引。用一維下標(biāo)的方式可達(dá)到同樣目的。對于某一個元素A(i,j),其對應(yīng)的單下標(biāo)表示為A(k),其中k=i+(j-1)*m,m為矩陣A的列數(shù)。例如:

>>A(7)

ans=2

>>A([914;1015])

ans=

34

1313

2.使用end關(guān)鍵字

關(guān)鍵字end表示數(shù)組的最后一個元素,代表某一維度的最大值,在矩陣元素提取時還可以使用end這個關(guān)鍵字。

A(:,end):矩陣A的最后一列。例如:

>>B=[123;456]

B=

123

456

>>B(:,end)

ans=

3

6

3.使用冒號表達(dá)式選擇行、列或數(shù)組元素

冒號表達(dá)式是MATLAB中最具特色的表示方法,其調(diào)用格式為a=s1:s2:s3;。這一語句可以生成一個行向量,其中,s1為向量的起始值,s2為步距,而s3為向量的終止值。例如S=0:.1:2*pi,將產(chǎn)生一個起始于0,步距為0.1,而終止于6.2的向量。如果寫成S=0:-0.1:2*pi;,則返回一個空向量。

冒號表達(dá)式可以用來尋訪、提取向量、數(shù)組或矩陣元素。

(1)?A(i:j):是尋訪A的第i~j個元素,從i開始、以1作為增量,單下標(biāo)尋訪直到j(luò)。例如:

>>vec1(1:5)%返回向量vec1的第1到第5個元素。

ans=

1015202530

>>A(1:7)

ans=

487023102

A(i:k:j):從i開始尋訪,以k作為增量,直到j(luò)。

(2)使用冒號可取出一整列或一整行。

A(i,:):是尋訪A的第i行。例如:

>>A(3,:)

ans=75715

A(:,j):是尋訪A的第j列。例如:

>>A(:,5):取出矩陣A的第5列。

ans=

2

7

5

4

3

(3)?A(:):依次提取矩陣A的每一列,按單下標(biāo)次序?qū)拉伸為一個列向量,即把A的所有元素視為單一列。不論原數(shù)組A是多少維的,A(:)將返回一個列向量。例如:

>>A(:)

ans=

1

4

2

5

3

6

(4)取矩陣A的第i1~i2行、第j1~j2列構(gòu)成新矩陣:A(i1:i2,j1:j2)。

>>A(2:3,1:3)

ans=

829

757

A(:,:)相當(dāng)于二維數(shù)組,等同于A。

例如:A(:,1)將提取A矩陣的第1列,而A(1:2,1:2:5)將提取A的前2行與1,3,5列組成的子矩陣(起始值s1=1、步距s2=2、終止值s3=5)。

>>A(:,1)

ans=

4

8

7

0

23

>>A(1:2,1:2:5)

ans=

412

897

B(i:end,:)將提取B的第i行到最后一行的所有列構(gòu)成的子矩陣。例如尋訪向量vec1的除前4個之外的所有元素,即從第5個元素開始到最后:

>>vec1(5:end)

ans=

30354045505560

>>A(2:end,:)

ans=

82947

75715

03454

2313130

3

(5)?A(k:-i:j)是指按逆序返回A的各元素值。例如:以逆序提取矩陣A的第i1~i2行,構(gòu)成新矩陣:A(i2:-1:i1,:)。

>>A(3:-1:2,1:3)

ans=

757

829

>>A(3:-1:2,:)

ans=

75715

82947

(6)以逆序提取矩陣A的第j1~j2列,構(gòu)成新矩陣:A(:,j2:-1:j1)。

>>A(:,4:-1:1)

ans=

61104

4928

1757

5430

0131323

4.矩陣元素的刪除

可以直接刪除矩陣的某一整個列或行,具體方法如下:

(1)?A(2,:)=[]:刪除A矩陣的第2行。

(2)?A(:,[245])=[]:刪除A矩陣的第2、4、5列。

(3)刪除A的第i1~i2行,構(gòu)成新矩陣:A(i1:i2,:)=[]。

(4)刪除A的第j1~j2列,構(gòu)成新矩陣:A(:,j1:j2)=[]。2.2.3矩陣元素的賦值

1.全元素賦值方式

對矩陣(數(shù)組)中所有元素進(jìn)行賦值。

例2-2-1

創(chuàng)建一個(2*4)的全零數(shù)組,然后從1~8給其賦值。

(1)創(chuàng)建一個(2*4)的全零數(shù)組。

>>A=zeros(2,4)

A=

0000

0000

(2)從1~8給其賦值。

>>A(:)=1:8

A=

1357

2468

2.單下標(biāo)方式賦值

例2-2-2

將上例中下標(biāo)為2、3、5的元素分別賦值為10、20、30。

解該例當(dāng)然可以使用下標(biāo)尋址的方式,逐個賦值,例如:

>>A(2)=10

A=

1357

10468

>>A(:,[23])=[33;22]

A=

1337

10228如果數(shù)組賦值元素較多,使用下列方法則更方便。

(1)產(chǎn)生一個需要賦值的“單下標(biāo)行數(shù)組”數(shù)組。

>>s=[235];

(2)由“單下標(biāo)行數(shù)組”尋訪產(chǎn)生A元素組成的行數(shù)組A(s)。

>>A(s)

ans=

235

(3)生成一個3元素的“列數(shù)組”Sa。

>>Sa=[102030]'

Sa=

10

20

30

(4)使用“列數(shù)組”Sa為A賦值。

>>A(s)=Sa

A=

120307

10468

上述步驟可以簡化為

>>A([235])=[102030]

3.雙下標(biāo)方式賦值

把A的第2、3列元素全賦為1。

>>A(:,[23])=ones(2)

A=

1117

10118

或者

>>A(:,[23])=[11;11]

2.3標(biāo)準(zhǔn)矩陣與特殊矩陣

2.3.1標(biāo)準(zhǔn)矩陣

由于標(biāo)準(zhǔn)矩陣具有通用性,MATLAB提供了一些專用矩陣函數(shù)來創(chuàng)建它們,標(biāo)準(zhǔn)矩陣一般包括全1矩陣、全0矩陣、單位矩陣、隨機(jī)矩陣及對角矩陣等。

1.全1矩陣

ones()函數(shù):產(chǎn)生全為1的矩陣。

(1)?ones(n):產(chǎn)生n?×?n維的全1矩陣。

(2)?ones(m,n)、ones([mn]):產(chǎn)生m?×?n維的全1矩陣。例如:

>>ones(2,3)

ans=

111

111

2.全0矩陣

zeros()函數(shù):與ones()函數(shù)類似,產(chǎn)生全為0的矩陣。

3.隨機(jī)矩陣

(1)rand()函數(shù):產(chǎn)生在(0,1)區(qū)間均勻分布的隨機(jī)矩陣。例如:

>>rand(2,3)

ans=

0.90580.91340.0975

0.12700.63240.2785

(2)?randn()函數(shù):產(chǎn)生均值為0,方差為1的標(biāo)準(zhǔn)正態(tài)分布隨機(jī)矩陣。例如:

>>randn()

ans=

0.3426

>>randn(2,3)

ans=

3.5784-1.34990.7254

2.76943.0349-0.0631

4.單位矩陣

對角元素為1,其余元素為零的n階方陣稱為n階單位矩陣,記為In或簡寫為I。

eye()函數(shù):產(chǎn)生單位矩陣。使用為eye(n,n)或eye(n)。例如:

>>I5=eye(5)

ans=

10000

01000

00100

00010

00001

5.對角矩陣

diag()函數(shù):產(chǎn)生對角矩陣。例如:

X=diag(v,k)

當(dāng)v是一個n元素的向量時,返回n+abs(k)階的X方陣,v的元素排列在與主對角線平行的第k個元素的對角線上,如圖2-5所示。圖2-5對角矩陣當(dāng)k=0時,各元素出現(xiàn)在主對角線上。

當(dāng)k>0時,各元素位于對角線上方。

當(dāng)k<0時,各元素位于對角線下方。

例如:

>>v=[12479];

>>X=diag(v,0)

X=

10000

02000

00400

00070

00009

>>X=diag(v,-2)

X=

0000000

0000000

1000000

0200000

0040000

0007000

0000900

6.Jordon標(biāo)準(zhǔn)型

當(dāng)利用相似變換將矩陣對角化時會產(chǎn)生Jordon標(biāo)準(zhǔn)型。對于給定的矩陣,如果存在非奇異矩陣,使得矩陣最接近于對角形,則稱為矩陣的Jordon標(biāo)準(zhǔn)型。MATLAB中,函數(shù)Jordan()用于計算矩陣的Jordon標(biāo)準(zhǔn)型。該函數(shù)的調(diào)用格式如下:

(1)?J=jordan(A):計算矩陣的Jordon標(biāo)準(zhǔn)型;

(2)?[V,J]=jordan(A):返回矩陣的Jordon標(biāo)準(zhǔn)型,同時返回相應(yīng)的變換矩陣。2.3.2特殊矩陣

1.奇異矩陣與非奇異矩陣

奇異矩陣是線性代數(shù)的概念,就是對應(yīng)的行列式等于0的矩陣。奇異矩陣和非奇異矩陣的判斷方法:

(1)首先,看這個矩陣是不是方陣,即行數(shù)和列數(shù)相等的矩陣。若行數(shù)和列數(shù)不相等,那就談不上奇異矩陣和非奇異矩陣。

(2)然后,再看此方陣的行列式|A|是否等于0。若等于0,即det(A)==0,稱矩陣A為奇異矩陣;若不等于0,稱矩陣A為非奇異矩陣。

(3)同時,由|A|≠0可知矩陣A可逆,這樣可以得出另外一個重要結(jié)論,即可逆矩陣就是非奇異矩陣,非奇異矩陣也是可逆矩陣。

2.魔方矩陣

魔方矩陣有一個有趣的性質(zhì),其每行、每列及兩條對角線上的元素和都相等。對于n階魔方陣,其元素由1,2,3,…,n2共n2個整數(shù)組成。MATLAB提供了求魔方矩陣的函數(shù)magic(n),其功能是生成一個n階魔方陣。例如:

>>magic(3)

ans=

816

357

492

3.托普利茲矩陣

托普利茲(Toeplitz)矩陣除第一行、第一列外,其他每個元素都與左上角的元素相同。生成托普利茲矩陣的函數(shù)是toeplitz(),其語法如下:

(1)?y=toeplitz(Col,Row)。它生成一個以Col為第一列,Row為第一行的托普利茲矩陣。這里Col、Row均為向量,兩者不必等長。輸出的維數(shù)為[length(Col)length(Row)],元素組成是y(i,j)=y(i-1,j-1),第一個元素y(1,1)是Col的第一個元素。

>>c=[12345];

>>r=[1.52.53.54.55.5];

>>toeplitz(c,r)

ans=

1.0002.5003.5004.5005.500

2.0001.0002.5003.5004.500

3.0002.0001.0002.5003.500

4.0003.0002.0001.0002.500

5.0004.0003.0002.0001.000

(2)?toeplitz(x):用向量x生成一個對稱的托普利茲矩陣。例如:

>>toeplitz(c)

ans=

12345

21234

32123

43212

54321

>>toeplitz(r)

ans=

1.50002.50003.50004.50005.5000

2.50001.50002.50003.50004.5000

3.50002.50001.50002.50003.5000

4.50003.50002.50001.50002.5000

5.50004.50003.50002.50001.5000

4.范得蒙矩陣

范得蒙(Vandermonde)矩陣的最后一列全為1,倒數(shù)第二列為一個指定的向量,其他各列是其后列與倒數(shù)第二列的點乘積,可以用一個指定向量生成一個范得蒙矩陣。在MATLAB中,函數(shù)vander(V)生成以向量V為基礎(chǔ)向量的范得蒙矩陣。例如:

>>v=[12479];

>>vander(v)

ans=

11

111

168

421

256641641

24013434971

65617298191

5.希爾伯特矩陣

在MATLAB中,生成希爾伯特矩陣的函數(shù)是hilb(n)。使用一般方法求逆會因為原始數(shù)據(jù)的微小擾動而產(chǎn)生不可靠的計算結(jié)果。MATLAB中,有一個專門求希爾伯特矩陣的逆的函數(shù)invhilb(n),其功能是求n階的希爾伯特矩陣的逆矩陣。例如:

>>hilb(5)

ans=

1.00000.50000.33330.25000.2000

0.50000.33330.25000.20000.1667

0.33330.25000.20000.16670.1429

0.25000.20000.16670.14290.1250

0.20000.16670.14290.12500.1111

6.伴隨矩陣

MATLAB生成伴隨矩陣的函數(shù)是compan(p),其中,p是一個多項式的系數(shù)向量,高次冪系數(shù)排在前,低次冪排在后。例如:

>>compan(c)

ans=

-2-3-4-5

1?0?00

0?1?00

0?0?10

7.帕斯卡矩陣

我們知道,二次項(x+y)n展開后的系數(shù)隨n的增大組成一個三角形表,稱為楊輝三角形。由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。函數(shù)pascal(n)生成一個n階帕斯卡矩陣。例如:

>>pascal(6)

ans=

111111

123456

136101521

1410203556

162156126252 2.4基本的四則運算

四則算術(shù)運算包括向量、數(shù)組、矩陣與數(shù),向量、數(shù)組、矩陣之間的運算。運算是在矩陣意義下進(jìn)行的,單個數(shù)據(jù)的算術(shù)運算只是一種特例。向量、數(shù)組的四則運算法則總結(jié)如表2-2所示,而矩陣的四則算術(shù)運算有些與此不同。

2.4.1向量、數(shù)組與數(shù)的四則運算

1.向量與數(shù)的加法(減法)

對向量中的每個元素與數(shù)進(jìn)行加法(減法)運算。例如:

>>v1=80:-9:10

v1=

8071625344352617

>>v1+101

ans=

181172163154145136127118

2.向量與數(shù)的乘法(除法)

對向量中的每個元素與數(shù)進(jìn)行乘法(除法)運算。例如:

>>v1*2

ans=

16014212410688705234

3.?dāng)?shù)組與數(shù)之間的四則運算

數(shù)組與數(shù)之間的運算(或叫標(biāo)量、數(shù)組運算),與向量運算規(guī)則相同,即數(shù)組的每個元素分別與數(shù)進(jìn)行運算。例如:

>>s=[123;852]

s=

123

852

>>S=s-2

S=

-101

630

>>H=2*s/3+1

H=

1.66672.33333.0000

6.33334.33332.33332.4.2向量、數(shù)組之間的四則運算

1.向量之間的四則運算

向量中的每個元素與另一個向量中相對應(yīng)的元素進(jìn)行四則運算,兩個向量的長度必須相同。例如:

>>ve1=linspace(200,500,7)

ve1=

200250300350400450500

>>ve2=linspace(90,60,7)

ve2=

90858075706560

>>ve3=ve1+ve2

ve3=

290335380425470515560

>>ve4=ve1.*ve2

ve4=

18000212502400026250280002925030000

>>ve5=ve1./ve2

ve5=

2.22222.94123.75004.66675.71436.92318.3333

>>ve6=ve1.\ve2

ve6=

0.45000.34000.26670.21430.17500.14440.1200

2.?dāng)?shù)組之間的運算

數(shù)組和數(shù)組之間的加減運算與向量運算相同。

當(dāng)兩個數(shù)組的維數(shù)相同時,加、減、乘、除(左除、右除)都可以逐元素(元素對元素)進(jìn)行??梢允褂玫乃膭t運算符號如下:

加、減法符號,“+”、“-”;

乘法符號,“.*”;

維數(shù)相同的兩數(shù)組的除法也是對應(yīng)元素之間的除法,數(shù)組的除法沒有左除和右除之分,即運算符“./”和“.\”的運算結(jié)果是一致的,不過要注意被除數(shù)和除數(shù)在兩種除法運算符中的左右位置是不同的。

也可以使用函數(shù)plus()、minus()、times()、ldivide()、rdivide()完成對應(yīng)的運算。

(1)加、減法運算。數(shù)組是逐元素進(jìn)行加、減法運算。例如:

>>g=[123;456]

>>h=[111;222]

>>g+h

ans=

234

678

>>2*(g-h)

ans=

024

468使用函數(shù)plus()、minus()的運算結(jié)果與上述運算的結(jié)果相同。例如:

>>2*minus(g,h)

ans=

024

468

(2)數(shù)組乘法。數(shù)組乘法使用點乘符號“.*”,或times()函數(shù)進(jìn)行逐元素運算。例如:

>>g.*h

ans=

123

81012

>>times(g,h)

ans=

123

81012

(3)數(shù)組除法。數(shù)組除法使用點除符號“./”或“.\”,逐元素(元素對元素)進(jìn)行運算。

數(shù)組左除“.\”表示左邊為分母,右邊為分子。例如:

>>g.\h

ans=

1.00000.50000.3333

0.50000.40000.3333

數(shù)組左除使用ldivide()函數(shù)。例如:

>>ldivide(g,h)數(shù)組右除“./”表示右邊為分母,左邊為分子。例如:

>>g./h

ans=

1.00002.00003.0000

2.00002.50003.0000

數(shù)組右除使用rdivide()函數(shù)。例如:

>>rdivide(g,h)在一個是標(biāo)量的情況下,把標(biāo)量擴(kuò)展為與分母相同維數(shù)的數(shù)組,并同樣遵循點除的規(guī)則。例如:

>>2.\h

ans=

0.50000.50000.5000

1.00001.00001.0000

>>2./h

ans=

222

111

>>rdivide(2,h)

ans=

222

1112.4.3矩陣加減運算

假定有兩個矩陣A和B,則可以由A+B和A-B運算,或使用函數(shù)plus(A,B)、minus(A,B)實現(xiàn)矩陣的加、減運算。

運算規(guī)則是:若A和B矩陣的維數(shù)相同,則可以執(zhí)行矩陣的加減運算,A和B矩陣的相應(yīng)元素相加減。如果A與B的維數(shù)不相同,則MATLAB將給出錯誤信息,提示用戶兩個矩陣的維數(shù)不匹配。與數(shù)組一樣,標(biāo)量與矩陣相加,則把標(biāo)量與每個元素相加。例如:

>>A=[111;222;333];

>>6+A

ans=

777

888

9992.4.4矩陣的乘法

在MATLAB中,矩陣乘法有通常意義上的矩陣乘法,也有Kronecker乘法。矩陣乘法與數(shù)組的逐元素對應(yīng)乘法不同,矩陣乘法使用符號“*”。

1.普通乘法與mtimes()函數(shù)

假定有兩個矩陣A和B,若A為m?×?n矩陣,B為p?×?q矩陣。當(dāng)n=p時,B為n?×?q矩陣,則兩個矩陣可以相乘,即后面矩陣B的行數(shù)必須與前面矩陣A的列數(shù)相同,二者可以進(jìn)行乘法運算,否則是錯誤的。結(jié)果矩陣C=A?×?B為m?×?q矩陣。

矩陣乘法不可逆,在MATLAB中,矩陣乘法由(*)實現(xiàn)。計算方法和線性代數(shù)中所介紹的完全相同,后面矩陣B的第一個列向量與前面矩陣A的第一個行向量對應(yīng)元素相乘,其和作為結(jié)果矩陣的第一列的第一個元素,后面矩陣的第一個列向量與前面矩陣的第二個行向量對應(yīng)元素相乘,其和作為結(jié)果矩陣的第一列的第二個元素,依此類推。

例如:

A=[1

23;

456];B=[1

2;3

4;56];

C=A?×?B,結(jié)果為

1)標(biāo)量與矩陣相乘

與數(shù)組一樣,標(biāo)量與矩陣相乘,即把標(biāo)量與每個元素相乘。

上例中,如果A或B是標(biāo)量,則A?×?B返回標(biāo)量A(或B)乘上矩陣B(或A)的每一個元素所得的矩陣。例如:

>>6*A

ans=

612

1824

2)矩陣之間的乘法

矩陣之間的乘法與數(shù)組的點乘法不同,主要區(qū)別如下:

(1)乘法規(guī)則不同。例如:

>>A=[111;222;333]

A=

111

222

333

>>B=[123;456;789]

B=

123

456

789矩陣乘法結(jié)果:

>>C=A*B

C=

121518

243036

364554

數(shù)組乘法結(jié)果:

>>D=A.*B

D=

123

81012

212427

(2)矩陣乘法不要求維數(shù)相同。例如:

>>a=[123;456;789]

a=

123

456

789

>>b=[12;34;56]

b=

12

34

56

>>c=a*b

c=

2228

4964

76100而數(shù)組的點乘(逐元素對應(yīng)乘法)要求其維數(shù)相同,否則就會報錯:

>>d=a.*b

???Errorusing==>times

Matrixdimensionsmustagree.

(3)數(shù)組乘法可以交換,而矩陣乘法不可以交換。例如:

>>E=B.*A

E=

123

81012

212427

數(shù)組交換后乘法結(jié)果與D相同,而矩陣則不同:

>>F=B*A

F=

141414

323232

505050在MATLAB中,可以使用mtimes()函數(shù)計算矩陣乘法。語法如下:

mtimes(A,B):A、B可以是標(biāo)量,也可以是矩陣。

當(dāng)A、B都是矩陣時,完成矩陣之間的乘法。例如:

>>A=[1

2;3

4];B=[5

6;7

8];

>>mtimes(A,B)

ans=

1922

4350

當(dāng)A、B有一個是標(biāo)量時,完成矩陣與標(biāo)量之間的乘法。例如:

>>mtimes(A,6)

ans=

612

1824

2.矩陣的Kronecker乘法

與矩陣的普通乘法不同,Kronecker乘法并不要求兩個被乘矩陣滿足任何維數(shù)匹配方面的要求。Kronecker乘法的MATLAB命令為C=kron(A,B)。

語句C=kron(A,B):返回A和B的Kronecker(克羅內(nèi)克)張量積,其結(jié)果是一個大矩陣,由A、B元素之間所有可能的乘積組成。

例如給定兩個矩陣A和B:對n×m階矩陣A和p?×?q階矩陣B,A和B的Kronecher乘法運算可定義為由上面的式子可以看出,Kronecker乘積AB表示矩陣A的所有元素與B之間的乘積組合而成的較大的矩陣,BA則完全類似。AB和BA均為np×mq矩陣,但一般情況下AB≠BA。例:

>>A=[12;34];B=[132;246];

>>A*B %矩陣的普通乘法

ans=

51114

112530

>>C=kron(A,B) %矩陣的Kronecker乘法

C=

132264

2464812

3964128

61218816242.4.5矩陣的除法

在MATLAB中,有兩種矩陣除法符號,即左除“\”和右除“/”,也可以使用對應(yīng)的函數(shù)mldivide()和mrdivide()。如果A矩陣是非奇異方陣,則A\B和B/A運算可以實現(xiàn):

(1)?A\B或mldivide(A,B):等效于A的逆左乘B矩陣,也就是A\B=inv(A)*B。

(2)?B/A或mrdivide(A,B):等效于A矩陣的逆右乘B矩陣,也就是B/A=B*inv(A)。

對于矩陣來說,左除和右除表示兩種不同的除數(shù)矩陣和被除數(shù)矩陣的關(guān)系,一般A\B≠B/A。但對于含有標(biāo)量的運算,兩種除法運算的結(jié)果相同。通常:

x=A\B就是A*x=B的解;

x=B/A就是x*A=B的解。

當(dāng)B與A矩陣行數(shù)相等可進(jìn)行左除,如果A是方陣,用高斯消元法分解因數(shù),然后解方程:A*x(:,j)=B(:,j)。式中,(:,j)表示B矩陣的第j列,返回的結(jié)果x具有與B矩陣相同的階數(shù),如果A是奇異矩陣將給出警告信息。

如果A矩陣不是方陣,可由以列為基準(zhǔn)的Householder正交分解法分解,這種分解法可以解決在最小二乘法中的欠定方程或超定方程,結(jié)果是m?×?n的x矩陣:m是A矩陣的列數(shù),n是B矩陣的列數(shù),每個矩陣的列向量最多有k個非零元素,k是A的有效秩。

矩陣除法在實際中主要用于求解線性方程組。矩陣與標(biāo)量間無除法運算,唯有矩陣右除(即矩陣/標(biāo)量)可運算。 2.5向量、數(shù)組和矩陣的其他運算

2.5.1乘方、開方運算

1.向量、數(shù)組的乘方運算與power()函數(shù)

在MATLAB中乘方運算有幾種定義方式,符號(.^)或power()函數(shù)是數(shù)組用來執(zhí)行元素對元素的乘方運算的,當(dāng)乘方指數(shù)是一個標(biāo)量時,該標(biāo)量對數(shù)組的所有元素進(jìn)行取乘方操作。數(shù)組乘方運算的語法如下:

c=a.^k或c=power(a,k):計算c=ak,k是實數(shù)。

向量的乘方運算與之相同。例如:

>>ve2.^2

ans=

8100722564005625490042253600

>>g=[123;456]

>>g.^2

ans=

149

162536

>>g.^-2

ans=

1.00000.25000.1111

0.06250.04000.0278運行power(g,-2)結(jié)果與之相同。

>>g'

ans=

14

25

36

>>g'*h

ans=

999

121212

151515

2.矩陣的乘方與mpower()函數(shù)

與數(shù)組的指數(shù)運算不同,一個矩陣的乘方運算可以表示成A^P,即A自乘P次。要求A必須為方陣,P為標(biāo)量。語法如下:

C=A^P或C=mpower(A,P):表示C?=?AP,P為正整數(shù)。

如果P是一個大于1的整數(shù),則A^P表示A的P次冪;如果P不是整數(shù),計算涉及到特征值和特征向量的問題,如已經(jīng)求得[V,D]=eig(A),則

A^P=V*D.^P/V注:這里的.^表示數(shù)組乘方,或點乘方。

>>A=[123

406

789];

>>A^2%等于A*A

ans=

302642

465666

10286150

3.向量元素的平方和根與norm()函數(shù)

求向量元素的平方和根使用norm()函數(shù)。用法如下:

(1)?y=norm(x,p):求向量x元素的p次和的p次方根,即返回y=sum(abs(A).^p)^(1/p),其中,1≤p≤。

(2)?y=norm(x):不指定p時,默認(rèn)為2,即相當(dāng)于y=norm(x,2),返回。

(3)?norm(x,inf):返回x中絕對值最大的元素,相當(dāng)于max(abs(x))。

(4)?norm(x,-inf):返回x中絕對值最小的元素,相當(dāng)于min(abs(x))。

例如:

>>x=[1-234];

>>norm(x)

ans=

5.4772

4.?dāng)?shù)組、矩陣的平方根與sqrt()、sqrtm()函數(shù)

(1)

B=sqrt(X):返回數(shù)組X的每個元素的平方根。對于負(fù)的或復(fù)數(shù)元素,sqrt(X)生成的結(jié)果為復(fù)數(shù)。例如:

>>sqrt(x)

ans=

1.00000+1.4142i1.73212.0000

(2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論