搜档网
当前位置:搜档网 › matlab使用手册

matlab使用手册

matlab使用手册
matlab使用手册

第1章矩阵及其基本运算

MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。

1.1 矩阵的表示

1.1.1 数值矩阵的生成

1.实数值矩阵输入

MATLAB的强大功能之一体现在能直接处理向量或矩阵。当然首要任务是输入待处理的向量或矩阵。

不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。如:

>> Time = [11 12 1 2 3 4 5 6 7 8 9 10]

Time =

11 12 1 2 3 4 5 6 7 8 9 10

>> X_Data = [2.32 3.43;4.37 5.98]

X_Data =

2.43

3.43

4.37

5.98

>> vect_a = [1 2 3 4 5]

vect_a =

1 2 3 4 5

>> Matrix_B = [1 2 3;

>> 2 3 4;3 4 5]

Matrix_B = 1 2 3

2 3 4

3 4 5

>> Null_M = [ ] %生成一个空矩阵

2.复数矩阵输入

复数矩阵有两种生成方式:

第一种方式

例1-1

>> a=2.7;b=13/25;

>> C=[1,2*a+i*b,b*sqrt(a); sin(pi/4),a+5*b,3.5+1]

C=

1.0000 5.4000 + 0.5200i 0.8544

0.7071 5.3000 4.5000

第2种方式

例1-2

>> R=[1 2 3;4 5 6], M=[11 12 13;14 15 16]

R =

1 2 3

4 5 6

M =

11 12 13

14 15 16

>> CN=R+i*M

CN =

1.0000 +11.0000i

2.0000 +12.0000i

3.0000 +13.0000i

4.0000 +14.0000i

5.0000 +15.0000i

6.0000 +16.0000i

1.1.2 符号矩阵的生成

在MATLAB中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号矩阵定义函数sym,或者是用到符号定义函数syms,先定义一些必要的符号变量,再像定义普通矩阵一样输入符号矩阵。

1.用命令sym定义矩阵:

这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。如下例:

例1-3

>> sym_matrix = sym('[a b c;Jack,Help Me!,NO WAY!],')

sym_matrix =

[a b c]

[Jack Help Me! NO WAY!]

>> sym_digits = sym('[1 2 3;a b c;sin(x)cos(y)tan(z)]')

sym_digits =

[1 2 3]

[a b c]

[sin(x)cos(y)tan(z)]

2.用命令syms定义矩阵

先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。

例1-4

>> syms a b c ;

>> M1 = sym('Classical');

>> M2 = sym(' Jazz');

>> M3 = sym('Blues')

>> syms_matrix = [a b c;M1,M2,M3;int2str([2 3 5])]

syms_matrix =

[ a b c]

[Classical Jazz Blues]

[ 2 3 5]

把数值矩阵转化成相应的符号矩阵。

数值型和符号型在MATLAB中是不相同的,它们之间不能直接进行转化。MA TLAB提供了一个将数值型转化成符号型的命令,即sym。

例1-5

>> Digit_Matrix = [1/3 sqrt(2)3.4234;exp(0.23)log(29)23^(-11.23)]

>> Syms_Matrix = sym(Digit_Matrix)

结果是:

Digit_Matrix =

0.3333 1.4142 3.4234

1.2586 3.3673 0.0000

Syms_Matrix =

[ 1/3,sqrt(2),17117/5000]

[5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)]

注意:矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。

1.1.3 大矩阵的生成

对于大型矩阵,一般创建M文件,以便于修改:

例1-6 用M文件创建大矩阵,文件名为example.m

exm=[ 456 468 873 2 579 55

21 687 54 488 8 13

65 4567 88 98 21 5

456 68 4589 654 5 987

5488 10 9 6 33 77]

在MA TLAB窗口输入:

>>example;

>>size(exm) %显示exm的大小

ans=

5 6 %表示exm有5行6列。

1.1.4 多维数组的创建

函数cat

格式A=cat(n,A1,A2,…,Am)

说明n=1和n=2时分别构造[A1;A2]和[A1,A2],都是二维数组,而n=3时可以构造出三维数组。

例1-7

>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;

>> A4=cat(3,A1,A2,A3)

A4(:,:,1) =

1 2 3

4 5 6

7 8 9

A4(:,:,2) =

1 4 7

2 5 8

3 6 9

A4(:,:,3) =

0 -2 -4

2 0 -2

4 2 0

或用另一种原始方式可以定义:

例1-8

>> A1=[1,2,3;4,5,6;7,8,9];A2=A1';A3=A1-A2;

>> A5(:,:,1)=A1, A5(:,:,2)=A2, A5(:,:,3)=A3

A5(:,:,1) =

1 2 3

4 5 6

7 8 9

A5(:,:,2) =

1 4 7

2 5 8

3 6 9

A5(:,:,3) =

0 -2 -4

2 0 -2

4 2 0

1.1.5 特殊矩阵的生成

命令全零阵

函数zeros

格式 B = zeros(n) %生成n×n全零阵

B = zeros(m,n) %生成m×n全零阵

B = zeros([m n]) %生成m×n全零阵

B = zeros(d1,d2,d3…) %生成d1×d2×d3×…全零阵或数组

B = zeros([d1 d2 d3…]) %生成d1×d2×d3×…全零阵或数组

B = zeros(size(A)) %生成与矩阵A相同大小的全零阵

命令单位阵

函数eye

格式Y = eye(n) %生成n×n单位阵

Y = eye(m,n) %生成m×n单位阵

Y = eye(size(A)) %生成与矩阵A相同大小的单位阵命令全1阵

函数ones

格式Y = ones(n) %生成n×n全1阵

Y = ones(m,n) %生成m×n全1阵

Y = ones([m n]) %生成m×n全1阵

Y = ones(d1,d2,d3…) %生成d1×d2×d3×…全1阵或数组

Y = ones([d1 d2 d3…]) %生成d1×d2×d3×…全1阵或数组

Y = ones(size(A)) %生成与矩阵A相同大小的全1阵命令均匀分布随机矩阵

函数rand

格式Y = rand(n) %生成n×n随机矩阵,其元素在(0,1)内Y = rand(m,n) %生成m×n随机矩阵

Y = rand([m n]) %生成m×n随机矩阵

Y = rand(m,n,p,…) %生成m×n×p×…随机矩阵或数组

Y = rand([m n p…]) %生成m×n×p×…随机矩阵或数组

Y = rand(size(A)) %生成与矩阵A相同大小的随机矩阵

rand %无变量输入时只产生一个随机数

s = rand('state') %产生包括均匀发生器当前状态的35个元素的向量rand('state', s) %使状态重置为s

rand('state', 0) %重置发生器到初始状态

rand('state', j) %对整数j重置发生器到第j个状态

rand('state', sum (100*clock)) %每次重置到不同状态

例1-9 产生一个334随机矩阵

>> R=rand(3,4)

R =

0.9501 0.4860 0.4565 0.4447

0.2311 0.8913 0.0185 0.6154

0.6068 0.7621 0.8214 0.7919

例1-10 产生一个在区间[10, 20]内均匀分布的4阶随机矩阵

>> a=10;b=20;

>> x=a+(b-a)*rand(4)

x =

19.2181 19.3547 10.5789 11.3889

17.3821 19.1690 13.5287 12.0277

11.7627 14.1027 18.1317 11.9872

14.0571 18.9365 10.0986 16.0379

命令正态分布随机矩阵

函数randn

格式Y = randn(n) %生成n×n正态分布随机矩阵

Y = randn(m,n) %生成m×n正态分布随机矩阵

Y = randn([m n]) %生成m×n正态分布随机矩阵

Y = randn(m,n,p,…) %生成m×n×p×…正态分布随机矩阵或数组

Y = randn([m n p…]) %生成m×n×p×…正态分布随机矩阵或数组

Y = randn(size(A)) %生成与矩阵A相同大小的正态分布随机矩阵

randn %无变量输入时只产生一个正态分布随机数

s = randn('state') %产生包括正态发生器当前状态的2个元素的向量

s = randn('state', s) %重置状态为s

s = randn('state', 0) %重置发生器为初始状态

s = randn('state', j) %对于整数j重置状态到第j状态

s = randn('state', sum(100*clock)) %每次重置到不同状态

例1-11 产生均值为0.6,方差为0.1的4阶矩阵

>> mu=0.6; sigma=0.1;

>> x=mu+sqrt(sigma)*randn(4)

x =

0.8311 0.7799 0.1335 1.0565

0.7827 0.5192 0.5260 0.4890

0.6127 0.4806 0.6375 0.7971 0.8141 0.5064 0.6996 0.8527

命令 产生随机排列 函数 randperm

格式 p = randperm(n) %产生1~n 之间整数的随机排列 例1-12

>> randperm(6) ans =

3 2 1 5

4 6

命令 产生线性等分向量 函数 linspace

格式 y = linspace(a,b) %在(a, b)上产生100个线性等分点

y = linspace(a,b,n) %在(a, b)上产生n 个线性等分点 命令 产生对数等分向量 函数 logspace

格式 y = logspace(a,b) %在( )之间产生50个对数等分向量

y = logspace(a,b,n) y = logspace(a,pi) 命令 计算矩阵中元素个数

n = numel(a) %返回矩阵A 的元素的个数 命令 产生以输入元素为对角线元素的矩阵 函数 blkdiag

格式 out = blkdiag(a,b,c,d,…) %产生以a,b,c,d,…为对角线元素的矩阵 例1-13

>> out = blkdiag(1,2,3,4) out =

1 0 0 0 0

2 0 0 0 0

3 0 0 0 0 4

命令 友矩阵 函数 compan

格式 A = compan(u) %u 为多项式系统向量,A 为友矩阵,A 的第1行元素为

-u (2:n)/u(1),其中u (2:n)为u 的第2到第n 个元素,A 为特征值就是多项式的特征根。

例1-14 求多项式 的友矩阵和根

>> u=[1 0 -7 6];

>> A=compan(u) %求多项式的友矩阵

A =

0 7 -6 1 0 0 0 1 0

>> eig(A) %A 的特征值就是多项式的根

ans =

b a 10,1067)3)(2)(1(3+-=+--x x x x x

-3.0000

2.0000

1.0000

命令hadamard矩阵

函数hadamard

格式H = hadamard(n) %返回n阶hadamard矩阵

例1-15

>> h=hadamard(4)

h =

1 1 1 1

1 -1 1 -1

1 1 -1 -1

1 -1 -1 1

命令Hankel方阵

函数hankel

格式H = hankel(c) %第1列元素为c,反三角以下元素为0。

H = hankel(c,r) %第1列元素为c,最后一行元素为r,如果c的最后一个元素

与r的第一个元素不同,交叉位置元素取为c的最后一个元素。例1-16

>> c=1:3,r=7:10

c =

1 2 3

r =

7 8 9 10

>> h=hankel(c,r)

h =

1 2 3 8

2 3 8 9

3 8 9 10

命令Hilbert矩阵

函数hilb

格式H = hilb(n) %返回n阶Hilbert矩阵,其元素为H(i,j)=1/(i+j-1)。

例1-17 产生一个3阶Hilbert矩阵

>> format rat %以有理形式输出

>> H=hilb(3)

H =

1 1/

2 1/3

1/2 1/3 1/4

1/3 1/4 1/5

命令逆Hilbert矩阵

函数invhilb

格式H = invhilb(n) %产生n阶逆Hilbert矩阵

命令Magic(魔方)矩阵

函数magic

格式M = magic(n) %产生n 阶魔方矩阵

例1-18

>> M=magic(3)

M =

8 1 6

3 5 7

4 9 2

命令Pascal矩阵

函数pascal

格式 A = pascal(n) %产生n阶Pascal矩阵,它是对称、正定矩阵,它的元素由

Pascal三角组成,它的逆矩阵的所有元素都是整数。

A = pascal(n,1) %返回由下三角的Cholesky系数组成的Pascal矩阵

A = pascal(n,2) %返回Pascal(n,1)的转置和交换的形式

例1-19

>> A=pascal(4)

A =

1 1 1 1

1 2 3 4

1 3 6 10

1 4 10 20

>> A=pascal(3,1)

A =

1 0 0

1 -1 0

1 -

2 1

>> A=pascal(3,2)

A =

1 1 1

-2 -1 0

1 0 0

命令托普利兹矩阵

函数toeplitz

格式T = toeplitz(c,r) %生成一个非对称的托普利兹矩阵,将c作为第1列,将r作

为第1 行,其余元素与左上角相邻元素相等。

T = toeplitz(r) %用向量r生成一个对称的托普利兹矩阵

例1-20

>> c=[1 2 3 4 5];

>> r=[1.5 2.5 3.5 4.5 5.5];

>> T=toeplitz(c,r)

T =

1 5/

2 7/2 9/2 11/2

2 1 5/2 7/2 9/2

3 2 1 5/2 7/2

4 3 2 1 5/2

5 4 3 2 1

命令Wilkinson特征值测试阵

函数wilkinson

格式W = wilkinson(n) %返回n阶Wilkinson特征值测试阵

例1-21

>> W=wilkinson(4)

W =

3/2 1 0 0

1 1/

2 1 0

0 1 1/2 1

0 0 1 3/2

>> W=wilkinson(7)

W =

3 1 0 0 0 0 0

1 2 1 0 0 0 0

0 1 1 1 0 0 0

0 0 1 0 1 0 0

0 0 0 1 1 1 0

0 0 0 0 1 2 1

0 0 0 0 0 1 3

1.2 矩阵运算

1.2.1 加、减运算

运算符:“+”和“-”分别为加、减运算符。

运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。

例1-22

>>A=[1, 1, 1; 1, 2, 3; 1, 3, 6]

>>B=[8, 1, 6; 3, 5, 7; 4, 9, 2]

>>A+B=A+B

>>A-B=A-B

结果显示:A+B=

9 2 7

4 7 10

5 12 8

A-B=

-7 0 -5

-2 -3 -4

-3 -6 4

1.2.2 乘法

运算符:*

运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。

1.两个矩阵相乘

例1-23

>>X= [2 3 4 5;

1 2 2 1];

>>Y=[0 1 1;

1 1 0;

0 0 1;

1 0 0];

Z=X*Y

结果显示为:

Z=

8 5 6

3 3 3

2.矩阵的数乘:数乘矩阵

上例中:a=2*X

则显示:a =

4 6 8 10

2 4 4 2

向量的点乘(内积):维数相同的两个向量的点乘。

数组乘法:

A.*B表示A与B对应元素相乘。

3.向量点积

函数dot

格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度

相同;若为矩阵,则A与B有相同的维数。

C = dot(A,B,dim) %在dim维数中给出A与B的点积

例>>X=[-1 0 2];

>>Y=[-2 -1 1];

>>Z=dot(X, Y)

则显示:Z =

4

还可用另一种算法:

sum(X.*Y)

ans=

4

4.向量叉乘

在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中,用函数cross实现。

函数cross

格式 C = cross(A,B) %若A、B为向量,则返回A与B的叉乘,即C=A3B,A、B

必须是3个元素的向量;若A、B为矩阵,则返回一个33n

矩阵,其中的列是A与B对应列的叉积,A、B都是33n矩

阵。

C = cross(A,B,dim) %在dim维数中给出向量A与B的叉积。A和B必须具有

相同的维数,size(A,dim)和size(B,dim)必须是3。

例1-24 计算垂直于向量(1, 2, 3)和(4, 5, 6)的向量。

>>a=[1 2 3];

>>b=[4 5 6];

>>c=cross(a,b)

结果显示:

c=

-3 6 -3

可得垂直于向量(1, 2, 3)和(4, 5, 6)的向量为±(-3, 6, -3)

5.混合积

混合积由以上两函数实现:

例1-25 计算向量a=(1, 2, 3)、b=(4, 5, 6)和c=(-3, 6, -3) 的混合积)c b (a ?? 解:

>>a=[1 2 3]; b=[4 5 6]; c=[-3 6 -3]; >>x=dot(a, cross(b, c)) 结果显示:x = 54

注意:先叉乘后点乘,顺序不可颠倒。

6.矩阵的卷积和多项式乘法 函数 conv

格式 w = conv(u,v) %u 、v 为向量,其长度可不相同。

说明 长度为m 的向量序列u 和长度为n 的向量序列v 的卷积(Convolution)定义为:

∑=-+=k

1

j )j 1k (v )j (u )k (w 式中:w 向量序列的长度为(m+n-1),当m=n 时,

w(1) = u(1)*v(1)

w(2) = u(1)*v(2)+u(2)*v(1)

w(3) = u(1)*v(3)+u(2)*v(2)+u(3)*v(1) …

w(n) = u(1)*v(n)+u(2)*v(n-1)+ … +u(n)*v(1) …

w(2*n-1) = u(n)*v(n)

例1-26 展开多项式)1()4()22(2++++s s s s 解:>> w=conv([1,2,2],conv([1,4],[1,1]))

w =

1 7 16 18 8

>> P=poly2str(w,'s') %将w 表示成多项式

P =

s^4 + 7 s^3 + 16 s^2 + 18 s + 8

7.反褶积(解卷)和多项式除法运算 函数 deconv

格式 [q,r] = deconv(v,u) %多项式v 除以多项式u ,返回商多项式q 和余多项式r 。 注意:v 、u 、q 、r 都是按降幂排列的多项式系数向量。

例1-27 ,则其卷积为

>>u = [1 2 3 4]

>>v = [10 20 30] >>c = conv(u,v)

c =

10 40 100 160 170 120 则反褶积为

>>[q,r] = deconv(c,u)

q =

10 20 30 r =

0 0 0 0 0 0

8.张量积

)302010)(432(2

23+++++x x x x x

函数 kron

格式 C=kron (A,B) %A 为m×n 矩阵,B 为p×q 矩阵,则C 为mp×nq 矩阵。

说明 A 与B 的张量积定义为:?

?

??

?

?

?

??

???=?=B a B

a B a B a B a B a B a B

a B a B A C mn 2m 1m n 222

21n 11211 A ?B 与B ?A

均为mp×nq 矩阵,但一般地A ?B ≠B ?A 。

例1-28 ???

???=4321A ????

?

?????=987654321B 求A ?B 。 >> A=[1 2;3 4];B=[1 2 3;4 5 6;7 8 9];

>> C=kron(A,B)

C =

1 2 3 2 4 6 4 5 6 8 10 12 7 8 9 14 16 18 3 6 9 4 8 12 12 15 18 16 20 24 21 24 27 28 32 36

1.2.3 集合运算

1.两个集合的交集 函数 intersect

格式 c = intersect(a,b) %返回向量a 、b 的公共部分,即c= a ∩b 。

c = intersect(A,B,'rows') %A 、B 为相同列数的矩阵,返回元素相同的行。 [c,ia,ib] = intersect(a,b) %c 为a 、b 的公共元素,ia 表示公共元素在a 中的位置,

ib 表示公共元素在b 中位置。

例1-29

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

A =

1 2 3 4 1 2 4 6 6 7 1 4 >> B=[1 2 3 8;1 1 4 6;6 7 1 4]

B =

1 2 3 8 1 1 4 6 6 7 1 4 >> C=intersect(A,B,'rows')

C =

6 7 1 4

例1-30

>> A = [1 9 6 20]; B = [1 2 3 4 6 10 20]; >> [c,ia,ib] = intersect(A,B)

c =

1 6 20

ia =

1 3 4

ib =

1 5 7

2.检测集合中的元素

函数ismember

格式k = ismember(a,S) %当a中元素属于S时,k取1,否则,k取0。

k = ismember(A,S,'rows') %A、S有相同的列,返回行相同k取1,不相同取0

的列向量。

例1-31

>> S=[0 2 4 6 8 10 12 14 16 18 20];

>> a=[1 2 3 4 5 6];

>> k=ismember(a,S)

k =

0 1 0 1 0 1 %1表示相同元素的位置

例1-32

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

>> k=ismember(A,B,'rows')

k =

1 %1表示元素相同的行

3.两集合的差

函数setdiff

格式 c = setdiff(a,b) %返回属于a但不属于b的不同元素的集合,C = a-b。

c = setdiff(A,B,'rows') %返回属于A但不属于B的不同行

[c,i] = setdiff(…) %c与前面一致,i表示c中元素在A中的位置。

例1-33

>> A = [1 7 9 6 20]; B = [1 2 3 4 6 10 20];

>> c=setdiff(A,B)

c =

7 9

例1-34

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

>> c=setdiff(A,B,'rows')

c =

1 2 3 4

1 2 4 6

4.两个集合交集的非(异或)

函数setxor

格式 c = setxor(a,b) %返回集合a、b交集的非

c = setxor(A,B,'rows') %返回矩阵A、B交集的非,A、B有相同列数。

[c,ia,ib] = setxor(…) %ia、ib表示c中元素分别在a (或A)、b(或B)中位置

例1-35

>> A=[1 2 3 4];

>> B=[2 4 5 8];

>> C=setxor(A,B)

C =

1 3 5 8

例1-36

>> A=[1 2 3 4;1 2 4 6;6 7 1 4]

A =

1 2 3 4

1 2 4 6

6 7 1 4

>> B=[1 2 3 8;1 1 4 6;6 7 1 4]

B =

1 2 3 8

1 1 4 6

6 7 1 4

>> [C,ia,ib]=setxor(A,B,'rows')

C =

1 1 4 6

1 2 3 4

1 2 3 8

1 2 4 6

ia =

1

2

ib =

2

1

5.两集合的并集

函数union

格式 c = union(a,b) %返回a、b的并集,即c = a∪b。

c = union(A,B,'rows') %返回矩阵A、B不同行向量构成的大矩阵,其中相同行

向量只取其一。

[c,ia,ib] = union(…) %ia、ib分别表示c中行向量在原矩阵(向量)中的位置例1-37

>> A=[1 2 3 4];

>> B=[2 4 5 8];

>> c=union(A,B)

则结果为

c =

1 2 3 4 5 8

例1-38

>> A=[1 2 3 4;1 2 4 6]

A =

1 2 3 4

1 2 4 6

>> B=[1 2 3 8;1 1 4 6]

B =

1 2 3 8

1 1 4 6

>> [c,ia,ib]=union(A,B,'rows')

c =

1 1 4 6

1 2 3 4

1 2 3 8

1 2 4 6

ia =

1

2

ib =

2

1

6.取集合的单值元素

函数

格式 b = unique (a) %取集合a的不重复元素构成的向量

b = unique (A,'rows') %返回A、B不同行元素组成的矩阵

[b,i,j] = unique (…) %i、j体现b中元素在原向量(矩阵)中的位置例1-39

>> A=[1 1 2 2 4 4 6 4 6]

A =

1 1

2 2 4 4 6 4 6

>> [c,i,j]=unique(A)

c =

1 2 4 6

i =

2 4 8 9

j =

1 1

2 2

3 3

4 3 4

例1-40

>> A=[1 2 2 4;1 1 4 6;1 1 4 6]

A =

1 2 2 4

1 1 4 6

1 1 4 6

>> [c,i,j]=unique(A,'rows')

c =

1 1 4 6

1 2 2 4

i =

3

1

j =

2

1

1

1.2.4 除法运算

Matlab提供了两种除法运算:左除(\)和右除(/)。一般情况下,x=a\b是方程a*x =b 的解,而x=b/a是方程x*a=b的解。

例:a=[1 2 3; 4 2 6; 7 4 9]

b=[4; 1; 2]; x=a\b 则显示:x=

-1.5000

2.0000

0.5000

如果a 为非奇异矩阵,则a\b 和b/a 可通过a 的逆矩阵与b 阵得到:

a\b = inv(a)*b b/a = b*inv(a)

数组除法:

A./B 表示A 中元素与B 中元素对应相除。

1.2.5 矩阵乘方

运算符:^ 运算规则:

(1)当A 为方阵,P 为大于0的整数时,A^P 表示A 的P 次方,即A 自乘P 次;P 为小于0的整数时,A^P 表示A -1的P 次方。

(2)当A 为方阵,p 为非整数时,则1p nn p 11V d d V P ^A -????

?

???

??= 其中V 为A 的特征向量,?

???

???

?nn 11d d

为特征值对角矩阵。如果有重根,以上指令不成立。 (3)标量的矩阵乘方P A ,标量的矩阵乘方定义为1

d d A V p p V P n n 11-??

???

?

??????= 式中V ,D 取

自特征值分解A V=AD 。

(4)标量的数组乘方P.^A ,标量的数组乘方定义为????

?

???????=n m 1m n 111a a a a p p p p A .^P 数组乘方:

A.^P :表示A 的每个元素的P 次乘方。

1.2.6 矩阵函数

命令 方阵指数

函数 expm

格式 Y = expm(A) %使用Pade 近似算法计算e A ,这是一个内部函数,A 为方阵。 Y=expm1(A) %使用一个M 文件和内部函数相同的算法计算e A Y=expm2(A) %使用泰勒级数计算e A

Y=expm3(A) %使用特征值和特征向量计算e A

命令矩阵的对数

函数logm

格式Y = logm(X) %计算矩阵X的对数,它是expm(X)的反函数。

[Y,esterr] = logm(X) %esterr为相对残差的估计值:norm(expm(Y)-X)/norm(X) 例1-41

>> A=[1 1 0;0 0 2;0 0 -1];

>> Y=expm(A)

Y =

2.7183 1.7183 1.0862

0 1.0000 1.2642

0 0 0.3679

>> A=logm(Y)

A =

1.0000 1.0000 0.0000

0 0 2.0000

0 0 -1.0000

命令方阵的函数

函数funm

格式 F = funm(A,fun) %A为方阵,计算由fun指定的A的矩阵函数,fun可以

是任意基本函数,如sin、cos等等,例如:

funm(A, ’exp’)=expm(A)。

[F,esterr] = funm(A,fun) %esterr为结果所产生的相对误差的估计值。

命令矩阵的方根

函数sqrtm

格式X = sqrtm(A) %矩阵A的平方根A1/2,相当于X*X=A,求X。若A的特征值

有非负实部,则X是唯一的;若A的特征值有负的实部,则X

为复矩阵;若A为奇异矩阵,则X不存在。

[X,resnorm] = sqrtm(A) % resnorm为结果产生的相对误差

[X,alpha,condest] = sqrtm(A) % alpha为稳定因子,condest为结果的条件数的估

计值。

命令矩阵A的多项式

函数polyvalm

格式polyvalm(P, A) %P为多项式系数向量,方阵A为多项式变量,返回多项式值。

1.2.7 矩阵转置

运算符:′

运算规则:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。

若A为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。

若仅希望转置,则用如下命令:A.′。

1.2.8 方阵的行列式

函数det

格式 d = det(X) %返回方阵X 的多项式的值 例1-42

>> A=[1 2 3;4 5 6;7 8 9]

A =

1 2 3 4 5 6 7 8 9 >> D=det(A)

D = 0

1.2.9 逆与伪逆

命令 逆 函数 inv

格式 Y=inv(X) %求方阵X 的逆矩阵。若X 为奇异阵或近似奇异阵,将给出警告信息。

例1-43 求???

?

?

??=343122321A 的逆矩阵

方法一

>>A=[1 2 3; 2 2 1; 3 4 3]; >>Y=inv(A)或Y=A^(-1) 则结果显示为 Y =

1.0000 3.0000 -

2.0000 -1.5000 -

3.0000 2.5000 1.0000 1.0000 -1.0000

方法二:由增广矩阵???

?

? ??=100343010122001321B 进行初等行变换

>>B=[1, 2, 3, 1, 0, 0; 2, 2, 1, 0, 1, 0; 3, 4, 3, 0, 0, 1];

>>C=rref(B) %化行最简形

>>X=C(:, 4:6) %取矩阵C 中的A^(-1)部分 显示结果如下: C =

1.0000 0 0 1.0000 3.0000 -

2.0000 0 1.0000 0 -1.5000 -

3.0000 2.5000 0 0 1.0000 1.0000 1.0000 -1.0000 X =

1.0000 3.0000 -

2.0000 -1.5000 -

3.0000 2.5000 1.0000 1.0000 -1.0000

例1-44

>> A=[2 1 -1;2 1 2;1 -1 1];

>> format rat %用有理格式输出 >> D=inv(A)

D =

1/3 0 1/3 0 1/3 -2/3 -1/3 1/3 0

命令 伪逆 函数 pinv

格式 B = pinv(A) %求矩阵A 的伪逆

B = pinv(A, tol) %tol 为误差:max(size(A))*norm(A)*eps

说明 当矩阵为长方阵时,方程AX=I 和XA=I 至少有一个无解,这时A 的伪逆能在某种程度上代表矩阵的逆,若A 为非奇异矩阵,则pinv(A) = inv(A)。

例1-45

>> A=magic(5); %产生5阶魔方阵。

>> A=A(:,1:4) %取5阶魔方阵的前4列元素构成矩阵A 。

A =

17 24 1 8 23 5 7 14 4 6 13 20 10 12 19 21 11 18 25 2 >> X=pinv(A) %计算A 的伪逆

X =

-0.0041 0.0527 -0.0222 -0.0132 0.0069 0.0437 -0.0363 0.0040 0.0033 0.0038 -0.0305 0.0027 -0.0004 0.0068 0.0355 0.0060 -0.0041 0.0314 0.0211 -0.0315

1.2.10 矩阵的迹

函数 trace

格式 b=trace (A) %返回矩阵A 的迹,即A 的对角线元素之和。

1.2.11 矩阵和向量的范数

命令 向量的范数 函数 norm

格式 n = norm(X) %X 为向量,求欧几里德范数,即∑=

2k 2|x |||X ||。

n = norm(X,inf) %求∞-范数,即))X (abs (max ||X ||=。 n = norm(X,1) %求1-范数,即∑=k

k 1|x |||X ||。

n = norm(X,-inf) %求向量X 的元素的绝对值的最小值,即))X (abs (min ||X ||=。 n = norm(X, p) %求p-范数,即p

k

p k p |x |||X ||∑=,所以norm(X,2) = norm(X)。

命令 矩阵的范数 函数 norm

格式 n = norm(A) %A 为矩阵,求欧几里德范数2||A ||,等于A 的最大奇异值。

n = norm(A,1) %求A 的列范数1||A ||,等于A 的列向量的1-范数的最大值。 n = norm(A,2) %求A 的欧几里德范数2||A ||,和norm(A)相同。

n = norm(A,inf) %求行范数∞||A ||,等于A 的行向量的1-范数的最大值

即:max(sum(abs(A')))。

n = norm(A, 'fro' ) %求矩阵A 的Frobenius 范数∑∑=

i

j

2j i F |a |||A ||,

即sqrt(sum(diag(A'*A))),不能用矩阵p-范数的定义来求。 命令 范数的估计值 函数 normest

格式 nrm = normest(A) %矩阵A 的2-范数(欧几里德范数)的估计值,相对误

差小于106。

nrm = normest(A,tol) %tol 为指定相对误差

[nrm,count] = normest(…) %count 给出计算估计值的迭代次数

1.2.12 条件数

命令 矩阵的条件数 函数 cond

格式 c = cond(X) %求X 的2-范数的条件数,即X 的最大奇异值和最小奇异值的商。

c = cond(X,p) %求p-范数的条件数,p 的值可以是1、2、inf 或者’fro’。 说明 线性方程组AX=b 的条件数是一个大于或者等于1的实数,用来衡量关于数据中的扰动,也就是A/或b 对解X 的灵敏度。一个差条件的方程组的条件数很大。条件数的定义为:|||||||)(1-A A A cond

命令 1-范数的条件数估计 函数 condest

格式 c = condest (A) %方阵A 的1-范数的条件数的下界估值。

[c,v] = condest (A) %v 为向量,满足||

v ||||A ||||Av ||?=

,即norm(A*v,1) =norm(A,1)*norm(v,1)/c 。

[c,v] = condest (A,t) %求上面的c 和v ,同时显示出关于计算的步骤信息。如果

t=1,则计算的每步都显示出来;如果t=-1,则给出商c/rcond(A)。 命令 矩阵可逆的条件数估值 函数 rcond

格式 c = rcond(A) %对于差条件矩阵A 来说,给出一个接近于0的数;对于好条件

矩阵A ,则给出一个接近于1的数。

命令 特征值的条件数 函数 condeig

格式 c = condeig(A) %返回矩阵A 的特征值的条件数

[V,D,c] = condeig(A) %D 为A 的特征值对角阵,V 为A 的特征向量。

1.2.13 矩阵的秩

函数 rank

格式 k = rank (A) %求矩阵A 的秩

相关主题