矩阵病态问题

  • 病态(ill-conditioned)矩阵
  • 病态(ill-posed)方程

病态矩阵

  • 矩阵的frobenius范数:
    • 对每一个元素平方,求和再开平方

A=\begin{bmatrix} a &b \\ c& d \end{bmatrix}

\begin{Vmatrix} A \end{Vmatrix}=\sqrt{|a|^2+|b|^2+|c|^2+|d|^2}

  • 矩阵的条件数:矩阵的frobenius范数与该矩阵的逆的frobenius范数的乘积

cond(A)=\begin{Vmatrix} A \end{Vmatrix}\cdot\begin{Vmatrix} A^{-1} \end{Vmatrix}

  • 对于同阶矩阵,矩阵的条件数越大,他的病态程度越高 
    • 一般而言,条件数小于100,矩阵健康
    • 介于100-1000之间,有一定的病态趋势
    • 大于1000,病态

病态矩阵的实质

  • 矩阵向量(行或列)之间存在共线性

举例

\begin{bmatrix} 1 & 2\\ 3.00001 & 6 \end{bmatrix}\begin{bmatrix} x_1\\ x_2 \end{bmatrix}=\begin{bmatrix} 6\\ 18 \end{bmatrix}

import numpy as np

A = np.array([[1, 2], [3.00001, 6]])
b = np.array([6, 18])
def cond(A):
    a = np.sum(A**2)**0.5
    b = np.sum(np.linalg.inv(A)**2)**0.5
    return a*b


x = np.linalg.solve(A, b)
print(x, "  ", cond(A))
[0. 3.]    2500003.000017089


 

\begin{bmatrix} 1 & 2\\ 2 & 6 \end{bmatrix}\begin{bmatrix} x_1\\ x_2 \end{bmatrix}=\begin{bmatrix} 6\\ 18 \end{bmatrix}

import numpy as np

A = np.array([[1, 2], [2, 6]])
b = np.array([6, 18])
def cond(A):
    a = np.sum(A**2)**0.5
    b = np.sum(np.linalg.inv(A)**2)**0.5
    return a*b


x = np.linalg.solve(A, b)
print(x, "  ", cond(A))
[0. 3.]    22.500000000000004


 

你可能感兴趣的:(#,优化算法,算法,数学建模,机器学习,抽象代数,人工智能)