朝花夕拾之Matlab矩阵表示

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中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号(symbol)矩阵定义函数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中是不相同的,它们之间不能直接进行转化。MATLAB提供了一个将数值型转化成符号型的命令,即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]

在MATLAB窗口输入:

>>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  产生一个3×4随机矩阵

>> 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)     %在(朝花夕拾之Matlab矩阵表示)之间产生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  求多项式    朝花夕拾之Matlab矩阵表示   的友矩阵和根

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

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

A =

   0     7    -6

     1     0     0

     0     1     0

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

ans =

  -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    

朝花夕拾之Matlab矩阵表示朝花夕拾之Matlab矩阵表示 菱形继承 发布了211 篇原创文章 · 获赞 137 · 访问量 20万+ 私信 关注
上一篇:pytorch 花式张量(Tensor)操作


下一篇:杂笔