本主题包含在MATLAB中创建矩阵和执行基本矩阵计算的介绍®.
MATLAB环境使用了这个术语矩阵表示在二维网格中包含实数或复数的变量。一个数组更一般地说,是一个向量、矩阵或更高维度的数字网格。MATLAB中的所有阵列都是矩形的,也就是说,沿任何维度的分量向量都是相同长度的。定义在矩阵上的数学运算是线性代数的主题。
MATLAB有许多创建不同类型矩阵的函数。例如,你可以创建一个基于Pascal三角形的对称矩阵:
一个=帕斯卡(3)
A = 1 1 1 1 2 3 1 3 6
或者,你可以创建一个不对称幻方矩阵,其行和列的和相等:
B =魔法(3)
B = 8 1 6 3 5 7 4 9
另一个例子是由随机整数组成的3 × 2矩形矩阵。在本例中,第一个输入兰迪
描述整数的可能值的范围,第二个输入描述行数和列数。
C =兰迪(10、3、2)
C = 9 10 10 7 2
列向量是米矩阵的行向量是一个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
加法和减法要求两个矩阵具有相容的维数。如果尺寸不兼容,则会出现以下错误:
X = a + c
误差使用+矩阵维度必须一致。
有关更多信息,请参见数组与矩阵操作.
相同长度的行向量和列向量可以按任意顺序相乘。结果是一个标量,称为内积,或矩阵,称为外产品:
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使用撇号运算符('
)进行复共轭转置,点-撇号算子(.'
)转置而不共轭。对于包含所有实元素的矩阵,这两个操作符返回相同的结果。
矩阵的例子一个=帕斯卡(3)
是对称的,所以一个“
等于一个
.然而,B =魔法(3)
不是对称的,所以呢B”
有沿着主对角线反射的元素:
B =魔法(3)
B = 8 1 6 3 5 7 4 9
X = B”
X = 8 3 4 1 5 9 6 7 2
对于向量,转置将行向量转换为列向量(反之亦然):
X = v' X = 0 -1
如果x
和y
两个都是实列向量,那么乘积呢x * y
不是定义,而是两个乘积s manbetx 845
x ' * y
和
y ' * x
产生相同的标量结果。这个量使用非常频繁,它有三个不同的名字:内心的产品,标量产品,或者点产品。甚至有一个专门用于点积的函数s manbetx 845点
.
对于一个复向量或矩阵,z
,数量z”
不仅转置向量或矩阵,而且还将每个复元素转换为它的复共轭。也就是说,每个复元素的虚部的符号是变化的。例如,考虑复矩阵
Z = [1+2i 7-3i 3+4i;6-2i 9我4 + 7)
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
对于复向量,两个标量积s manbetx 845x ' * y
和y ' * x
复共轭和标量积是什么x ' * x
是实数。
矩阵乘法的定义方式反映了潜在的线性变换的组成,并允许联立线性方程组的紧凑表示。矩阵产品C=AB的列维数时定义一个等于B,或者其中一个是标量。如果一个是米——- - - - - -p和B是p——- - - - - -n,他们的产品C是米——- - - - - -n.产品实际上可以用MATLAB定义为
循环,结肠
符号和向量点积:s manbetx 845
一个=帕斯卡(3);B =魔法(3);m = 3;n = 3;为i = 1: m为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 *
Y = 15 28 47 15 34 60 15 28 43
矩阵可以在右边乘以列向量,在左边乘以行向量:
u = [3;1;4);x = A *
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 *
使用*不正确的维度进行矩阵乘法时出错。检查第一个矩阵的列数与第二个矩阵的行数是否匹配。要执行元素乘法,请使用'.*'。
你可以把任何东西乘以一个标量:
s = 10;w = s * y
W = 120 -70 100
当数组乘以标量时,标量隐式扩展为与其他输入相同的大小。这通常被称为标量扩张.
一般接受的数学符号使用大写字母我为了表示单位矩阵,在主对角上为1,其他地方为0的各种大小的矩阵。这些矩阵具有这样的性质一个我=一个和我一个=一个只要尺寸是兼容的。
原始版本的MATLAB无法使用我因为它不区分大写字母和小写字母我已经作为下标和复杂的单位。于是就出现了一个英语双关语。这个函数
眼睛(m, n)
返回一个米——- - - - - -n矩形单位矩阵眼睛(n)
返回一个n——- - - - - -n方单位矩阵。
如果一个矩阵一个
是平方和非奇异(非零行列式),那么方程呢一个X=我和X一个=我有相同的解X.这个解叫做逆的一个
并表示一个-1.的发票
函数和表达式^ 1
两者都计算矩阵的逆。
一个=帕斯卡(3)
A = 1 1 1 1 2 3 1 3 6
X =发票(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 =侦破(A)
d = 1
一些矩阵近奇异,尽管存在逆矩阵,但计算很容易出现数值误差。的气孔导度
函数计算反演条件数,这说明了矩阵反演结果的准确性。条件号的范围是1
对于数值稳定的矩阵正
对于一个奇异矩阵。
c =电导率(A)
c = 61.9839
很少需要形成一个矩阵的显式逆矩阵。经常误用发票
在解线性方程组时出现一个x=b.从执行时间和数值精度的角度来看,解决这个方程的最佳方法是使用矩阵反斜杠运算符x = A \ b
.看到mldivide
为更多的信息。
克罗内克积,克隆亚麻(X, Y)
,两个矩阵的所有元素的乘积所形成的较大的矩阵s manbetx 845X
与Y
.如果X
是米——- - - - - -n和Y
是p——- - - - - -问,然后克隆亚麻(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]
和我眼睛= (2,2)
为2 × 2单位矩阵,则:
克隆亚麻(X,我)
Ans = 1 0 2 0 0 1 0 2 3 0 4 0 3 0 4
和
克隆亚麻(I (X)
Ans = 1 2 0 0 3 4 0 0 0 1 2 0 0 3 4
的p向量的范数x,
是计算规范(x, p)
.为的任何值都定义此操作p> 1,但最常见的值p是1 2和∞。默认值为p= 2,对应于欧几里得长度或向量的大小:
V = [2 0 -1];(规范(v, 1)规范(v)规范(v,正)]
Ans = 3.0000 2.2361 2.000
的p矩阵的范数一个,
可以计算为p= 1, 2,和∞by规范(A, p)
.同样,默认值是p= 2:
一个=帕斯卡(3);(规范(1)规范(A)规范(A,正)]
Ans = 10.0000 7.8730 10.0000
如果你想计算矩阵的每一行或每一列的范数,你可以使用vecnorm
:
vecnorm (A)
Ans = 1.7321 3.7417 6.7823
MATLAB支万博1manbetx持许多线性代数和元素数值函数的多线程计算。这些函数会在多个线程上自动执行。为了让一个函数或表达式在多个cpu上执行得更快,必须满足以下条件:
该函数执行的操作很容易划分为并发执行的部分。这些部分必须能够在进程之间很少通信的情况下执行。它们应该很少需要顺序操作。
数据的大小足够大,因此并发执行的任何优势都超过了划分数据和管理单独执行线程所需的时间。例如,大多数函数只有在数组包含数千个或更多元素时才会加速。
该操作不受内存限制;处理时间不受内存访问时间的支配。一般来说,复杂函数比简单函数的速度更快。
矩阵相乘(X * Y)
和矩阵幂(X ^ p)
运算符在大型双精度数组(大约10,000个元素)上的速度有显著提高。矩阵分析函数依据
,rcond
,赫斯
,expm
在大型双精度阵列上,速度也有显著提高。