矩阵

zeros函数

产生全0矩阵,即零矩阵。

调用格式:

  • zeros(m):产生m×m的零矩阵。
  • zeros(m, n):产生m×n的零矩阵。
  • zeros(size(A)):产生与矩阵A同样大小的零矩阵。

下面函数的调用方式均与之相同。

ones函数

产生全1矩阵,即幺矩阵。

eye函数

产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。

rand函数

产生(0, 1)区间均匀分布的随机矩阵。

randn函数

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

randi函数

randi()函数生成均匀分布的伪随机整数,范围为imin–imax,如果没指定imin,则默认为1。

r = randi(imax,n):生成n×n的矩阵,n省略则产生1×1的矩阵

r = randi(imax,m,n):生成m×n的矩阵

r = randi(imax,[m,n]):同上,用法:r = randi(imax,size(A));

r = randi(imax,m,n,p,…):生成m×n×p×…的矩阵

r = randi(imax,[m,n,p,…]):同上

r = randi([imin,imax],…):规定了imin,其余参数与上面相同

应用1

首先产生5阶两位随机整数矩阵A,再产生均值为0.6、方差为0.1的5阶正态分布随机矩阵B,最后验证(A+B)I=IA+BII为单位矩阵)。

  • fix(a+(b-a+1)*x):产生[a, b]区间上均匀分布的随机整数。
  • μ\muμ+σ\sigmaσx:得到均值为μ\muμ、方差为σ2\sigma^2σ2的随机数。
A = fix(10+(99-10+1)*rand(5));
B = 0.6+sqrt(0.1)*randn(5);
C = eye(5);
(A+B)*C == C*A + B*C

结果如下:

ans =5×5 logical 数组1   1   1   1   11   1   1   1   11   1   1   1   11   1   1   1   11   1   1   1   1

magic函数

n阶魔方阵由1,2,3,…,n2共n2个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等。
n阶魔方阵每行每列元素的和为(1+2+3+…+n2)/n=(n+n3)/2。MATLAB函数magic(n)产生一个特定的魔方阵。

M = magic(8);
sum(M(1, :)) % 260
sum(M(:, 1)) % 260

补充一下sum的用法

sum函数

调用形式:

  • sum(A):对每一列求和,返回一个由每列的和构成的行向量。
  • sum(A, 1):与sum(A)等价。
  • sum(A, 2):对每一行求和,返回一个由每行的和构成的列向量。
  • sum(subA):subA为A的索引子矩阵,求子矩阵中全部元素之和。

用法举例:

A = [1 2 3; 4 5 6;7 8 9];
sum(A) % 12    15    18
sum(A, 1) % 12    15    18
sum(A, 2)
%     6
%    15
%    24
sum(A(1:2, 2:3)) % 7     9
sum(A(:)) % 45

伴随矩阵

MATLAB生成伴随矩阵的函数是compan§,其中p是一个多项式的系数向量,高次幂系数排在前,低次幂系数排在后。

例如,生成多项式x3−2x2−5x+6x^3-2x^2-5x+6x3−2x2−5x+6的伴随矩阵。

p = [1 -2 -5 6];
A = compan(p)

结果如下:

A =2     5    -61     0     00     1     0

稀疏矩阵

  • 完全存储方式

  • 稀疏存储方式

    稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。

    注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。

完全存储方式与稀疏存储方式之间的转化

A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
S=full(A):将矩阵A转化为完全存储方式的矩阵S。

A = sparse(eye(3)) % 等价于 speye(3)
full(A)

结果如下:

A =(1,1)        1(2,2)        1(3,3)        1ans =1     0     00     1     00     0     1

sparse函数的其他调用格式

sparse(m, n):生成一个m×nm×nm×n的所有元素都是零的稀疏矩阵。

A = sparse(4, 5);
A(8) = 3;
A(1, 2) = 4;
full(A(1:3, :))

结果如下:

ans =0     4     0     0     00     0     0     0     00     0     0     0     0

先通过上述调用格式生成全零稀疏矩阵,再可以通过完全存储方式的赋值和访问方式进行赋值和访问操作。


spase(row, col, val):row、col和val为等长的向量,分别表示行号,列号和对应的值。

A = sparse([1 2 2], [2 1 4], [4 5 -7])
full(A)

结果如下:

A =(2,1)        5(1,2)        4(2,4)       -7ans =0     4     0     05     0     0    -7

spconvert函数

调用格式为:spconvert(A),A为若干行三列或若干行四列的一个矩阵,第一列表示每个数所在的行号,第二列表示每个数所在的列号,第三列表示每个数的实部,第四列表示每个数的虚部,若矩阵的全部元素都是实数,则无需第四列;可见,A矩阵每一行都表示一个非零元素,其行数就是稀疏矩阵中非零的元素个数。

A = [2 2 1; 2 1 -1; 2 4 3]
spconvert(A)

结果如下:

A =2     2     12     1    -12     4     3ans =(2,1)       -1(2,2)        1(2,4)        3

带状稀疏矩阵

[B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。

A=[11 0 0 12 0 0; 0 21 0 0 22 0; 0 0 31 0 0 32; 41 0 0 42 0 0; 0 51 0 0 52 0]
[B,d]=spdiags(A)

结果如下:

A =11     0     0    12     0     00    21     0     0    22     00     0    31     0     0    3241     0     0    42     0     00    51     0     0    52     0B =0    11    120    21    220    31    3241    42     051    52     0d =-303
spdiags(B, d, 5, 6)

结果如下:

ans =(1,1)       11(4,1)       41(2,2)       21(5,2)       51(3,3)       31(1,4)       12(4,4)       42(2,5)       22(5,5)       52(3,6)       32

我们还可以通过先产生完全存储的矩阵再转换为稀疏矩阵的方式产生带状稀疏矩阵:

B = diag([11 21 31 42 52 0]) + diag([12 22 32], 3) + diag([41 51 0], -3);
B = B(1:end-1, :)
sparse(B)

结果如下:

B =11     0     0    12     0     00    21     0     0    22     00     0    31     0     0    3241     0     0    42     0     00    51     0     0    52     0ans =(1,1)       11(4,1)       41(2,2)       21(5,2)       51(3,3)       31(1,4)       12(4,4)       42(2,5)       22(5,5)       52(3,6)       32

先用diag函数构建方阵,让方阵相加得到完全存储下的矩阵,调用sparse将其稀疏化。

注意:

spdiags(B,d,m,n)格式中的m、n的大小关系决定了如何利用矩阵B进行填充:

结论:

  • 当m≤n时,主对角线下方的对角线(也就是对角线-1:-n+1)进行数据填充时,从B矩阵某一列从上至下去取值;而主对角线之上的对角线(1:n-1)进行元素填充时,从B的某一列从下至上去取值。
  • 当m>n时,主对角线下方的对角线进行数据填充时,从B矩阵某一列从下至上去取值;而主对角线之上的对角线进行元素填充时,从B的某一列从上至下去取值。

可见下面的例子:

A = reshape(1:15, 5, 3);
B = spdiags(A,[-2 0 2], 5, 5);
C = spdiags(A,[-2 0 2], 5, 6);
D = spdiags(A,[-2 0 2], 5, 4);
A
BB = full(B)
CC = full(C)
DD = full(D)
A =1     6    112     7    123     8    134     9    145    10    15BB =6     0    13     0     00     7     0    14     01     0     8     0    150     2     0     9     00     0     3     0    10CC =6     0    11     0     0     00     7     0    12     0     03     0     8     0    13     00     4     0     9     0    140     0     5     0    10     0DD =6     0    13     00     7     0    141     0     8     00     2     0     90     0     3     0

speye函数

speye(n):返回n阶单位方阵。

speye(m, n):返回m×nm×nm×n的单位方阵。

应用

通过稀疏存储的方式对稀疏矩阵进行存储和运算可以提高运算的效率,这是我们使用稀疏矩阵最重要的原因。

k1 = [1; 1; 2; 1; 0];
k2 = [2; 4; 6; 6; 1];
k3 = [0; 3; 1; 4; 2];
B = [k1 k2 k3];
d = [-1 0 1];
A = spdiags(B, d, 5, 5);
full(A)
b = [0; 3; 2; 1; 5];
x = A\b

结果如下:

ans =2     3     0     0     01     4     1     0     00     1     6     4     00     0     2     6     20     0     0     1     1x =-0.16670.11112.7222-3.61118.6111

【Matlab】矩阵相关推荐

  1. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

  2. c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解

    MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现.在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组.特殊情况有两个,一是单一元素的标量,二是只有一行或者一列的矩 ...

  3. matlab 矩阵加减乘除运算

    文章目录 matlab 矩阵加减乘除运算 1 .加.减运算 2. 乘法 3.向量点积 4.向量叉乘 5.混合积 6.矩阵的卷积和多项式乘法 7.反褶积(解卷)和多项式除法运算 8.张量积 9. 除法运 ...

  4. matlab矩阵初等变换矩阵,实验一 MATLAB基本操作及矩阵初等运算

    实验一 MATLAB 基本操作及矩阵初等运算 实验目的: 1.熟悉matlab 的界面: 2.熟练掌握matlab 的变量.矩阵定义和基本赋值符号: 3.熟练掌握matlab 矩阵的引用及矩阵初等运算 ...

  5. matlab矩阵内存预分配

    matlab矩阵内存预分配就意味着,划定一个固定的内存块,各数据可直接按"行.列指数"存放到对应的元素中.若矩阵中不预配置内存.则随着"行.列指数"的变大.MA ...

  6. c++以空格分开的输入数组_技术贴,MATLAB矩阵与数组汇总讲解!

    MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现.在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组.特殊情况有两个,一是单一元素的标量,二是只有一行或者一列的矩 ...

  7. c++实现Matlab矩阵Matrix类(实矩阵Matrix、复矩阵CMatrix)

    全栈工程师开发手册 (作者:栾鹏) matlab2c动态链接库下载 matlab库函数大全 matlab2c基础教程 matlab2c开发全解教程 开发注意事项: 1.目前matlab2c对矩阵的实现 ...

  8. 中南大学 09 MATLAB 矩阵的处理

    中南大学 09 MATLAB 矩阵的处理 通用的特殊矩阵 zeros函数 ones函数 产生2位数的5阶随机矩阵(取值在10-99之间的整数) 产生一个均值为0.6 方差为0.1的矩阵 魔方矩阵(Ma ...

  9. matlab矩阵 代表什么,matlab中矩阵AB是什么意思

    Q1:matlab矩阵中的'代表什么意思 A(1)是指矩阵中的第一个元素. matlab中矩阵的排列是按照从上往下,从左往右的: 比如说,一列数,给转化为矩阵,排列如下: >> a=1:1 ...

  10. matlab 矩阵与数比较,MATLAB 对矩阵中的数据进行大小比较

    用matlab对矩阵进行高斯消元 %求解例题2.1%高斯法求解线性方程组Ax=b%A为输入矩阵系数,b为方程组右端系数%方程组的解保存在x变量中%先输入方程系数A=[1 2 3;2 7 5;1& ...

最新文章

  1. JavaScript语言基础3
  2. JZOJ__Day 5:【普及模拟】num
  3. HDFS HA模式下支持只连接其中Active的NameNode
  4. 牛客网NC112--进制转换
  5. springmvc 中文文档
  6. volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))
  7. PspNet在MMsegmentation框架下成功训练Pascal VOC2012数据集及踩坑实录
  8. CSDN博客添加微信公众号图片
  9. 接收不到其他机器发来的报文_TCP/IP报文格式,康康就知道了
  10. java使用BZip算法压缩解压缩文件、数据流、byte[]字节数组
  11. [Transformer]A Survey of Transformers-邱锡鹏
  12. PS CC2018替换/修改图片上的文字内容
  13. Python几个编程小作业
  14. 一个有意思的在线绘图(像Flash) - zas 的flash blog |闪客,RIA - 歪酷博客 Ycool Blog
  15. 当用post方法上传,base64编码的图片太大,导致后台接收的时候总是为null?
  16. 高中数学必修二空间向量及其运算(经典案例)
  17. 学习笔记整理:Photoshop软件应用-图层混合与样式
  18. 实现开关操作的C语言程序
  19. idea java 语法高亮_Intellij IDEA 中JAVA常用配置项总结
  20. Java数字加密(加密解密)

热门文章

  1. Deepin安装到移动硬盘
  2. linux通过ip查询域名,无法通过ip地址查找对应的域名
  3. 本科论文查重经验分享
  4. TF-IDF算法总结
  5. 超级无敌屌炸天位运算快读
  6. 车联网大规模商用关键突破口深度调研车路协同智慧高速全国建设情况
  7. 一文告诉您游戏开发需要学什么
  8. Aurora 64B66B IP核的硬件跑通
  9. 【计算机网络】—什么是蜂窝移动网络?
  10. file api java_File的API和常用方法详解_动力节点Java学院整理