先回顧一下范數的定義(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: V → R with the following properties:[1]
For all a ∈ F and all u, v ∈ V,
- p(av) = |a| p(v), (absolute homogeneity or absolute scalability).
- p(u + v) ≤ p(u) + p(v) (triangle inequality or subadditivity).
- 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畫圖的工具,比較輕量級,找了我好一會……