结果是:
Digit_Matrix=
0.33331.41423.4234
1.25863.36730.0000
Syms_Matrix=
[1/3,sqrt<2),17117/5000]
[5668230535726899*2^<-52),7582476122586655*2^<-51),51747*2^<-103)]
注意:
矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。
1.1.3大矩阵的生成
对于大型矩阵,一般创建M文件,以便于修改:
例1-6用M文件创建大矩阵,文件名为example.m
exm=[456468873257955
2168754488813
6545678898215
4566845896545987
548810963377]
在MATLAB窗口输入:
>>example。
>>size(exm>%显示exm的大小
ans=
56%表示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>=
123
456
789
A4(:
:
2>=
147
258
369
A4(:
:
3>=
0-2-4
20-2
420
或用另一种原始方式可以定义:
例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>=
123
456
789
A5(:
:
2>=
147
258
369
A5(:
:
3>=
0-2-4
20-2
420
1.1.5特殊矩阵的生成
命令全零阵
函数zeros
格式B=zeros(n>%生成n×n全零阵
B=zeros(m,n>%生成m×n全零阵
B=zeros([mn]>%生成m×n全零阵
B=zeros(d1,d2,d3…>%生成d1×d2×d3×…全零阵或数组
B=zeros([d1d2d3…]>%生成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([mn]>%生成m×n全1阵
Y=ones(d1,d2,d3…>%生成d1×d2×d3×…全1阵或数组
Y=ones([d1d2d3…]>%生成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([mn]>%生成m×n随机矩阵
Y=rand(m,n,p,…>%生成m×n×p×…随机矩阵或数组
Y=rand([mnp…]>%生成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产生一个3×4随机矩阵
>>R=rand(3,4>
R=
0.95010.48600.45650.4447
0.23110.89130.01850.6154
0.60680.76210.82140.7919
例1-10产生一个在区间[10,20]内均匀分布的4阶随机矩阵
>>a=10。
b=20。
>>x=a+(b-a>*rand(4>
x=
19.218119.354710.578911.3889
17.382119.169013.528712.0277
11.762714.102718.131711.9872
14.057118.936510.098616.0379
命令正态分布随机矩阵
函数randn
格式Y=randn(n>%生成n×n正态分布随机矩阵
Y=randn(m,n>%生成m×n正态分布随机矩阵
Y=randn([mn]>%生成m×n正态分布随机矩阵
Y=randn(m,n,p,…>%生成m×n×p×…正态分布随机矩阵或数组
Y=randn([mnp…]>%生成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.83110.77990.13351.0565
0.78270.51920.52600.4890
0.61270.48060.63750.7971
0.81410.50640.69960.8527
命令产生随机排列
函数randperm
格式p=randperm(n>%产生1~n之间整数的随机排列
例1-12
>>randperm(6>
ans=
321546
命令产生线性等分向量
函数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=
1000
0200
0030
0004
命令友矩阵
函数compan
格式A=compan(u>%u为多项式系统向量,A为友矩阵,A的第1行元素为-u(2:
n>/u(1>,其中u(2:
n>为u的第2到第n个元素,A为特征值就是多项式的特征根。
例1-14求多项式的友矩阵和根
>>u=[10-76]。
>>A=compan(u>%求多项式的友矩阵
A=
07-6
100
010
>>eig(A>%A的特征值就是多项式的根
ans=
-3.0000
2.0000
1.0000
命令hadamard矩阵
函数hadamard
格式H=hadamard(n>%返回n阶hadamard矩阵
例1-15
>>h=hadamard(4>
h=
1111
1-11-1
11-1-1
1-1-11
命令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=
123
r=
78910
>>h=hankel(c,r>
h=
1238
2389
38910
命令Hilbert矩阵
函数hilb
格式H=hilb(n>%返回n阶Hilbert矩阵,其元素为H(i,j>=1/(i+j-1>。
例1-17产生一个3阶Hilbert矩阵
>>formatrat%以有理形式输出
>>H=hilb(3>
H=
11/21/3
1/21/31/4
1/31/41/5
命令逆Hilbert矩阵
函数invhilb
格式H=invhilb(n>%产生n阶逆Hilbert矩阵
命令Magic(魔方>矩阵
函数magic
格式M=magic(n>%产生n阶魔方矩阵
例1-18
>>M=magic(3>
M=
816
357
492
命令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=
1111
1234
13610
141020
>>A=pascal(3,1>
A=
100
1-10
1-21
>>A=pascal(3,2>
A=
111
-2-10
100
命令托普利兹矩阵
函数toeplitz
格式T=toeplitz(c,r>%生成一个非对称的托普利兹矩阵,将c作为第1列,将r作为第1行,其余元素与左上角相邻元素相等。
T=toeplitz(r>%用向量r生成一个对称的托普利兹矩阵
例1-20
>>c=[12345]。
>>r=[1.52.53.54.55.5]。
>>T=toeplitz(c,r>
T=
15/27/29/211/2
215/27/29/2
3215/27/2
43215/2
54321
命令Wilkinson特征值测试阵
函数wilkinson
格式W=wilkinson(n>%返回n阶Wilkinson特征值测试阵
例1-21
>>W=wilkinson(4>
W=
3/2100
11/210
011/21
0013/2
>>W=wilkinson(7>
W=
3100000
1210000
0111000
0010100
0001110
0000121
0000013
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=
927
4710
5128
A-B=
-70-5
-2-3-4
-3-64
1.2.2乘法
运算符:
*
运算规则:
按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。
1.两个矩阵相乘
例1-23
>>X=[2345。
1221];
>>Y=[011。
110。
001。
100];
Z=X*Y
结果显示为:
Z=
856
333
2.矩阵的数乘:
数乘矩阵
上例中:
a=2*X
则显示:
a=
46810
2442
向量的点乘<内积):
维数相同的两个向量的点乘。
数组乘法:
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=[-102];
>>Y=[-2-11]。
>>Z=dot(X,Y>
则显示:
Z=
4
还可用另一种算法:
sum(X.*Y>
ans=
4
4.向量叉乘
在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。
在Matlab中,用函数cross实现。
函数cross
格式C=cross(A,B>%若A、B为向量,则返回A与B的叉乘,即C=A×B,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3×n矩阵,其中的列是A与B对应列的叉积,A、B都是3×n矩阵。
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=[123]。
>>b=[456]。
>>c=cross(a,b>
结果显示:
c=
-36-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>的混合积
解:
>>a=[123]。
b=[456]。
c=[-36-3]。
>>x=dot(a,cross(b,c>>
结果显示:
x=
54
注意:
先叉乘后点乘,顺序不可颠倒。
6.矩阵的卷积和多项式乘法
函数conv
格式w=conv(u,v>%u、v为向量,其长度可不相同。
说明长度为m的向量序列u和长度为n的向量序列v的卷积(Convolution>定义为:
式中:
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展开多项式
解:
>>w=conv([1,2,2],conv([1,4],[1,1]>>
w=
1716188
>>P=poly2str(w,'s'>%将w表示成多项式
P=
s^4+7s^3+16s^2+18s+8
7.反褶积<解卷)和多项式除法运算
函数deconv
格式[q,r]=deconv(v,u>%多项式v除以多项式u,返回商多项式q和余多项式r。
注意:
v、u、q、r都是按降幂排列的多项式系数向量。
例1-27,则其卷积为
>>u=[1234]
>>v=[102030]
>>c=conv(u,v>
c=
1040100160170120
则反褶积为
>>[q,r]=deconv(c,u>
q=
102030
r=
000000
8.张量积
函数kron
格式C=kron(A,B>%A为m×n矩阵,B为p×q矩阵,则C为mp×nq矩阵。
说明A与B的张量积定义为:
A
B与B
A均为mp×nq矩阵,但一般地A
B
B
A。
例1-28
求A
B。
>>A=[12。
34]。
B=[123。
456。
789]。
>>C=kron(A,B>
C=
123246
45681012
789141618
3694812
121518162024
212427283236
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=[1234。
1246。
6714]
A=
1234
1246
6714
>>B=[1238。
1146。
6714]
B=
1238
1146
6714
>>C=intersect(A,B,'r