主要内容

矩阵在MATLAB环境

本主题介绍如何在MATLAB中创建矩阵和执行基本矩阵计算®

MATLAB环境使用了这个术语矩阵表示在二维网格中包含实数或复数的变量。一个数组更一般地说,是向量、矩阵或高维的数字网格。MATLAB中的所有数组都是矩形的,也就是说,在任何维度上的分量向量都是相同的长度。定义在矩阵上的数学运算是线性代数的主题。

创建矩阵

MATLAB有很多函数可以创建不同类型的矩阵。例如,你可以创建一个基于帕斯卡三角形的对称矩阵:

A = pascal(3)
A = 1 1 1 1 2 3 1 3 6

或者,你可以创建一个不对称的魔方矩阵,它具有相等的行和和:

B =魔术(3)
B = 8 1 6 3 5 7 4 9 2

另一个例子是随机整数的3 × 2矩形矩阵。在这种情况下,第一个输入兰迪描述整数可能值的范围,后两个输入描述行数和列数。

C = randi(10,3,2)
C = 9 10 10 7 2 1

列向量是an- × 1矩阵,行向量是1 × -矩阵n矩阵,标量是1乘1矩阵。若要手动定义矩阵,请使用方括号[]表示数组的开始和结束。在括号内,使用分号行尾:表示一行的末尾对于标量(1乘1矩阵),不需要括号。例如,这些语句生成一个列向量、一个行向量和一个标量:

U = [3;1;4] v = [2 0 -1] s = 7
U = 3 1 4 v = 2 0 -1 s = 7

有关创建和使用矩阵的更多信息,请参见创建、连接和扩展矩阵

矩阵加法和减法

矩阵和数组的加法和减法是逐个元素执行的element-wise.例如,添加一个B然后相减一个从结果恢复B

X = a + b
X = 9 2 7 4 7 10 5 12 8
Y = x - a
Y = 8 1 6 3 5 7 4 9 2

加法和减法要求两个矩阵都有兼容的维数。如果维度不兼容,则会产生以下错误:

X = a + c
使用+矩阵的错误维数必须一致。

有关更多信息,请参见数组运算与矩阵运算

向量积和转置下载188bet金宝搏

相同长度的行向量和列向量可以任意顺序相乘。结果是一个标量,称为内积,或一个矩阵,称为外产品

U = [3;1;4);V = [2 0 -1];X = v*u
X = 2
X = u*v
X = 6 0 -3 2 0 -1 8 0 -4

对于实矩阵,转置操作交换一个j而且一个j.对于复矩阵,另一个需要考虑的问题是是否对数组中的复项进行复共轭来形成复共轭转置.MATLAB使用撇号运算符()执行复共轭转置,而点-撇号运算符(.')转置而不作共轭。对于包含所有实元素的矩阵,这两个运算符返回相同的结果。

示例矩阵A = pascal(3)对称的,所以一个“等于一个.然而,B =魔术(3)不是对称的,那么B”元素是否沿主对角线反射:

B =魔术(3)
B = 8 1 6 3 5 7 4 9 2
X = b '
X = 8 3 4 1 5 9 6 7 2

对于向量,转置将行向量转换为列向量(反之亦然):

X = v' X = 2 0 -1

如果x而且y都是实列向量,那么乘积是多少x * y没有定义,但是两个乘积呢下载188bet金宝搏

x ' * y

而且

y ' * x

产生相同的标量结果。这个量使用得非常频繁,它有三个不同的名字:内心的产品,标量产品,或者产品。甚至还有一个专门的点积函数下载188bet金宝搏

对于一个复向量或矩阵,z,数量z”不仅对向量或矩阵进行转置,而且还将每个复数元素转换为它的复数共轭。也就是说,每个复元虚部的符号变化。例如,考虑复矩阵

Z = [1+2i 7-3i 3+4i;6-2i 9i 4+7i]
Z = 1.0000 + 2.0000i 7.0000 - 3.0000i 3.0000 + 4.0000i 6.0000 - 2.0000i 0.0000 + 9.0000i 4.0000 + 7.0000i

的复共轭转置z是:

z”
Ans = 1.0000 - 2.0000i 6.0000 + 2.0000i 7.0000 + 3.0000i 0.0000 - 9.0000i 3.0000 - 4.0000i 4.0000 - 7.0000i

非共轭复数转置,其中每个元素的复数部分保留其符号,表示为z”。

z”。
Ans = 1.0000 + 2.0000i 6.0000 - 2.0000i 7.0000 - 3.0000i 0.0000 + 9.0000i 3.0000 + 4.0000i 4.0000 + 7.0000i

对于复向量,两个标量积下载188bet金宝搏x ' * y而且y ' * x复数是彼此的共轭,还是标量积x ' * x一个复向量本身是实数。

矩阵乘法

矩阵乘法的定义方式反映了基础线性变换的组合,并允许联立线性方程组的紧凑表示。矩阵乘积CAB的列维数定义为一个等于的行维数B,或者其中一个是标量。如果一个——- - - - - -p而且Bp——- - - - - -n,它们的乘积C——- - - - - -n.这个乘积实际上可以用MATLAB来定义循环,结肠符号和向量点积:下载188bet金宝搏

A = pascal(3);B =魔术(3);M = 3;N = 3;I = 1:mj = 1:n C(i,j) = A(i,:)*B(:,j);结束结束

MATLAB使用星号表示矩阵乘法,如C = a * b.矩阵乘法是不可交换的;也就是说,A * B通常不等于B *

X = a * b
X = 15 15 15 26 38 26 41 70 39
Y = b * a
Y = 15 28 47 15 34 60 15 28 43

一个矩阵可以在右边乘以一个列向量,在左边乘以一个行向量:

U = [3;1;4);x = A*u
X = 8 17 30
V = [2 0 -1];y = v*B
Y = 12 -7

矩形矩阵乘法必须满足维数相容条件。自一个3乘3和C是3乘2,你可以将它们相乘得到3乘2的结果(公共内维抵消):

X = a * c
X = 24 17 47 42 79 77

然而,如果顺序相反,乘法运算就不成立了:

Y = c * a
使用*不正确的矩阵乘法维数时出错。检查第一个矩阵中的列数是否与第二个矩阵中的行数匹配。要执行逐元素的乘法,请使用'.*'。

你可以用标量乘任何东西:

S = 10;W = s*y
W = 120 -70 100

当将一个数组乘以一个标量时,标量隐式扩展为与另一个输入相同的大小。这通常被称为标量扩张

单位矩阵

一般接受的数学符号使用大写字母为了表示单位矩阵,大小不同的矩阵,主对角线上是1,其他地方是0。这些矩阵具有一个一个而且一个一个只要维度是兼容的。

原始版本的MATLAB无法使用因为它没有区分大写字母和小写字母已用作下标和复数单位于是英语中出现了双关语。这个函数

眼睛(m, n)

返回一个——- - - - - -n矩形单位矩阵眼睛(n)返回一个n——- - - - - -n平方单位矩阵。

矩阵的逆

如果一个矩阵一个是方的和非奇异的(行列式非零),那么方程呢一个X而且X一个有相同的解决方案X.这个解叫做一个并且表示为一个-1.的发票函数和表达式^ 1两者都计算矩阵的逆。

A = pascal(3)
A = 1 1 1 1 2 3 1 3 6
X = inv(A)
X = 3.0000 -3.0000 1.0000 -3.0000 5.0000 -2.0000 1.0000 -2.0000 1.0000
* X
Ans = 1.0000 00 0.0000 1.0000 -0.0000 -0.0000 0.0000 1.0000

行列式计算了依据是由矩阵所描述的线性变换的比例因子的度量。当行列式为零时,矩阵为单数而且不存在逆。

d = det(A)
D = 1

有些矩阵是近奇异,尽管存在逆矩阵,但计算很容易出现数值误差。的气孔导度函数计算反演条件号,表明了矩阵反演结果的准确性。条件号的范围为1对于一个数值稳定的矩阵对于一个奇异矩阵。

c = cond(A)
C = 61.9839

很少需要构造一个矩阵的显式逆。经常误用发票在解线性方程组时出现一个xb.从执行时间和数值精度的角度来看,解决这个方程的最佳方法是使用矩阵反斜杠运算符x = A\b.看到mldivide获取更多信息。

克罗内克张量积

克罗内克积,克隆亚麻(X, Y)的元素的所有可能乘积所形成的较大矩阵下载188bet金宝搏X和那些Y.如果X——- - - - - -n而且Yp——- - - - - -,然后克隆亚麻(X, Y)国会议员——- - - - - -nq.元素的排列方式使得每一个元素X乘以整个矩阵Y

[x (1,1)* y x (1,2)* y…]X(1,n)*Y……X(m,1)*Y X(m,2)*Y…X (m, n) * Y]

克罗内克积通常用于0和1的矩阵,以建立小矩阵的重复副本。例如,如果X是2 × 2矩阵吗

X = [1 2 3 4]

而且I = eye(2,2)为2 × 2单位矩阵,则:

克隆亚麻(X,我)
Ans = 1 0 2 0 0 1 0 2 3 0 4 0 0 3 0 4

而且

克隆亚麻(I (X)
Ans = 1 2 0 0 3 4 0 0 0 0 0 1 2 0 0 3 4

除了克隆亚麻,其他一些对复制数组有用的函数是repmatrepelem,blkdiag

向量和矩阵规范

p-向量的模x

x p | x | p 1 p

规范(x, p).的任何值都可以定义此操作p> 1,但最常见的值p分别是1 2∞。默认值为p= 2,对应于欧几里得长度向量的大小

V = [2 0 -1];[范数(v,1)范数(v)范数(v,inf)]
Ans = 3.0000 2.2361 2.000

p-矩阵的范数一个

一个 p 马克斯 x 一个 x p x p

可计算为p= 1,2和∞by规范(A, p).同样,默认值为p= 2:

A = pascal(3);[norm(A,1) norm(A) norm(A,inf)]
Ans = 10.0000 7.8730 10.0000

如果你想计算矩阵的每一行或每一列的范数,你可以使用vecnorm

vecnorm (A)
Ans = 1.7321 3.7417 6.7823

利用线性代数函数进行多线程计算

MATLAB支金宝app持许多线性代数和元素数值函数的多线程计算。这些函数自动在多个线程上执行。为了让函数或表达式在多个cpu上更快地执行,必须满足以下几个条件:

  1. 该函数执行的操作很容易划分为并发执行的段。这些部分必须能够在进程之间很少通信的情况下执行。它们应该需要很少的连续操作。

  2. 数据大小足够大,因此并发执行的任何优点都超过了对数据进行分区和管理单独执行线程所需的时间。例如,大多数函数只有在数组包含数千个或更多元素时才会加速。

  3. 该操作不受内存限制;处理时间不受内存访问时间的支配。一般来说,复杂函数比简单函数更快。

矩阵相乘(X * Y)矩阵幂(X ^ p)运算符在大型双精度数组(大约10,000个元素)上显示了显著的速度提高。矩阵分析函数依据rcond赫斯,expm在大型双精度阵列上也显示了显著的速度提高。

相关的话题