先回顧一下範數的定義(en.wikipedia.org/wiki/Norm_(mathematics)):python
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]ubuntu
For all a ∈ F and all u, v ∈ V,工具
By the first axiom, absolute homogeneity, we have p(0) = 0 and p(-v) = p(v), so that by the triangle inequalityspa
常常會聽到p範數(p norm)的說法,其實很簡單,能夠當作2範數的擴展,可是有一點須要注意:p的範圍是[1, inf)。p在(0,1)範圍內定義的並非範數,由於違反了三角不等式(||x+y|| <= ||x|| + ||y||,此處x和y是向量,後面出現x和y的地方也是向量,再也不贅述)。見下面wikipedia的截圖scala
在p範數下定義的單位球(unit ball)都是凸集(convex set,簡單地說,若集合A中任意兩點的連線段上的點也在集合A中,則A是凸集),可是當0<p<1時,在該定義下的unit ball並非凸集(注意:咱們沒說在該範數定義下,由於如前所述,0<p<1時,並非範數).下圖展現了p取不一樣值時unit ball的形狀code
當0<p<1時,上面相似p範數的定義不能對任意兩點知足三角不等式,也就是說,存在兩點,它們不知足三角不等式。這個論斷證實起來很簡單,只要找出兩個這樣的點就好了。orm
在一維空間中,按照p範數的定義,三角不等式老是成立。因而咱們能夠考慮在二維空間選點(由於二維空間比較簡單),考慮特殊一點的,好比,取x=(0,1), y=(1,0)blog
||x|| = 1, ||y|| = 1,||x+y|| = 2^(1/p) > 2 == ||x|| + ||y||,這就是一個違反三角不等式的例子,證畢。ip
對於更高維空間均可以取相似的例子,好比三維就取(0,0,1), (0, 1, 0), (1,0,0)ci
下面的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畫圖的工具,比較輕量級,找了我好一會……