1.向量范数(Vector Norms)
如果向量 x ∈ R n ( 或 C n ) x\in\mathbb{R}^n(或\mathbb{C}^n) x∈Rn(或Cn)的某个实值函数 N ( x ) = ∥ x ∥ , N(x)=\left\lVert \,x\,\right\rVert, N(x)=∥x∥,满足条件:
( 1 ) ∥ x ∥ ⩾ 0 ( ∥ x ∥ = 0 当且仅当 x = 0 ) (1)\left\lVert \,x\,\right\rVert\geqslant 0(\left\lVert \,x\,\right\rVert=0\text{当且仅当}x=0) (1)∥x∥⩾0(∥x∥=0当且仅当x=0)
( 2 ) ∥ α x ∥ = ∣ α ∣ ∥ x ∥ , ∀ α ∈ R ( 或 α ∈ C ) , \quad(2)\left\lVert \,\alpha x\,\right\rVert=\left\lvert \alpha \right\rvert\left\lVert \,x\,\right\rVert,\forall \alpha \in\mathbb{R}(或\alpha \in\mathbb{C}), (2)∥αx∥=∣α∣∥x∥,∀α∈R(或α∈C),
( 3 ) ∥ x + y ∥ ⩽ ∥ x ∥ + ∥ y ∥ ( 三 角 不 等 式 ) \quad\:\,(3)\left\lVert \,x+y\,\right\rVert\leqslant\left\lVert \,x\,\right\rVert+\left\lVert \,y\,\right\rVert(三角不等式) (3)∥x+y∥⩽∥x∥+∥y∥(三角不等式)
则称
N
(
x
)
是
R
n
(
或
C
n
)
上
的
向
量
范
数
或
模
.
N(x)是\mathbb{R}^n (或\mathbb{C}^n)上的向量范数或模.
N(x)是Rn(或Cn)上的向量范数或模.
几种常见的向量范数.
(1)向量的
∞
\infty
∞-范数(最大范数):
∥
x
∥
∞
=
max
1
⩽
i
⩽
n
∣
x
i
∣
.
\begin{Vmatrix} \,x\, \end{Vmatrix}_\infty= \max_{1\leqslant i\leqslant n}\left\lvert\, x_i\,\right\rvert.
∥∥x∥∥∞=1⩽i⩽nmax∣xi∣.
(2)向量的1-范数:
∥
x
∥
1
=
∑
i
=
1
n
∣
x
i
∣
.
\left\lVert \,x\,\right\rVert_1=\sum_{i = 1}^{n}\left\lvert\, x_i\,\right\rvert.
∥x∥1=i=1∑n∣xi∣.
(3)向量的2-范数:
∥
x
∥
2
=
(
x
,
x
)
1
2
=
(
∑
i
=
1
n
x
i
2
)
1
2
.
\left\lVert \,x\,\right\rVert_2=(x,x)^{\frac{1}{2}}=(\sum_{i = 1}^{n}x_i^{2})^{\frac{1}{2}}.
∥x∥2=(x,x)21=(i=1∑nxi2)21.
(4)向量的
p
p
p-范数:
∥
x
∥
p
=
(
∑
i
=
1
n
∣
x
i
∣
p
)
1
p
.
\left\lVert \,x\,\right\rVert_p=(\sum_{i = 1}^{n}\left\lvert\, x_i\,\right\rvert^p)^{\frac{1}{p}}.
∥x∥p=(i=1∑n∣xi∣p)p1.
其中
p
∈
[
1
,
+
∞
)
,
p\in[1,+\infty),
p∈[1,+∞),可以证明向量函数
N
(
x
)
≡
∥
x
∥
p
是
R
n
N(x)\equiv\left\lVert \,x\,\right\rVert_p是\mathbb{R}^n
N(x)≡∥x∥p是Rn上的向量范数,且容易说明上述三种范数是
p
p
p-范数的特殊情况
(
∥
x
∥
∞
=
lim
p
→
∞
∥
x
∥
p
)
.
(\left\lVert \,x\,\right\rVert_\infty=\lim\limits_{p \to \infty}\left\lVert \,x\,\right\rVert_p ).
(∥x∥∞=p→∞lim∥x∥p).
2. 矩阵范数(Matrix Norms)
将向量范数概念推广到矩阵上去.视
R
n
×
n
\mathbb{R}^{n\times n}
Rn×n中的矩阵为
R
n
2
\mathbb{R}^{n^2}
Rn2中的向量,则由
R
n
2
\mathbb{R}^{n^2}
Rn2上的2-范数,可以得到
R
n
×
n
\mathbb{R}^{n\times n}
Rn×n中矩阵的一种范数.
F
(
A
)
=
∥
A
∥
F
=
(
∑
i
,
j
=
1
n
a
i
,
j
2
)
1
2
,
F(A)=\left\lVert \,A\,\right\rVert_F=(\sum_{i,j= 1}^{n}a_{i,j}^{2})^{\frac{1}{2}},
F(A)=∥A∥F=(i,j=1∑nai,j2)21,
称为A的弗罗贝尼乌斯范数.
∥
A
∥
F
\left\lVert \,A\,\right\rVert_F
∥A∥F显然名字正定性,齐次性及三角不等式.下面是矩阵范数的一般定义.
如果矩阵
A
∈
R
n
×
n
A\in\mathbb{R}^{n\times n}
A∈Rn×n的某个非负实值函数
N
(
A
)
=
∥
A
∥
,
N(A)=\left\lVert \,A\,\right\rVert,
N(A)=∥A∥,满足条件:
(
1
)
∥
A
∥
⩾
0
(
∥
A
∥
=
0
⇔
A
=
0
)
(正定条件)
;
\qquad(1)\left\lVert \,A\,\right\rVert\geqslant 0(\left\lVert \,A\,\right\rVert=0\Leftrightarrow A=0)\text{(正定条件)};
(1)∥A∥⩾0(∥A∥=0⇔A=0)(正定条件);
( 2 ) ∥ c A ∥ = ∣ c ∣ ∥ A ∥ , ∀ c ∈ R (齐次条件) ; (2)\left\lVert \,c A\,\right\rVert=\left\lvert c \right\rvert\left\lVert \,A\,\right\rVert,\forall c \in\mathbb{R}\text{(齐次条件)}; (2)∥cA∥=∣c∣∥A∥,∀c∈R(齐次条件);
(
3
)
∥
A
+
B
∥
⩽
∥
A
∥
+
∥
B
∥
(
三
角
不
等
式
)
\quad(3)\left\lVert \,A+B\,\right\rVert\leqslant\left\lVert \,A\,\right\rVert+\left\lVert \,B\,\right\rVert(三角不等式)
(3)∥A+B∥⩽∥A∥+∥B∥(三角不等式)
则称
N
(
A
)
是
R
n
×
n
上
的
矩
阵
范
数
或
模
.
N(A)是\mathbb{R}^{n\times n}上的矩阵范数或模.
N(A)是Rn×n上的矩阵范数或模.
设
x
∈
R
n
,
A
∈
R
n
×
n
,
x\in\mathbb{R}^n,A\in\mathbb{R}^{n\times n},
x∈Rn,A∈Rn×n,则:
(
1
)
∥
A
∥
∞
=
max
1
⩽
i
⩽
n
∑
j
=
1
n
∣
a
i
j
∣
(称为A的行范数)
;
(1)\left\lVert \,A\,\right\rVert_\infty=\max\limits_{1\leqslant i\leqslant n}\sum\limits_{j=1}^n\left\lvert \,a_{ij}\, \right\rvert\text{(称为A的行范数)};
(1)∥A∥∞=1⩽i⩽nmaxj=1∑n∣aij∣(称为A的行范数);
(
2
)
∥
A
∥
1
=
max
1
⩽
j
⩽
n
∑
i
=
1
n
∣
a
i
j
∣
(称为A的列范数)
;
(2)\left\lVert \,A\,\right\rVert_1=\max\limits_{1\leqslant j\leqslant n}\sum\limits_{i=1}^n\left\lvert \,a_{ij}\, \right\rvert\text{(称为A的列范数)};
(2)∥A∥1=1⩽j⩽nmaxi=1∑n∣aij∣(称为A的列范数);
( 3 ) ∥ A ∥ 2 = λ max ( A T A ) (称为A的2-范数) (3)\left\lVert \,A\,\right\rVert_2=\sqrt{\lambda_{\max}(A^TA)}\text{(称为A的2-范数)} (3)∥A∥2=λmax(ATA)(称为A的2-范数) 其 中 λ max ( A T A ) 表 示 A T A 的 最 大 特 征 值 . 其中\lambda_{\max}(A^TA)表示A^TA的最大特征值. 其中λmax(ATA)表示ATA的最大特征值.
3.矩阵条件数(Condition Numbers)
设
A
A
A为非奇异矩阵,称数
c
o
n
d
(
A
)
v
=
∥
A
−
1
∥
v
∥
A
∥
v
(
v
=
1
,
2
或
∞
)
cond(A)_v=\left\lVert \,A^{-1}\,\right\rVert_v\left\lVert \,A\,\right\rVert_v(v=1,2或\infty)
cond(A)v=∥∥A−1∥∥v∥A∥v(v=1,2或∞)为矩阵
A
A
A的条件数.
通常使用的条件数有
(
1
)
c
o
n
d
(
A
)
∞
=
∥
A
−
1
∥
∞
∥
A
∥
∞
;
(1)\quad cond(A)_\infty=\left\lVert \,A^{-1}\,\right\rVert_\infty\left\lVert \,A\,\right\rVert_\infty;
(1)cond(A)∞=∥∥A−1∥∥∞∥A∥∞;
(
2
)
A
(2)\quad A
(2)A的谱条件数
c
o
n
d
(
A
)
2
=
∥
A
∥
2
∥
A
−
1
∥
2
=
λ
max
(
A
T
A
)
λ
min
(
A
A
T
)
.
cond(A)_2=\left\lVert \,A\,\right\rVert_2\left\lVert \,A^{-1}\,\right\rVert_2=\sqrt{\frac{\lambda_{\max}(A^TA)}{\lambda_{\min}(AA^T)}}.
cond(A)2=∥A∥2∥∥A−1∥∥2=λmin(AAT)λmax(ATA).
当
A
A
A为对称矩阵时
c
o
n
d
(
A
)
2
=
∣
λ
1
∣
∣
λ
n
∣
,
cond(A)_2=\frac{| \lambda_1\vert }{| \lambda_n\vert},
cond(A)2=∣λn∣∣λ1∣,
其中,
λ
1
,
λ
n
\lambda_1,\lambda_n
λ1,λn为
A
A
A的绝对值最大和最小特征值.
4.Python实现范数和条件数
import numpy as np
from scipy.linalg import eigvals, det, inv
def vector_norm(vector: np.ndarray, p=None):
"""
计算向量的p-范数
:param vector: 实向量或者复向量
:param p: 指定类型的范数,默认是oo范数
:return: 指定向量范数和p值
"""
if p is None:
return abs(vector).max(), p
elif p >= 1:
return np.power(np.sum(np.power(abs(vector), p)), 1 / p), p
else:
raise Exception("error,p must be an integer , greater than or equal to 1")
def matrix_norm(square_matrix: np.ndarray, v=None):
"""
计算矩阵范数,其中v=1,2,oo
:param square_matrix: 实数方阵或者复数方阵
:param v: 范数类型,默认是弗罗贝尼乌斯范数
:return: 指定类型范数
"""
if square_matrix.shape[0] == square_matrix.shape[1]:
if v is None:
# 弗罗贝尼乌斯范数
return np.power(np.sum(np.power(square_matrix, 2)), 1 / 2)
elif v == 0:
# 矩阵的列范数
return np.max(np.sum(abs(square_matrix), v))
elif v == 1:
# 矩阵的行范数
return np.max(np.sum(abs(square_matrix), v))
elif v == 2:
# 矩阵的2-范数
return np.sqrt(eigvals(square_matrix.T @ square_matrix).max()).real
else:
raise Exception("sorry,currently,v must be None,0,1 or2")
else:
raise Exception("error,input matrix must be a square matrix.")
def condition_number(square_matrix: np.ndarray, v=None):
"""
计算矩阵条件数,其中v=oo,1,2
:param square_matrix:实数方阵或者复数方阵
:param v:范数类型,默认是oo范数
:return:指定范数下的矩阵条件数
"""
if square_matrix.shape[0] == square_matrix.shape[1]:
if det(square_matrix) != 0:
if v is None:
return matrix_norm(square_matrix, v=1)*matrix_norm(inv(square_matrix), v=1)
elif v == 1:
return matrix_norm(square_matrix, v=0)*matrix_norm(inv(square_matrix), v=0)
elif v == 2:
eigenvalue_fraction = matrix_norm(square_matrix, v=2) / np.sqrt(
eigvals(square_matrix.T @ square_matrix).min()).real
return np.sqrt(eigenvalue_fraction)
else:
raise Exception("sorry,currently,v must be None,1 or2")
else:
raise Exception("error,input matrix must be a non-singular matrix")
else:
raise Exception("error,input matrix must be a square matrix.")