向量和矩阵¶
向量¶
行向量¶
行向量使用 {...}
表示:
比如
\[
\{1,2,3 \} = \left(\begin{array}{c}
1 & 2 & 3
\end{array}\right)
\]
当矩阵元素都是数字或者变量,不是表达式时,逗号可以省略。
{1 2 3}
等价于{1,2,3}
{1+2 max(2,3) 100}
报错,需要写成{1+2, max(2,3), 100}
列向量¶
列向量可以使用中括号 [...]
表示,
比如 :
\[
[1,2,3] = \left(\begin{array}{c}
1 \\
2 \\
3
\end{array}\right)
\]
同行向量一样,元素都是数字时,逗号可以省略。 [1 2 3]
也是可以的。
[...]
就是把里面的元素,从上往下排。所以元素是行向量时, 就是一个矩阵。
\[
a = \{1\;2\;3 \}
\]
\[
b = \{4\;5\;6 \}
\]
\[
c = \{7\;8\;9 \}
\]
\[
[a \; b \; c] = \left(\begin{array}{c}
\left(\begin{array}{c}
1 & 2 & 3
\end{array}\right) \\
\left(\begin{array}{c}
4 & 5 & 6
\end{array}\right) \\
\left(\begin{array}{c}
7 & 8 & 9
\end{array}\right)
\end{array}\right)= \left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{array}\right)
\]
[...]
中的元素只支持数字和行向量,不支持列向量和矩阵
矩阵¶
矩阵使用 {...;...;...}
符号。
比如:
\[
\{1,2,3; 4,5,6; 7,8,9\} = \left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{array}\right)
\]
注意到先前使用符号{1,2,3}
表示行向量,
这个因为符号 {...}
的底层含义是元素拼接。
{1,2,3}
使用逗号,
表示列拼接, 也就是将元素横向水平拼接
\[
\{1,2,3\}=\left(\begin{array}{c}
1 & 2 & 3
\end{array}\right)
\]
{1;2;3}
使用分号 ;
表示行拼接,也就是将元素垂直拼接
( 元素为数字和行向量时等价于 [1,2,3]
, 可以将向量视为{...;...;...}
不支持行向量和矩阵的语法糖 )
\[
\{1;2;3\} = [1,2,3] =\left(\begin{array}{c}
1 \\
2 \\
3
\end{array}\right)
\]
所以 {1,2,3; 4,5,6; 7,8,9}
表示
\[
\{1,2,3; 4,5,6; 7,8,9\} = \left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6 \\
7 & 8 & 9
\end{array}\right)
\]
对于矩阵\(a\):
\[
a = \left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right)
\]
\(\{a, a\}\) 将矩阵水平拼接:
\[
\{a,a\} =\left(\begin{array}{c}
\left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right) &
\left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right)
\end{array}\right)
=\left(\begin{array}{c}
1 & 2 & 3 & 1 & 2 & 3 \\
4 & 5 & 6 & 4 & 5 & 6
\end{array}\right)
\]
\(\{a; a\}\) 将矩阵垂直拼接:
\[
\{a; a\} =\left(\begin{array}{c}
\left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right) \\
\left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right)
\end{array}\right) = \left(\begin{array}{c}
1 & 2 & 3 \\
4 & 5 & 6 \\
1 & 2 & 3 \\
4 & 5 & 6
\end{array}\right)
\]
使用函数创建矩阵¶
eye(3) // 创建3x3单位矩阵
zeros(3,4) // 创建3x4全零矩阵
ones(2,3) // 创建2x3全一矩阵
diag([1,2,3]) // 创建对角矩阵
range(1,10) // 创建从1到10的向量
range(1,10,2) // 创建从1到10步长为2的向量
random(10) // 随机数
random(10, 10)
reshape(A, 2, 3) // 将矩阵A重塑为2x3矩阵
repeat([1,2,3], 2) // 重复向量[1,2,3]两次
矩阵运算¶
基本运算¶
{1 2; 3 4} + {5 6; 7 8} // 矩阵加法
{1 2; 3 4} - {5 6; 7 8} // 矩阵减法
{1 2; 3 4} * {5 6; 7 8} // 矩阵点乘
{1 2; 3 4} / 2 // 矩阵除以标量
矩阵乘法¶
{1 2; 3 4} * {5 6; 7 8} // 矩阵点乘,对应位置元素相乘
{1 2; 3 4} @ {5 6; 7 8} // 矩阵乘法,使用@运算符的矩阵乘法
矩阵方法¶
{1 2; 3 4}.det // 矩阵行列式
{1 2; 3 4}.inv // 矩阵求逆
{1 2; 3 4}.transpose // 矩阵转置
{1 2; 3 4}.T // 矩阵转置的简写形式
{1 2; 3 4}.abs // 矩阵元素绝对值
eigenvalues({1 2; 3 4}) // 计算特征值
solve(A, b) // 解线性方程组 Ax = b
reshape({1,2,3,4,5,6}, 3, 2) // 将向量[1,2,3,4,5,6]重塑为3x2矩阵
max({1 2 3; 4 5 6}) // 矩阵最大值
min({1 2 3; 4 5 6}) // 矩阵最小值
sum({1 2 3; 4 5 6}) // 矩阵元素求和
mean({1 2 3; 4 5 6}) // 矩阵元素均值
sort({3 1 2; 6 4 5}) // 矩阵排序
矩阵运算示例¶
矩阵乘法¶
A = {1 2; 3 4}
B = {5 6; 7 8}
C = A @ B // 使用@运算符进行矩阵乘法
矩阵转置¶
A = {1 2 3; 4 5 6}
B = transpose(A) // 矩阵转置
C = A.T // 矩阵转置的简写形式
矩阵求逆¶
A = {1 2; 3 4}
B = inv(A)
B = A.inv // 矩阵求逆
对于非正定的矩阵或者非方阵,返回的是广义逆
矩阵行列式¶
A = {1 2; 3 4}
det = det(A)
det = A.det // 计算行列式
解线性方程组¶
\[
\begin{align}
1 \times x_{1} + 2 \times x_{2} = 5 \\
3 \times x_{1} + 4 \times x_{2} = 6
\end{align}
\]
使用 solve
可以求解方程,对于上面的方程。
A = {1 2; 3 4}
b = [5, 6]
x = solve(A, b) // 解方程 Ax = b
计算特征值和特征向量¶
A = {1 2; 3 4}
values = eigenvalues(A) // 特征值
矩阵函数详细表格¶
以下是矩阵相关函数的详细表格,包括函数名称、语法、描述和示例:
函数名 | 语法 | 描述 | 示例 |
---|---|---|---|
eye |
eye(n) |
创建n×n单位矩阵 | eye(3) → 创建3×3单位矩阵 |
zeros |
zeros(m, n) |
创建m×n全零矩阵 | zeros(2, 3) → 创建2×3全零矩阵 |
ones |
ones(m, n) |
创建m×n全一矩阵 | ones(2, 3) → 创建2×3全一矩阵 |
diag |
diag(v) |
用向量v创建对角矩阵 | diag([1, 2, 3]) → 创建对角元素为1,2,3的矩阵 |
range |
range(start, end, [step]) |
创建等差数列向量 | range(1, 10, 2) → 创建向量[1,3,5,7,9] |
reshape |
reshape(A, m, n) |
将矩阵A重塑为m×n矩阵 | reshape({1,2,3,4}, 2, 2) → 创建2×2矩阵 |
repeat |
repeat(v, n) |
重复向量v,n次 | repeat([1,2], 3) → 创建向量[1,2,1,2,1,2] |
solve |
solve(A, b) |
解线性方程组Ax=b | solve({1,2;3,4}, [5,6]) → 求解方程组 |
transpose |
A.transpose 或 A.T |
矩阵转置 | {1,2;3,4}.T → 转置矩阵 |
inv |
A.inv |
矩阵求逆,对于非正定的矩阵或者非方阵,返回的是广义逆 | {1,2;3,4}.inv → 求逆矩阵 |
det |
A.det |
计算矩阵行列式 | {1,2;3,4}.det → 计算行列式 |
eigenvalues |
eigenvalues(A) |
计算矩阵特征值 | eigenvalues({1,2;3,4}) → 计算特征值 |
max |
max(A) |
求矩阵最大元素 | max({1,2;3,4}) → 返回4 |
min |
min(A) |
求矩阵最小元素 | min({1,2;3,4}) → 返回1 |
sum |
sum(A) |
求矩阵所有元素之和 | sum({1,2;3,4}) → 返回10 |
mean |
mean(A) |
求矩阵所有元素的平均值 | mean({1,2;3,4}) → 返回2.5 |
sort |
sort(A) |
对矩阵元素排序 | sort({3,1;4,2}) → 排序后的矩阵 |
abs |
A.abs |
矩阵元素取绝对值 | {-1,2;-3,4}.abs → 所有元素取绝对值 |
sin |
sin(A) |
矩阵元素做sin | sin([1,2,3]) → [sin(1), sin(2), sin(3)] |
ln |
ln(A) |
ln([1,2,3]) → [ln(1), ln(2), ln(3)] |
事实上,几乎所有的函数和运算符都支持矩阵和向量操作
函数: f([a,b,c, ...]) --> [f(a), f(b), f(c), ...])
操作符: 1 / [a,b,c,...] --> [1/a, 1/b, 1/c, ...]