jjzjj

7.3 矩阵范数

醒过来摸鱼 2024-05-03 原文

定义

   向量有范数,矩阵也有范数,定义和向量范数类似,不过多了一条要求。它的定义如下:

  1. 正定性positivity, ∥ A ∥ ≥ 0 \parallel A\parallel\ge 0 A∥≥0,只有 A = 0 A=0 A=0时才取等号;
  2. 非负齐次性homogeneityscaling, ∥ k A ∥ = ∣ k ∣ ∥ A ∥ \parallel kA\parallel=|k|\parallel A\parallel kA∥=kA
  3. 劣可加性subadditivity或三角不等式triangle inequality ∥ A + B ∥ ≤ ∥ A ∥ + ∥ B ∥ \parallel A+B\parallel \le \parallel A\parallel+\parallel B\parallel A+B∥≤∥A+B
  4. 相容条件submultiplicativity ∥ A B ∥ ≤ ∥ A ∥ ∥ B ∥ \parallel AB\parallel \le \parallel A\parallel\parallel B\parallel AB∥≤∥A∥∥B

  只满足前三个条件的是广义矩阵范数。当然也有国外一些教材把满足前三条的叫矩阵范数,把满足第四条的叫相容矩阵范数Consistent Matrix Norms。矩阵的范数有点多,有和范数、Frobenius范数、最大范数、行范数、列范数、谱范数等,后面三个叫诱导范数。

和范数

  向量的各个分量模长的和,叫做1-范数。但是矩阵各个位置模长的和可不能叫1-范数。至于为什么不能叫,因为矩阵的1-范数属于诱导范数,我会另外写一篇诱导范数的文章来说。矩阵各个位置模长的和叫和范数sum norm,定义如下:
∥ A ∥ S = ∑ i = 1 m ∑ j = 1 n ∣ a i j ∣ \parallel A\parallel_S=\sum_{i=1}^{m}\sum_{j=1}^{n}|a_{ij}| AS=i=1mj=1naij
  求和范数的Python代码就比较简单了:

    def sum_norm(self):
        result = 0
        for vector in self.__vectors:
            for e in vector:
                result += abs(e)
        return result

Frobenius范数

  同样,矩阵各位置元素模长的平方和再开根号,不能叫2-范数,因为2-范数属于诱导范数。那应该叫什么呢?有个专门的名字Frobenius范数Frobenius norm,或者叫F范数,还可以叫希尔伯特-施密特范数Hilbert-Schmidt norm或舒尔范数Schur norm。定义如下:
∥ A ∥ F = ∑ i = 1 m ∑ j = 1 n ∣ a i j ∣ 2 \parallel A\parallel_F=\sqrt{\sum_{i=1}^{m}\sum_{j=1}^{n}|a_{ij}|^2} AF=i=1mj=1naij2
  F范数是考试热门。因为它性质特别多。首先有:
∥ A ∥ F = t r ( A H A ) \parallel A\parallel_F=\sqrt{tr(A^HA)} AF=tr(AHA)
  这个就无需证明了,因为一阶迹是所有对角线元素的和。而复数乘以自己的共轭就等于模长的平方。还有F-范数等于 A H A A^HA AHA所有特征值的和开根号。这也无需证明,因为一阶迹就是所有特征值的和。
  F-范数等于奇异值的平方和再开根号:
∥ A ∥ F = ∑ i = 1 n σ i 2 \parallel A\parallel_F=\sqrt{\sum_{i=1}^n\sigma_i^2} AF=i=1nσi2
  奇异值那个希腊字母很少见,读做西格玛是求和符号的小写形式。所以它也等于沙滕2-范数。
  Python代码:

    # F-范数
    def frobenius_norm(self):
        result = 0
        for vector in self.__vectors:
            for e in vector:
                result += abs(e)**2
        return math.sqrt(result)

最大范数

  矩阵所有元素的模长的最大值同样不能叫无穷范数,所以矩阵范数难受的是向量范数用过的名词都不能用了,要换个名词了,这次换成了最大范数max norm。最大范数不是相容范数,所以属于广义矩阵范数。它的定义如下:
∥ A ∥ M = m a x ( ∣ a i j ∣ ) \parallel A\parallel_M=max(|a_{ij}|) AM=max(aij)
  最大范数为什么不相容?我们只要找个 ∥ A B ∥ > ∥ A ∥ ∥ B ∥ \parallel AB\parallel \gt \parallel A\parallel\parallel B\parallel AB∥>∥A∥∥B的反例就行了。现在就给一个:
∥ 1 1 1 1 ∥ M = 1 ( 1 1 1 1 ) ( 1 1 1 1 ) = ( 2 2 2 2 ) ∥ 2 2 2 2 ∥ M = 2 \begin{Vmatrix}1 & 1\\ 1 & 1\\ \end{Vmatrix}_M=1\\ \begin{pmatrix}1 & 1\\ 1 & 1\\ \end{pmatrix}\begin{pmatrix}1 & 1\\ 1 & 1\\ \end{pmatrix}=\begin{pmatrix}2 & 2\\ 2 & 2\\ \end{pmatrix}\\ \begin{Vmatrix}2 & 2\\ 2 & 2\\ \end{Vmatrix}_M=2\\ 1111 M=1(1111)(1111)=(2222) 2222 M=2
  Python代码:

    # 最大范数
    def max_norm(self):
        array = [[abs(e) for e in vector] for vector in self.__vectors]
        max_vectors = [max(vector) for vector in array]
        return max(max_vectors)

有关7.3 矩阵范数的更多相关文章

  1. 旋转矩阵的几何意义 - 2

    点向量坐标矩阵的几何意义介绍旋转矩阵的几何含义之前,先介绍一下点向量坐标矩阵的几何含义点:在一维空间下就是一个标量,如同一条直线上,以任意某一个位置为0点,以一定的尺度间隔为1,2,3...,相反方向为-1,-2,-3...;如此就形成了一维坐标系,这时候任何一个点都可以用一个数值表示,如点p1=5,即即从原点出发沿着x轴正方向移动5个尺度;点p2=-3,负方向移动3个尺度;     在一维坐标系上过原点做垂直于一维坐标系的直线,则形成了二维坐标系,此时描述一个点需要两个数值来表示点p3=(3,2),即从原点出发沿着x轴正方向移动3个尺度,在此基础上沿着y轴正方向移动两个尺度的位置就是点p3。

  2. 华为OD机试真题 C++ 实现【带传送阵的矩阵游离】【2023 Q2 | 200分】 - 2

            所有题目均有五种语言实现。C实现目录、C++实现目录、Python实现目录、Java实现目录、JavaScript实现目录题目n行m列的矩阵,每个位置上有一个元素你可以上下左右行走,代价是前后两个位置元素值差的绝对值.另外,你最多可以使用一次传送阵(只能从一个数跳到另外一个相同的数)求从走上角走到右下角最少需要多少时间。输入描述:第一行两个整数n,m,分别代表矩阵的行和列。后面n行,每行m个整数,分别代表矩阵中的元素。输出描述:一个整数,表示最少需要多少时间。

  3. 欧拉角表示的姿态矩阵(313和312转序) - 2

    一、习惯约定图片来自PSINS(高精度捷联惯导算法)PSINS工具箱入门与详解.pptx二、基本旋转矩阵绕x轴逆时钟旋转α\alphaα角度Rx(α)=[ 1000cos⁡αsin⁡α0−sin⁡αcos⁡α]R_x(\alpha)=\begin{bmatrix}\1&0&0\\0&\cos\alpha&\sin\alpha\\0&-\sin\alpha&\cos\alpha\end{bmatrix}Rx​(α)=​ 100​0cosα−sinα​0sinαcosα​​绕y轴逆时钟旋转α\alphaα角度Ry(α)=[ cos⁡α0−sin⁡α010sin⁡α0cos⁡α]R_y(\alpha

  4. 欧拉角、旋转矩阵及四元数 - 2

    欧拉角、旋转矩阵及四元数1.简介2.欧拉角2.1欧拉角定义2.2右手系和左手系2.3转换流程3.旋转矩阵4.四元数4.1四元数与欧拉角和旋转矩阵之间等效变换4.2测试Matlab代码5.总结1.简介常用姿态参数表达方式包括方向余弦矩阵、欧拉轴/角参数、欧拉角、四元数以及罗德里格参数等。高分辨率光学遥感卫星主要采用欧拉角与四元数对姿态参数进行描述。这里着重讲解欧拉角、旋转矩阵和四元数。2.欧拉角2.1欧拉角定义欧拉角是表征刚体旋转的一种方法之一,由莱昂哈德·欧拉引入的三个角度,用于描述刚体相对于固定坐标系的方向。在摄影测量、空间科学或其它技术领域,一般用一组(三个)欧拉角描述两个空间坐标之间的旋

  5. ruby - 如何修改矩阵(Ruby std-lib Matrix 类)? - 2

    我理解RubystdlibMatrix是不可修改的,也就是说,例如。m=Matrix.zero(3,4)不会写m[0,1]=7但我非常想做...我可以用笨拙的编程来做,比如defmodify_value_in_a_matrix(matrix,row,col,newval)ary=(0...m.row_size).map{|i|m.rowi}.map(&:to_a)ary[row][col]=newvalMatrix[*ary]end...或者作弊,比如Matrix.send:[]=,0,1,7但我想知道,这一定是人们一直遇到的问题。有没有一些标准的、习惯的方法可以做到这一点,而不必使用

  6. 线性代数让我想想:快速求三阶矩阵的逆矩阵 - 2

    快速求三阶矩阵的逆矩阵前言一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示)A−1=1[  ][−[  ]−[  ]−[  ]  −[  ]]=A−1=1[  ][   M11−[M12]   M13−[M21]   M22−[M23]     M31−[M32]   M33]⊤\begin{aligned}&A^{-1}=\frac{1}{[\\]}\left[\begin{array}{cccccc}&-[\\]&\\-[\\]&&-[\\]\\\\&-[\\]&\\\end{array}\right]=\\\\&A^{-1}=\frac{1}{[\\]}\left[\b

  7. 相机校准—外参矩阵 - 2

    在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。相机外参摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:有助于确定摄影机方向的旋转变换。有助于移动相机的平移变换。让我们详细看看每一个。旋转通过旋转改变坐标让我们看一下将点旋转一个角度

  8. ruby - Ruby 中的有限矩阵 - 2

    为什么Matrix类没有方法来编辑它的向量和组件?似乎矩阵中的所有内容都可以读取但不能写入。我错了吗?是否有一些类似于Matrix的第三方优雅类允许我删除行并有意地编辑它们?如果没有这样的类(class),请通知我——我将停止搜索。 最佳答案 Matrix类的设计者一定是不可变数据结构和函数式编程的爱好者。是的,你是对的。无论如何,总有一个简单的解决方案可以满足您的需求。使用Matrix它可以做的事情,然后,只需使用.to_a来获得一个真正的数组。>>Matrix.identity(2).to_a=>[[1,0],[0,1]]另见N

  9. ruby - 在 Ruby 中打印可读矩阵 - 2

    在Ruby中是否有内置的打印可读矩阵的方法?例如require'matrix'm1=Matrix[[1,2],[3,4]]printm1让它显示=>1234在REPL中代替:=>Matrix[[1,2][3,4]]matrix的Ruby文档让它看起来像应该显示的那样,但这不是我所看到的。我知道编写一个函数来执行此操作是微不足道的,但如果有“正确”的方法,我宁愿学习! 最佳答案 您可以将其转换为数组:m1.to_a.each{|r|putsr.inspect}=>[1,2][3,4]编辑:这是一个“无积分”版本:putsm1.to_a

  10. matlab中矩阵点乘和乘的区别(超级简单) - 2

    matlab中矩阵点乘和乘的区别MATLAB中,一、矩阵相乘:表示两个矩阵相乘。二、矩阵点乘:表示矩阵中对应位置的元素分别相乘。三、举例3.1矩阵相乘3.2矩阵点乘MATLAB中,一、矩阵相乘:表示两个矩阵相乘。前提条件:满足矩阵相乘的规则,即前矩阵的列数等于后矩阵的行数。二、矩阵点乘:表示矩阵中对应位置的元素分别相乘。前提条件:满足矩阵点乘的规则,即前后矩阵维度相同。三、举例3.1矩阵相乘Example1:A=[123;456]A=123456>>B=[1;2;3]B=123>>C=A*BC=1432这时如果用点乘就会报错Example2:>>A=[123;456;789]A=1234567

随机推荐