p范数(p norm)

先回顾一下范数的定义(en.wikipedia.org/wiki/Norm_(mathematics)):

Given a vector space V over a subfield F of the complex numbers, a norm on V is a function p: VR with the following properties:[1]

For all aF and all u, vV,

  1. p(av) = |a| p(v), (absolute homogeneity or absolute scalability).
  2. p(u + v) ≤ p(u) + p(v) (triangle inequality or subadditivity).
  3. If p(v) = 0 then v is the zero vector (separates points).

By the first axiom, absolute homogeneity, we have p(0) = 0 and p(-v) = p(v), so that by the triangle inequality

p(v) ≥ 0 (positivity).

 

经常会听到p范数(p norm)的说法,其实很简单,可以看成2范数的扩展,但是有一点需要注意:p的范围是[1, inf)p在(0,1)范围内定义的并不是范数因为违反了三角不等式(||x+y|| <= ||x|| + ||y||,此处x和y是向量,后面出现x和y的地方也是向量,不再赘述。见下面wikipedia的截图

 

在p范数下定义的单位球(unit ball)都是凸集(convex set,简单地说,若集合A中任意两点的连线段上的点也在集合A中,则A是凸集),但是当0<p<1时,在该定义下的unit ball并不是凸集(注意:我们没说在该范数定义下,因为如前所述,0<p<1时,并不是范数).下图展示了p取不同值时unit ball的形状

 

 

当0<p<1时,上面类似p范数的定义不能对任意两点满足三角不等式,也就是说,存在两点,它们不满足三角不等式。这个论断证明起来很简单,只要找出两个这样的点就行了。

在一维空间中,按照p范数的定义,三角不等式总是成立。于是我们可以考虑在二维空间选点(因为二维空间比较简单),考虑特殊一点的,比如,取x=(0,1), y=(1,0)

||x|| = 1, ||y|| = 1,||x+y|| = 2^(1/p) > 2 == ||x|| + ||y||,这就是一个违反三角不等式的例子,证毕。

对于更高维空间都可以取类似的例子,比如三维就取(0,0,1), (0, 1, 0), (1,0,0)

 

下面的python(ver 2.7)代码可以用来画p取不同值时的unit ball:

import numpy as np
from matplotlib.pyplot import *

figure(); hold(True)
r = 1
linestyle = ['b-','k-','m-','r-','y-']
p_values = (0.25, 0.5, 1, 2, 4)
for i,p in enumerate(p_values):
    x = np.arange(-r,r+1e-5,1/128.0)
    y = (r**p - (abs(x)**p))**(1.0/p)
    y = zip(y, -y)
    plot(x, y, linestyle[i], label=str(i))
axis('equal')
show()

结果是这样的(由内到外p逐渐增大,蓝线代表p=0.25,黄线代表p=4):

 

--

第一个图是截图后用MyPaint做的标记(红线),这是一个ubuntu(Linux)平台上类似于window画图的工具,比较轻量级,找了我好一会……

posted @ 2015-01-01 11:38  ttang  阅读(40443)  评论(2编辑  收藏  举报