MATLAB中矩阵的特性与基本运算(一)(周一)

一、矩阵操作

1.矩阵的生成

(1).在命令窗口中直接列出:

>> a=1,b=2,c=3;

a =

     1


b =

     2

>> M={a,b,c;a+b,b+c,c+a;a*b,b*c,c*a}

M = 

    [1]    [2]    [3]
    [3]    [5]    [4]
    [2]    [6]    [3]

(2).利用函数直接生成特殊性质的矩阵

图1.常用矩阵函数表
函数名称 函数功能 函数名称 函数功能
zero(m,n) m行n列的零矩阵 eig(A) 求矩阵A的特征值
eye(n) n阶方矩阵 poly(A) 求矩阵A的特征多项式
ones(m,n) m行n列的元素为1的矩阵 trace(A) 求矩阵A的迹
rand(m,n) m行n列的0~1之间随机矩阵 cond(A) 求矩阵A的条件数
randn(m,n) m行n列的正态随机矩阵 rref(A) 求矩阵A的行最简形
magic(n) n阶魔方矩阵 inv(A) 求矩阵A的逆矩阵
hess(A) hess 矩阵 det(A) 求矩阵A的行列式
sqrtm(A) 求矩阵A的平方根 expm(A) 求矩阵A的指数值
funm(A) 按矩阵计算的函数值 logm(A) 求矩阵A的对数值
rank(A) 求矩阵A的秩 morm(A,1) 求矩阵A的范数

 

图二

函 数 名

函 数 功 能

abs( )

绝对值、负数的模、字符串的ASCII码值

都可用来求字符串矩阵所对应的ASCII码数值矩阵

double( )

 

 

char( )

可以把ASCII码数值矩阵转换为字符串矩阵

fix( )

向零方向取整

floor( )

不大于自变量的最大整数

ceil( )

不小于自变量的最小整数

round( )

四舍五入到最邻近的整数

rem(x,y)

求余函数

mod(x,y)

%

exp( )

指数函数

[ ]

空操作符

format  格式符

设置或改变数据输出格式 (其中格式符决定数据的输出格式)

e1:e2:e3

冒号表达式可以产生一个行向量

(其中e1为初始值,e2为步长,e3为终止值)

linspace(a,b,n)

产生一个行向量

(其中a和b是生成向量的第一个和最后一个元素,n是元素总数)

[注:linspace(a,b,n)与a:(b-a)/(n-1):b等价]

A(:,j)

表示取A矩阵的第j列全部元素

A(i,:)

表示A矩阵第i行的全部元素

A(i,j)

表示取A矩阵第i行、第j列的元素

A(i:i+m,:)

表示取A矩阵第i~i+m行的全部元素

A(:,k:k+m)

表示取A矩阵第k~k+m列的全部元素

A(i:i+m,k:k+m)

表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素

zeros

产生全0矩阵(零矩阵)

ones

产生全1矩阵(幺矩阵)

eye

产生单位矩阵

rand

产生0~1间均匀分布的随机矩阵

randn

产生均值为0,方差为1的标准正态分布随机矩阵

zeros(size(A))

建立一个与矩阵A同样大小的零矩阵

reshape(A,m,n)

在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵

magic(n)

生成一个n阶魔方矩阵(其每行、每列及两条对角线上的元素和都相等)

vander(V)

生成以向量V为基础向量的范得蒙矩阵(最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后列与倒数第二列的点乘积)

hilb(n)

生成希尔伯特矩阵

invhilb(n)

求n阶的希尔伯特矩阵的逆矩阵

(用一般方法求逆会因原始数据的微小扰动而产生不可靠的计算结果)

toeplitz(x,y)

生成一个以x为第1列,y为第1行的托普利兹矩阵(除第1行第1列外,其他每个元素都与左上角的元素相同)[注:这里x, y均为向量,两者不必等长。toeplitz(x)用向量x生成一个对称的托普利兹矩阵]

compan(p)

生成伴随矩阵

(其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后)

pascal(n)

生成一个n阶帕斯卡矩阵(由杨辉三角形表组成的矩阵)

A\B

A矩阵左除B矩阵(等效于A的逆左乘B矩阵,即inv(A)*B )

A/B

A矩阵右除B矩阵(等效于B的逆右乘A矩阵,即A*inv(B) )

A^x

矩阵的乘方运算(A为方阵,x为标量)

find()

找位置

diag(A)

用于提取矩阵A主对角线元素,产生一个具有min(m,n)个元素的列向量(其中A为m×n矩阵)

diag(A,k)

提取矩阵A的第k条对角线的元素

triu(A)

求矩阵A的上三角阵

triu(A,k)

求矩阵A的第k条对角线以上的元素

tril(A)

求矩阵A的下三角阵

tril(A,k)

求矩阵A的第k条对角线以下的元素

rot90(A,k)

将矩阵A旋转90o的k倍

fliplr(A)

对矩阵A实施左右翻转

flipud(A)

对矩阵A实施上下翻转

inv(A)

求A矩阵的逆矩阵

pinv(A)

求A矩阵的伪逆(也称为广义逆矩阵)

det(A)

求方阵A所对应的行列式的值

(把一个方阵看作一个行列式,并对其按行列式规则求得的值)

rank(A)

求矩阵A的秩(矩阵线性无关的行数与列数称为矩阵的秩)

trace(A)

求矩阵A的迹

(矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和)

norm(V)或norm(V,2)

计算向量V的2—范数

norm(V,1)

计算向量V的1—范数

norm(V,inf)

计算向量V的∞—范数

cond(A,1)

计算A的1—范数下的条件数

cond(A)或cond(A,2)

计算A的2—范数数下的条件数

cond(A,inf)

计算A的 ∞—范数下的条件数

E=eig(A)

求A的全部特征值,构成向量E

[V,D]=eig(A)

求A的全部特征值,构成对角阵D;并求A的特征向量构成V的列向量。

[V,D]=eig(A,‘nobalance’)

直接求矩阵A的特征值和特征向量。

sqrtm(A)

计算矩阵A的平方根

logm(A)

计算矩阵A的自然对数

expm(A)、expm1(A)

求矩阵指数eA

expm2(A)、expm3(A)

求矩阵指数eA

funm(A,‘fun’)

计算直接作用于矩阵A的由‘fun’指定的超越函数值

funm(A,‘sqrt’)

计算矩阵A的平方根,等价于sqrtm(A)

eval(t)

把字符串的内容作为对应的MATLAB语句来执行(其中t为字符串)

rmfield(A,‘ i’)

要删除结构A的成员i

celldisp(a)

用来显示整个单元矩阵a

A=sparse(S)

将矩阵S转化为稀疏存储方式的矩阵A

sparse(m,n)

生成一个m×n的所有元素都是0的稀疏矩阵

sparse(u,v,S)--

建立一个max(u)行、max(v)列并以S为稀疏元素的稀疏矩阵

(其中u,v,S是3个等长的向量。S是要建立的稀疏矩阵的非0元素,u(i)、v(i)分别是S(i)的行和列下标)

B=spconvert(A)

根据表示稀疏矩阵的矩阵A,产生一个稀疏存储方式矩阵B

A=spdiags(B,d,m,n)

产生带状稀疏矩阵的稀疏存储(参数m,n为原带状矩阵的行数与列数)

speye(m,n)

返回一个m×n的稀疏存储单位矩阵

主要函数有如下:

1)空矩阵

2)零矩阵与全一矩阵

3)单位矩阵

4)对角矩阵:

>> v=[1 2 3 4 5];
>> Da=diag(v,0)

Da =

     1     0     0     0     0
     0     2     0     0     0
     0     0     3     0     0
     0     0     0     4     0
     0     0     0     0     5

>> Db=diag(v)

Db =

     1     0     0     0     0
     0     2     0     0     0
     0     0     3     0     0
     0     0     0     4     0
     0     0     0     0     5

>> Dc=diag(v,-1)

Dc =

     0     0     0     0     0     0
     1     0     0     0     0     0
     0     2     0     0     0     0
     0     0     3     0     0     0
     0     0     0     4     0     0
     0     0     0     0     5     0

>> Dd=diag(v,1)

Dd =

     0     1     0     0     0     0
     0     0     2     0     0     0
     0     0     0     3     0     0
     0     0     0     0     4     0
     0     0     0     0     0     5
     0     0     0     0     0     0

5)三角矩阵:

T=tril(M)                   %表示抽取矩阵M中主对角线的下三角部分构成矩阵

T=tril(M,k)                %表示抽取矩阵M中第k条对角线的下三角部分

T=triu(M)                  %表示抽取矩阵M中主对角线的上三角部分构成矩阵。

T=triu(M,k)               %表示抽取矩阵M中第k条对角线的上三角部分。

6)魔方矩阵:

通常定义一个n阶魔方矩阵由自然数1~n*n排列而成且满足每行每列及两条主对角线上元素的n个数的和都为n(n*n+1)/2.

>> M1=magic(1),M2=magic(2),M3=magic(3)

M1 =

     1


M2 =

     1     3
     4     2


M3 =

     8     1     6
     3     5     7
     4     9     2

7)帕斯卡矩阵:

杨辉三角形表所组成的方阵。是由在二次项(x+y)的n次方的展开式中依升幂取得的系数组成的数表

>> P=pascal(6)

P =

     1     1     1     1     1     1
     1     2     3     4     5     6
     1     3     6    10    15    21
     1     4    10    20    35    56
     1     5    15    35    70   126
     1     6    21    56   126   252

8)随机矩阵:

rand(n)                            %生成一个n阶随机矩阵

rand(m,n)                        %生成一个m*n随机矩阵

rand(size(M))                 %生成一个与矩阵M维度相同的随机矩阵

randn(n)                          %生成一个n*n正态分布随机矩阵

randn(m,n)                      %生成一个m*n正态分布随机矩阵

randn(size(M))               %生成一个与矩阵M维度相同的正态分布随机矩阵

9)稀疏矩阵:

S=sparse(F)                  %将完全矩阵转化为稀疏矩阵的排布

S=sparse(m,n)               %生成m*n阶全零稀疏矩阵

S=sparse(i,j,s)                %生成由i,j,s矢量定义的稀疏矩阵

S=sparse(i,j,s,m,n)         %生成(i,j)对应元素为s的m*n阶稀疏矩阵

S=sparse(i,j,s,m,n,num)%同上的基础上必须含有num(大于i和j的长度)个非零元素

F=full(s)                            %将稀疏矩阵转化为完全矩阵

>> M=[0 0 0 0 2;0 0 0 1 0;0 0 0 4 0;3 0 0 0 0]      %创建一个完全形式矩阵

M =

     0     0     0     0     2
     0     0     0     1     0
     0     0     0     4     0
     3     0     0     0     0

>> S=sparse(M)                                 %将完全形式转化为稀疏矩阵的排布

S =

   (4,1)        3
   (2,4)        1
   (3,4)        4
   (1,5)        2

>> i=[1 2 3],j=[4 5 6],s=[7 8 9]              %创建3个同维行矢量

i =

     1     2     3


j =

     4     5     6


s =

     7     8     9

>> s1=sparse(2,3)              %生成2*3全零稀疏矩阵

s1 =

   All zero sparse: 2-by-3

>> F=full(s1)

F =

     0     0     0
     0     0     0

>> s2=sparse(i,j,s)        %表示稀疏矩阵中非零元素的位置为(in,jn),值为sn,i,j为上面定义过的

s2 =

   (1,4)        7
   (2,5)        8
   (3,6)        9

>> F=full(s2)          %根据稀疏矩阵的排布还原其完全形式,查看s2的维度

F =

     0     0     0     7     0     0
     0     0     0     0     8     0
     0     0     0     0     0     9

>> s3=sparse(i,j,s,5,6)       %5和6表示s3的设定维度,需满足5>=MAX(in),6>=MAX(jn)

s3 =

   (1,4)        7
   (2,5)        8
   (3,6)        9

>> F=full(s3)             %根据稀疏矩阵的排布还原其完全形式,查看s3的维度

F =

     0     0     0     7     0     0
     0     0     0     0     8     0
     0     0     0     0     0     9
     0     0     0     0     0     0
     0     0     0     0     0     0

>> s4=sparse(i,j,s,5,6,3)           %同s3的基础上必须含有3个非零元素

s4 =

   (1,4)        7
   (2,5)        8
   (3,6)        9

10)伴随矩阵:

A=company(M)           %生成M的伴随矩阵

>> v=[1 6 11 6];               %矢量v为(s+1)(s+2)(s+3)=s^3+6s^2+11s+6多项式的系数矩阵
>> A=compan(v)                %生成相应的伴随矩阵

A =

    -6   -11    -6
     1     0     0
     0     1     0

>> eig(A)         %该伴随矩阵的特征值即为多项式值为0所得的根

ans =

   -3.0000
   -2.0000
   -1.0000

(3).通过MATLAB中的M文件产生

建立脚本存储数据,在命令行窗口输入文件名

(4)通过调用外部文件产生

>> load E:\aaa.txt
>> aaa

aaa =

      317982          27
      368929          97
      528543          84
      382636          20

2.矩阵的基本操作

(1).元素操作

1)元素扩充

M=[A0;A1 A2]                          %矩阵A0经加入A1,A2(行)的扩充后存入矩阵M

2)元素删除

M(:,n)=[]                            %表示删除矩阵M的第n列元素

M(m,:)=[]                         %表示删除矩阵M的第m行元素

3)元素修改

M(m,n)=a                       %表示将第m行第n列元素改为a

M(m,:)=[a b ...]               %表示将M矩阵中第m行元素替换为[a b ...]

M(:,m)=[a b ...]              %表示将M矩阵中第n列元素替换为[a b ...]的转置,即为[a b ...]'。

(2).数据变换

1)元素取整

floor(M)                       %所有元素向下取整

ceil(M)                         %所有元素向上取整

round(M)                     %所有元素四舍五入取整

fix(M)                           %所有元素按相对零就近取整的原则取整

2)有理数形式变换

[n,d]=rat(M)                       %将矩阵M表示为两个整数矩阵的点除,即M=n./d

3)元素取余数

R=rem(M,x)                  %表示各元素对模x取余

>> M=[1 2 3;2 3 4;3 4 5],R1=rem(M,0),R2=rem(M,2),R3=rem(M,5)

M =

     1     2     3
     2     3     4
     3     4     5


R1 =

   NaN   NaN   NaN
   NaN   NaN   NaN
   NaN   NaN   NaN


R2 =

     1     0     1
     0     1     0
     1     0     1


R3 =

     1     2     3
     2     3     4
     3     4     0

(3).结构变换

1)翻转:

fliplr(M)                            %左右翻转

flipud(M)                           %上下翻转

flipdim(M,dim)                  %按指定的维数翻转,特别地,dim=1时为上下翻转,dim=2时为左右翻转

rot                                       %逆时针旋转90度,

rot(M,k)                               %逆时针旋转k*90度,其中k=+-1,+-2,...

rot的实验:

R2 =

     1     0     1
     0     1     0
     1     0     1

>> rot R2
未定义与 'char' 类型的输入参数相对应的函数 'rot'。
 
>> rot(R2)
未定义与 'double' 类型的输入参数相对应的函数 'rot'。
 
>> rot(R2,1)
未定义与 'double' 类型的输入参数相对应的函数 'rot'。
 
>> y=rot(R2)
未定义与 'double' 类型的输入参数相对应的函数 'rot'。
 
>> Y=rot90(R2)


Y =

     1     0     1
     0     1     0
     1     0     1

>> rot90(R2)

ans =

     1     0     1
     0     1     0
     1     0     1

2)平铺

%矩阵由m*n块矩阵M平铺而成

repmat(M,m,n)

repmat(M,[m,n])

%矩阵由m*n*p*...块矩阵M平铺而成

repmat(M,m,n,p...)

repmat(M,[m,n,p...])

3)变维

%表示将B的元素依次填入A的对应位置中,A与B的元素个数必须相同

A(:)=B(:)

%reshape函数法,使矩阵M的元素维数=m*n

reshape(M,m,n)

reshape(M,[m,n])

%使矩阵M的元素维数=m*n*p...

reshape(M,m,n,p,...)

reshape(M,[m,n,p,...])

>> A=magic(3),B=pascal(3),C=[1 2 3 4 5 6 7 8 9]   %创建待变换矩阵

A =

     8     1     6
     3     5     7
     4     9     2


B =

     1     1     1
     1     2     3
     1     3     6


C =

     1     2     3     4     5     6     7     8     9

>> fliplr(A),D=flipud(A)        %左右翻转,上下翻转

ans =

     6     1     8
     7     5     3
     2     9     4


D =

     4     9     2
     3     5     7
     8     1     6

>> repmat(B,2,3)            %将B以2*3的格式平铺

ans =

     1     1     1     1     1     1     1     1     1
     1     2     3     1     2     3     1     2     3
     1     3     6     1     3     6     1     3     6
     1     1     1     1     1     1     1     1     1
     1     2     3     1     2     3     1     2     3
     1     3     6     1     3     6     1     3     6

>> E=repmat(B,2,1)            %构成矩阵E,由B按2*1格式平铺

E =

     1     1     1
     1     2     3
     1     3     6
     1     1     1
     1     2     3
     1     3     6

>> B(:)=C(:)         %将C中数据按B格式排布,注意排布的行列顺序

B =

     1     4     7
     2     5     8
     3     6     9      %{}中没有“;”的话一列一列的排,有的话分行排

>> reshape(A,1,9)        %将A按1*9排列

ans =

     8     3     4     1     5     9     6     7     2

(4).矩阵的引用

矩阵引用的一般数据:

用matrixname函数但是在进行实验时并不能使用:

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

A =

     1     2     3     4     5     6     7     8     9

>> reshape(A,3,3)

ans =

     1     4     7
     2     5     8
     3     6     9

>> Matrixname(4)
未定义与 'double' 类型的输入参数相对应的函数 'Matrixname'。
 
>> matrixname(i,:)
未定义变量 matrixname。
 
>> y=matrixname(4)
未定义与 'double' 类型的输入参数相对应的函数 'matrixname'。

你可能感兴趣的:(数学建模)