专栏首页glm的全栈学习之路朝花夕拾之Matlab矩阵表示

朝花夕拾之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) %在(

)之间产生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 =

-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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 朝花夕拾之Matlab矩阵运算

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

    glm233
  • C语言程序实践第一周报告(.doc版)

    对于普通类型的求a^n,我们的求法是a*a*a*a....,这样乘以n次,时间复杂度为O(n),对于普通n比较小的我们可以接受,然而当n比较大的时候,计算就慢了...

    glm233
  • 计算机导论部分知识整理

    ◆◆将计算机发展划分为五个阶段的标志 : 元件制作工艺水平的不断提高是计算机发展的物质基础,因此以计算机元器件的变革作为标志,将计算机的发展划分为五个阶段,这...

    glm233
  • 经典算法之稀疏矩阵

    在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵...

    用户3467126
  • SVD奇异值分解的数学涵义及其应用实例

    SVD(Singular Value Decomposition, 奇异值分解)是线性代数中既优雅又强大的工具, 它揭示了矩阵最本质的变换. 使用SVD对矩阵进...

    SIGAI学习与实践平台
  • Python实现图片滑动式验证识别

    本文分享自 Linux 视野。滑动式验证码现在使用越来越广泛了,关于怎么攻克的文章之前看到的不多,这篇提供了一个思路。 作者:fantlam 来源:htt...

    小小科
  • Matlab系列之数组(矩阵)的生成

    从本篇开始,会有一段时间都将用于记录数组、矩阵的操作等等,如果以前没有接触过相关的,可能会觉得要展示的是很复杂的东西,但并不是,这是一个很简单的部分,但也是一个...

    狂人V
  • 数值分析读书笔记(2)求解线性代数方程组的直接方法

    我们引入一个一般意义上的初等变换矩阵,它把许多常用的线性变换统一在一个框架里面,在数值线性代数中起着重要的意义

    Mezereon
  • python中矩阵相加函数sum()

    py3study
  • 「Workshop」第十七期 奇异值分解

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以...

    王诗翔呀

扫码关注云+社区

领取腾讯云代金券