范数和条件数(Norms and Condition Numbers)

1.向量范数(Vector Norms)

如果向量 x ∈ R n ( 或 C n ) x\in\mathbb{R}^n(或\mathbb{C}^n) xRn(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)x0(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+yx+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=1inmaxxi.
(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. x1=i=1nxi.
(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}}. x2=(x,x)21=(i=1nxi2)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}}. xp=(i=1nxip)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)xpRn上的向量范数,且容易说明上述三种范数是 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=plimxp).

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)=AF=(i,j=1nai,j2)21,
称为A的弗罗贝尼乌斯范数. ∥   A   ∥ F \left\lVert \,A\,\right\rVert_F AF显然名字正定性,齐次性及三角不等式.下面是矩阵范数的一般定义.
如果矩阵 A ∈ R n × n A\in\mathbb{R}^{n\times n} ARn×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)A0(A=0A=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=cA,cR(齐次条件);

( 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+BA+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}, xRn,ARn×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=1inmaxj=1naij(称为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)A1=1jnmaxi=1naij(称为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)A2=λmax(ATA) (称为A2-范数) 其 中 λ 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=A1vAv(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)=A1A;
( 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=A2A12=λ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.")
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值