什麼是張量 (tensor)?


現在已有的回答都好嚇人...

對於大部分已經熟練的數學和物理工作者, 這實在是一個極為基礎的問題. 但這個問題在我剛接觸張量時也困擾了我很久. 張量的那麼多定義, 究竟哪些是對的? (顯然都是對的. ) 它們的關係是什麼? 我儘可能簡單地用我自己的話把我對它粗淺的理解講得明白些.

對於大部分已經熟練的數學和物理工作者, 這實在是一個極為基礎的問題. 但這個問題在我剛接觸張量時也困擾了我很久. 張量的那麼多定義, 究竟哪些是對的? (顯然都是對的. ) 它們的關係是什麼? 我儘可能簡單地用我自己的話把我對它粗淺的理解講得明白些.

  • A View from Physics

張量的概念早在19世紀末就被數學家提出了, 但這個概念真正發揚光大, 還是在相對論出現以後. 原因是, 在相對論中, 在不同的參考系下看同一個物理系統, 它"看起來"是不一樣的: 比如粒子的動量和能量在不同的參考系下根據 Lorentz 變換相聯繫.

這帶來一個問題: 在 Bob 看來, 一個粒子的能動量是(E_b,m{p}_b). 如果你問 Bob, 這個粒子的能動量是多少, 他會告訴你是(E_b,m{p}_b). 但我 (Andrew) 聽了以後, 必然是反對的: Bob 說的不對! 我看到的粒子的能動量明明是(E_a,m{p}_a)!

我們知道, Andrew 和 Bob 都沒有說錯. (E_a,m{p}_a)(E_b,m{p}_b)可以通過恰當的 Lorentz 變換相互轉化. "你說的我都懂", 想必你已經看得不耐煩了, "可是這個粒子的能動量究竟是多少? " 由於參考系都是平權的, Andrew 和 Bob 的參考系並沒有哪個更優越. 那我們乾脆把它們都捨棄. 於是我們說, 這個粒子的能動量就由能動量張量T來描述. 能動量張量是一個不隨坐標而改變的, 物理系統內在的量. (如果你對左邊這句話的確切含義感到疑惑, 請先往下看. ) 它在 Andrew 的坐標系裡看是(E_a,m{p}_a), 在 Bob 的坐標系裡看是(E_b,m{p}_b), (E_a,m{p}_a)按照 Lorentz 變換變成(E_b,m{p}_b).

你現在肯定找到了一點感覺. 什麼是張量? 如 A.Zee 書中所說: A tensor is something that transforms like a tensor! 一個量, 在不同的參考系下按照某種特定的法則進行變換, 就是張量.

用張量有什麼好處? 物理定律是不會隨參考系的變化而變化的. 考慮下面一個物理過程: 兩個粒子1和2經過散射變成了3和4. 在 Andrew 看來, 能動量守恆是(E_{a,1},m{p}_{a,1})+(E_{a,2},m{p}_{a,2})=(E_{a,3},m{p}_{a,3})+(E_{a,4},m{p}_{a,4}). 但這樣寫, 並不能直接看出 Bob 也看到能動量守恆. 但如果用張量的語言直接寫成: T_1+T_2=T_3+T_4, 我們立刻就知道它在 Andrew 看來是(E_{a,1},m{p}_{a,1})+(E_{a,2},m{p}_{a,2})=(E_{a,3},m{p}_{a,3})+(E_{a,4},m{p}_{a,4}), 在 Bob 看來是(E_{b,1},m{p}_{b,1})+(E_{b,2},m{p}_{b,2})=(E_{b,3},m{p}_{b,3})+(E_{b,4},m{p}_{b,4}). 用張量語言描述的物理定律自動保證了不隨參考系變化的這一性質. 而且從記號的角度看, 用張量也更加簡潔. [*]

  • Let us go deeper

我們已經從物理上理解了什麼是張量. 物理學家到此就很滿意了. 但嚴謹的數學家們並不滿意. "你剛剛說張量是一個不隨坐標而改變的, 物理系統內在的量", 數學家質問道, "你說的我都懂, 可是張量究竟是什麼?"

如果你對線性代數略知一二, 可能知道線性變換這個概念. 線性變換這個概念的精髓之處在於, 它不依賴於線性空間的基的選取. 在某一組基下, 它的矩陣表示A是一個模樣; 在另外一組基下, 它的矩陣表示A是另一個模樣, 其中T是基變換矩陣. 有一種常見的說法: 矩陣的意義是線性變換, 相似矩陣是同一個線性變換在不同的基下的表示.

慢著! "同一個線性變換在不同的基下的表示", 這難道不就是和之前說的張量是一回事嘛! Lorentz 變換就是 Minkowski 空間中的基變換, 能動量張量實質上就是一個線性變換. Andrew 和 Bob 看到的能動量張量, 不就是這個線性變換在不同的基下的表示嗎?

你現在肯定找到了一點感覺. 什麼是張量? 在數學家眼中, 張量已經被抽象成了線性變換.

當然, 數學家們還可以再進一步抽象這個概念, 提取出更普遍的 universal property. 這時, 張量被定義為張量積空間中的一個元素. 具體的定義不在此贅述, 請參考相關專著. 但儘管已經抽象到那樣的程度, 其背後的思想依然是不變的.

如果你通過上面的閱讀理解了張量背後的思想, 再去看相關數學或物理專著上或繁雜或抽象的式子, 或許會開朗很多 :-)


最後引用陳維桓先生的《微分流形初步》一書中的一段話進行總結:

張量的概念是 G.Ricci 在19世紀末提出的. G.Ricci 研究張量的目的是為幾何性質和物理規律的表達尋求一種在坐標變換下不變的形式. 他所考慮的張量是如同向量的分量那樣的數組, 要求它們在坐標變換下服從某種線性變換的規律. 近代的理論已經把張量敘述成向量空間及其對偶空間上的多重線性函數, 但是用分量表示張量仍有它的重要性, 尤其是涉及張量的計算時更是如此.

[*] 如果還定義了內積/縮並等運算, 還可以由張量迅速得到一些不變數. 此時會涉及對偶空間(因為內積本質是個線性函數)等概念, 進而涉及張量的協變和逆變. 為了行文簡潔, 我在正文中沒有提及這些概念. 但它們本質上和正文所說沒有區別.


張量就是物理量,與張量相關的數學是對高維 (維數 ≥ 2) 的物理量進行 「量綱分析」 的一種工具。同一個物理量可以由不同的向量/矩陣表示出來,這是由線性空間(通常是流形的切空間)的對稱性決定的。

先發一個微信里看到的雷人數學題,這個其實對於理解張量分析很有幫助。

某同學為了證明錢縮水,做了一道題,把數學老師逼瘋了!高級數學題:
求證:1元=1分
解:因為1元=100分
=10分×10分
=1角 ×1角
=0.1元×0.1元
=0.01元
=1分
證明完畢。
數學老師哭了!
因為,毫無破綻。
稀里糊塗地錢就沒了… 正如現在的社會!

其實破綻很明顯——100分並不是 10分*10分,100分是 10分*10,而 10分 * 10分是 100 分^2, 所以最後應該得到 0.01 元^2, 而 1元^2 = 10000分^2,所以 0.01 元^2 就是 100 分^2。(如果覺得元和分這些單位有點抽象的話,不妨把元和分換成米和厘米,用長度和面積來理解一下,我們顯然不會說 1 米 = 100 厘米 = 100 平方厘米,前者是長度,後者是面積,根本不是一回事)

這裡的核心問題是,100 分^2 和 100 分根本不是一個線性空間里的量,不能簡單等同起來,要等同起來,必須選定一個同構。說具體點就是,如果M_mathbb{R}是一分錢生成的自由mathbb{R}-模,也就是說,M_mathbb{R}是 「金額的實數軸」,這是一個mathbb{R}上的一維線性空間。則100 分^2 所在的空間是M_{mathbb{R}}^{otimes 2}M_{mathbb{R}}^{otimes 2}M_{mathbb{R}}都是一維線性空間,所以可以選取一個同構把1分映到1分^2. 但是這個映射並不把1元映到1元^2, 而是把1元映到0.01元^2, (1元 = 100 分 mapsto 100 分^2 = 0.01 元^2) 所以反過來的時候,0.01元^2 自然對應回了1元…… 所以並沒有矛盾。

現在來解釋開頭那句話(張量就是物理量,與張量相關的數學是對高維 (維數 ≥ 2) 的物理量進行 「量綱分析」 的一種工具)。

1. 什麼是數? 什麼是量?

這是兩千五六百年前希臘先賢討論的問題之一(好像是 Miletus 的泰勒斯,歡迎指正)。最笨的解答是:量是有單位的,數沒有。這個解答其實很有道理。1, 2, 3, 3.14, π, 這樣的叫 「數」,5米,五塊錢,500厘米,這樣的叫量。數字上 5 ≠ 500, 但是 5 米和 500 厘米對應的物理量是一樣的,這個物理量,就是 「空間中的某一段距離」,這個距離,即使對完全不理解人類語言的生物,也是實實在在的。而無量綱的數字,通常是一個物理量的比值,比如五公里裡面的 5,是五公里對應的長度和公里這個單位長度的比值。

2. 如何描述速度這個物理量?

說 「速度」 是一個物理量,應該沒人會反對。兩個小學生,沒有捲尺和秒錶,也可以通過賽跑來比較自己的速度。觀看賽馬比賽的時候,不同馬匹在同一時刻有不同的速度,這很容易察覺。但是日常生活中,通常速度被用一個數字表示,比如 72 km/h, 或者 20m/s. 熟悉這兩個單位的人應該能看出,72 km/h 和 20m/s 是同一個物理量,他也可以用 72000m/h, 或者 65.6168 ft/s (英尺/秒)。如何不依賴於上面這些單位的選取,來描述 「速度」 這個概念呢?

有人可能會說,這個簡單,距離這個概念,是個物理量,時間這個概念,也是個物理量,要拋開單位談速度(也就是給出速度的一個內蘊的定義),只需要把它定義成距離的變化量 Δs 和時間差 Δt 的比值,在 Δt → 0 的時候的極限。也就是說,如大家熟悉的,v(t_0) = left.frac{ds}{dt}
ight|_{t = t_0}. 對這個公式,也許你會說,不就是求導么。新的問題來了,沒有選取單位,s(t) 都不是一個 「函數」(換句話說,s並不把數值映射到數值,只是把物理量映射到物理量),如何 「求導」 呢。只好用一個格調稍微高點的說法,s 是時間軸到空間軸的一個映射,這裡時間軸和空間軸都是兩個一維流形,未選取任何坐標系。而 v(t_0) 其實是t_0的切空間到s(t_0)的切空間的一個線性變換。一維線性空間之間的線性變換,只要選定了 「單位」,就可以用一個數字來表示,所以大家一般不這麼說。但是,明確了速度這個物理量,其實是一個一維空間之間的線性變換這一點,其實對理解它的數值表示,很有幫助。比如 72 km/h 這個量,他的數值表示是 72. 如果把時間的單位換成 s (秒) —— 在時間軸的切空間上換了個坐標系 —— 而新舊坐標系之間的關係是,1h = 3600s,則新的數值表示,變成了 72/3600 = 0.02. 新的數值 0.02 表示同一個物理量,只不過單位是 km/s 而已。類似地,空間軸如果換個坐標系,比如把千米變成米,也會得到一個新的數值來表示同一個物理量,數值是 20,實際上是 20 m/s.

上述內容在一維的情形怎麼說都像是抽象的廢話。但是核心在於不同的數值可以表示同一個物理量。高維的情形就沒那麼平凡了。但是說穿了也很簡單,不同的向量可以表示同一個物理量一維的情形,不同的數值之間只差一個倍數,所以很平凡。高維的情形,不同的向量之間差的就是(切空間上的)線性變換,所以沒有那麼平凡。[這裡還想話癆幾句,但是有點跑題,參見末尾的 P.S.]

回頭來看看三維空間中的 「速度」 這個概念,有助於加深理解。三維空間中的速度,也是一個物理量,選定了坐標系和單位,也可以用三個數字來表示。但是日常生活中我們基本不會說,我的速度是 (3, 5, 7). 因為沒有簡單的選取坐標系的辦法。同樣地,在物理上,經常遇到需要變換坐標系的情形(因為任何坐標系的選取都是人為的,沒有哪個坐標系更好)。

比如(三維)流形M上的一個點,選定了局部坐標系,就對應於三個數,換個坐標系,就得到另外三個數,這之間只相差一個坐標變換。如果有映射gamma(t): (-1,1)
ightarrow M, 對應於 「運動」,就可以討論 「速度」 這個概念。t=0處的速度是什麼呢? 作為一個物理量,它當然不是三個數字,而是切空間的映射dgamma|_0: T_{(-1,1)}|_0 
ightarrow TM|_{gamma(0)} , 這裡T_{(-1,1)}|_0是有現成的坐標的(讀者不妨想想是啥),所以dgamma|_0就由切空間TM|_{gamma(0)} 中的一個向量給出,到這裡還是一個抽象的向量,只有選了坐標系,才變成三個數(坐標值),而這三個數,是依賴於坐標選取的。所以切空間里的一個向量(「速度」),要用三個數(v_x, v_y, v_z)表示的話,其實包含了很多額外的 data: ((v_x, v_y, v_z), mathbb{R}^3supset U
ightarrow M),後面這個 U
ightarrow M就是坐標的選取。換一組坐標(也就是替代掉U
ightarrow M)的話,這三個數字也會跟著變,這就是最基本的張量分析了。

3. 更複雜的物理量怎麼表示?

有些物理量,並不簡單地生活在切空間中,而是切空間上的線性變換,或者二次型(比如轉動慣量,比如動能),或者落在切空間的對偶空間中,這種時候就考驗線性代數的水平了。不用坐標系理解一個概念的能力越強,越容易理解張量。

=================================

P.S. 上面說到不同的向量可以表示同一個物理量更複雜的情形,就是高階張量,比如切空間上的二次型,抽象地看是二次型,具體寫出來是對稱矩陣,變換起來用Amapsto Q^TAQ之類的操作。之所以用這些變換了操作,也是因為不同的對稱矩陣可以表示同一個物理量。

個人感受:很多時候一些人之所以不能理解張量,就是因為腦子裡默默地做了一些等同 (identification), 比如把線性變換和矩陣當做同一個東西,而沒有理解抽象的線性變換的概念。實際上不在 source 和 target 中選取一組基的話,一個抽象的線性變換是沒有矩陣的。同理很多人不能理解沒有選取坐標的一維流形,一想像腦子裡就是數軸或者單位圓。忘掉坐標,想像一個抽象的 underlying manifold, 也是一種能力。


在工程領域,把一維數組稱為矢量,把二維方陣稱為二階張量,把3維方陣稱為三階張量,這只是慣用術語,但遠非其本質。後面會解釋,為什麼方陣是二階張量。

張量其實是用一種統一的方式來處理多線性映射。比如,(fotimes g)(x_1,x_2)stackrel{Delta}{=}f(x_1)g(x_2),這裡fg分別是線性映射,而這樣定義出來的張量fotimes g是一個雙線性映射,這裡的otimes稱為張量積,就是簡單的數的乘法。

但一般的張量理論遠非這麼簡單,要理解其本質,需要理解對偶空間。對偶空間實際上是線性映射的空間。比如f:V	omathbb{R}是線性映射,其中V是矢量空間。表達式f(x)其實可寫成x(f),這是因為線性映射本身與它的參數其實是一一對應的,即矢量空間中的x是函數空間中的f的線性映射,這樣的函數空間V^*稱為V的對偶空間。這兩個空間是孿生兄弟,對偶的對偶為其本身,V^{**}=V。有限維矢量空間V自然是有基底的,比如mathbb{R}^n的標準基底為e_1=(1,0,0,cdots),e_2=(0,1,0,cdots),cdots。同樣,V^*也有基底{e^i},它與V的基底{e_j}滿足關係e^i(e_j)=delta_{ij}

註:C語言中a[1]和1[a]都是合法的C語言語法,且等價,這個語法估計是數學家設計的,簡直就是對偶空間概念的絕佳應用實例。

如果把對偶空間納入進來,則張量可定義為如下多線性映射
L:underbrace{V^*	imes V^*	imescdots	imes V^*}_r	imes underbrace{V	imescdots	imes V}_s	omathbb{R}
其中有r個來自於V^*的參數(函數為參數),s個來自於V。這樣的一般張量稱為(r,s)型張量,其空間記為T_s^r(V)。 注意:多線性映射指的是固定其它參數後,單就每個參數而言是線性映射,比如f(x,y)=xy是雙線性的,但f(x,y)=x^2不是。

舉幾個例子。

1. 矢量空間V是(1,0)型張量空間T_0^1(V),即每個矢量vin V是一個(1,0)型張量,它將線性映射fin V^*映射到mathbb{R},也就是前面v(f)的寫法,實際是f(v)的意思。

2. 對偶空間V^*為(0,1)型張量空間T_1^0(V),即每個線性映射fin V^*是一個(0,1)張量。這個好理解,即線性映射L:V	omathbb{R}

3. (1,1)型張量為方陣,這是因為對任意(1,1)型張量tin T_1^1(V),由定義,它是多線性映射V^*	imes V	omathbb{R},於是t(cdot,v)是一個從對偶空間V^*mathbb{R}的線性映射,而V中的每個矢量都可視為線性函數的線性函數,即t(f,v)本質上對應於線性映射V	o V,於是也對應於方陣。反過來,對於一個方陣A,它也可視為矢量空間VV的線性映射,考慮表達式(Av)cdot u,它由一個線性變換運算Av和一個點乘組成,得到的是一個實數,點乘第一個操作數是一個線性變換,第二個操作數是一個矢量,直接可看出它本質上就是V^*	imes V	omathbb{R}

那麼,對於一個方陣而言,它的各項與張量的多線性映射定義有什麼實際的聯繫呢?答案是它們只不過是張量在基底下的係數(坐標)。若選定了V的基底{e_i}V^*的基底{e^j}可唯一確定,於是(r,s)型張量的基底為{e^{j_1}otimes e^{j_2}otimescdotsotimes e^{j_r}otimes e_{i_1}otimescdotsotimes e_{i_s}},假如V是n維的,則基底元素共有n^{r+s}個。

比如,方陣相當於(1,1)型張量,若V=mathbb{R}^3,它的基底為平常的標準基底e_1,e_2,e_3,其對偶空間left(mathbb{R}^3
ight)^*也可相應地確定基底e^1,e^2,e^3,於是,所有的張量基底有9個e^iotimes e_j,i=1,2,3,j=1,2,3,它就是一個3	imes 3矩陣。計算時,確定了基底運算的性質之後,剩下的就是矩陣上的操作了。所以,工程上往往不關心基底,默認使用了標準基而已。

由此例也可看出,張量本身不依賴於坐標系,當選定了基底之後,它可具體表示為(一維或多維)數組。

綜上:
1. (r,s)張量實際上是有r個線性函數作為參數,s個矢量作為參數的映射到實數的多線性映射。
2. 矢量實際上是(1,0)張量,它是線性映射的線性映射,即x(f)
3. 線性泛函實際上是(0,1)張量,因為它是矢量空間到實數的線性映射,即f(x)
4. 矩陣方陣是(1,1)型張量,稍微有點繞。
5. 上述提到的等價關係,可理解為一一對應關係,比如,方陣只不過是一堆係數,它對應一個多線性映射。
6. 對非數學專業者而言,理解最困難的部分是,把函數也作為一個對象來討論。
7. 張量只不過是一堆線性映射(線性泛函)和矢量的多線性映射,工程中所用的張量只不過是張量(在張量空間的某個基底下)的係數
8. 上述內容主要來自於Manifold, Tensor Analysis and Application 3rd. 把線性空間,線性映射和對偶空間的一些概念搞清楚了,張量也就很自然了。但是,對於不在乎理論分析的人,知道張量怎麼算就差不多了。一個力學系的老教授可能對計算非常熟練了,但對上述概念卻不一定會很清楚。確實有點繞。

當別人問你張量是什麼時,這應該是一個數學問題,你就說張量就是一類多線性映射,工程中的張量實際上只是係數而已。只不過你要牢記此多線性映射中的參數可以是線性函數或矢量。當別人問一個具體張量時,就完全是一個物理問題了。

關於數學和物理的區別。物理學家往往有很好的直覺,於是有很多經驗性但很管用的結論。而數學家會想辦法將物理學家的想法嚴格化,但結果是,愛因斯坦都不理解相對論了。然而,頂尖的物理學家是需要有很好的數學基礎的,不然僅憑實驗沒法做出更深刻的結論來。對於張量而言,無疑也是來源於物理領域的,數學家則搞出了一套張量分析的理論,到底是誰指導誰,很難說得清。但對於後來者,有了理論的指導,而非僅僅是物理的含義或機械的計演算法則,或許思路會更開闊一些。


https://www.youtube.com/watch?v=f5liqUk0ZTw
如果可以爬牆,這個視頻 講得更直觀有趣一些


從實用的角度來說張量積就是滿足這個 universal property 的東西:

這個說法太數學了?不是這樣的。相反,只有從 universal property 的角度看量子力學選擇張量積來描述複合系統才是自然的。

考慮從兩個系統 A, B 構造整個系統的過程。

我們知道每個系統需要用一個 Hilbert space 來描述:mathcal{H}_A,mathcal{H}_B,現在我們想要描述整個系統mathcal{H}_{AB}。考慮兩個系統沒有關聯的情況,可以發現這個構造phi:mathcal{H}_A	imesmathcal{H}_B	omathcal{H}_{AB}應該是 bilinear 的。我們想要一個最一般的構造,也就是在那樣的 bilinear map 構成的範疇中找具有 universal property 的 object。


上面確實是物理上的想法,數學上可以繼續進行抽象的。我們可以對一般的雙模定義張量積,只需要把上面的雙線性映射換成平衡積( mathbb{Z} -linear B(xr,y)=B(x,ry),B(qx,ys)=qB(x,y)s 的映射)就行了。進一步我們還可以抽象出張量積的性質(結合約束,unit,交換約束),定義張量範疇與上面的辮結構。這麼看來至少相比之下最開始提到的構造是非常具體的吧:)


多重線性函數


好老的問題了,來湊個熱鬧.......



1,矢量空間:

對於一個矢量空間 V ,即定義了其中元素加法和數乘的集合。其中的元素稱為矢量。當然只要滿足矢量空間的定義的集合都是矢量空間,其中的元素可以是:「箭頭」(有向線段),一組數,函數,運算元,之類亂七八糟的東西,只要滿足矢量空間的定義就OK

2,對偶空間:

對於一個矢量空間 V ,我們可以很自然的定義它的對偶空間 V^* ,其中的元素是 VR 的線性映射, omega:V	o R 。我們可以很自然的定義 omega 之間的加法和數乘。所以 V^* 也是一個矢量空間,其中的元素 omega 稱為對偶矢量。

3,張量積空間:

我們剛才考慮了線性映射 omega:V	o R (給一個矢量,出一個實數),發現所有這樣線性映射的集合,可以很自然的定義加法和數乘,故全體線性映射的集合構成了一個矢量空間 V^* 。既然如此,我們不如搞個大新聞,我們考慮多重線性映射 T:V^*{	imes}...{	imes}V^*{	imes}V{	imes}....{	imes}V 	o R (給k個矢量;l個對偶矢量,出一個實數),我們發現這個映射之間也可以定義加法和數乘,於是乎,全體這樣多重線性映射的集合也構成一個矢量空間,記做 V_{k}^l (我們稱其為張量積空間),其中的元素是多重線性映射 T ,給k個對偶矢量;l個矢量,出一個實數。

於是,只要你給我一個矢量空間 V ,我就能很自然地構造出許多的矢量空間 V_{k}^l 來。容易發現我們剛剛所說的對偶空間 V^* 實際上就是 V_{0}^{1} ;而矢量空間 V 可以理解為 V_{1}^{0} (由於 VV^{**} 自然同構)。

例如,考慮二維矢量空間 V ,我們選定矢量 e_{1}^ae_{2}^a 作為基底(上標a是抽線指標,僅僅指明張量類型)。那麼他倆的線性組合的全體就可以張成整個矢量空間 V 。我們現在由它來生成一個張量積空間試試。我們來生成 V_{2}^0 ,利用之前給定的 V上的基底,其基底為: e_1^aotimes e_1^ae_1^aotimes e_2^ae_2^aotimes e_1^ae_2^aotimes e_2^a 。我們用著四個基底就可以張成 V_2^0 。(我們這裡省略了一些內容:多重線性映射的集合作為矢量空間,同構與相應的張量積空間。但這並不影響我們進一步的討論。)

其實這裡我們不僅僅可以考慮張量積空間,我們還可以「生成」V上的外r次矢量空間。全體外r次矢量空間 sum Lambda^r 在楔積 wedge 下構成一個代數,稱為外代數。

4,張量是什麼?

現在來回答張量是什麼:張量是張量積空間 V_{k}^l 中的一個元素,稱為(k,l)型張量。啊咧,你也許會說,這和我通常見到的張量的概念咋不一樣呢?別著急啊,你沒有選定基底啊。

(1)對於 V_{1}^0 ,我們選定一組基底 e_{mu}^{a} ( mu=1,...,n ),我們可以把任意一個矢量表示為: v^a=v^{mu}e_{mu}^a 。注意這裡,基底 e_{mu}^a 是(1,0)型張量(矢量),而 v^{mu} ( mu=1,...,n )是 v^a 在每個基底下的分量,它是n個實數排列成的數組。

(2)更廣泛的,對於(2,1)型張量,我們有 T^{ab}_c=T^{mu
u}_{sigma}e_{mu}^aotimes e_{
u}^botimes e^{sigma}_{c} ,同樣這裡基底 e^{mu}_aotimes e_{mu}^botimes e^{sigma}_{c} 是(2,1)型張量,而 T^{mu
u}_{sigma}T^{ab}_{c} 在每個基底下的分量。他可以看做是 n^3個實數排列成的三維數陣(就好像一個魔方一樣)。

(3)由於基底的選擇是很任意的,在不同基底下的分量也是不同的。當基底改變時,新老兩組基底下的分量(一堆數)當然是有一定關係的。它們之間滿足一定的變換規律。

例如: T^{mu
u}=frac{partial x^mu}{partial y^alpha}frac{partial x^
u}{partial y^eta}T^{alphaeta} ,於是乎,張量在給定基底下也可以被定義為:滿足某種變換規律的一組數。這些數可以寫成一豎行就是一階張量;寫成一個二維數陣就是二階張量;寫成三維立體數陣就是三階張量......

5,哪來的矢量空間?

剛剛說了,你給我一個矢量空間,我就可以利用它定義一堆張量積空間。那麼一開始的矢量空間誰給我呢?這個答案是不一定的,這取決於你應用的場合。不過在物理學中,有一種矢量空間是值得關注的。即,流形 M 上的切空間和餘切空間。

給定一個流形,其上微分結構可以自然誘導出兩個矢量空間:切空間,和它的對偶空間餘切空間。切空間是流形上曲線的等價類(在該點關於曲線參數的導數相同)組成的集合,即商空間 T_xM=Gamma/sim ;餘切空間 T_x^*M 是商空間 F_x/H_x ,其中 F_x 為流形x點的光滑函數芽的集合, H_p 為x點關於局部坐標一階偏導數為零的光滑函數芽的集合。

簡單的說流形 M 上每點都對應著兩個矢量空間:切空間 T_xM (源於流形上的曲線);餘切空間 T_x^*M (源於流形上的函數)。這樣我們就可以把關於多重線性代數的東西全部「搬」過來了。我們可以自然的生成流形每點對應的張量積空間。

6,張量叢和張量場:

流形 M 上每點都對應著由切空間和餘切空間「生成」的張量積空間,我們可以由此定義(k,l)型張量叢的概念,即流形上所有點對應的張量積空間的並集 E=igcup T_k^l ,它可以被自然的定義成一個微分流形。叢流形 E 與底流形 M 之間存在著自然的投影映射 pi:E	o M ,它把叢流形 E 中一點(一個張量)投影成對應流形上的一點,三元組 [E,pi,B] 構成一個纖維叢。類似地,我們也可以通過在餘切空間上做外代數,得到r次外形式叢。

局域截面 sigma:U	o EUsubseteq M ),即為流形上的張量場。通俗的說,就是流形上每點「欽定」一個(k,l)型張量,就可以構成一個(k,l)型張量場了。給定流形 M 上的局部坐標系 psi:U	o V ,我們可以利用它給出該區域中切空間和餘切空間的坐標基底,於是張量便可以用「一堆數」來描述了。同樣我們也可以給定另一個坐標系,那麼張量在兩組坐標基底下的分量就可以按照相應的變換規律去變換了。

7,張量與不變數:

張量在物理中很重要的作用就是刻畫不變數。

物理學要求物理學規律不會隨著觀測者的變化而變化,我們可以把某些物理學定律寫成一個張量等式,例如: 
abla^{a}F_{ab}=-4pi J_b 。儘管觀察者測量出的數值(分量)可能不同,但物理學的規律是相同的(張量等式成立,只是選了不同的基底展開而已)。

簡單的說啊,這都是由一個矢量空間引發的血案啊。


@andrew shen 的答案很好,對大部分物理學習者來說夠用了。但是坐標變換的視角並不是萬能的,諸如

如 A.Zee 書中所說: A tensor is something that transforms like a tensor! 一個量, 在不同的參考系下按照某種特定的法則進行變換, 就是張量.

這樣的定義,只適用於物理中大量使用的時空中的張量場,或者說以時空為底流形的張量叢,並且其纖維還得是時空的切空間或餘切空間及其直積(簡單說就是得是時空指標,常記為希臘字母mu, 
u, 
ho, dots,而內部自由度比如規範指標就不適用)。在做許多別的自由度的張量分析的時候,或者說跟時空中的場沒關係的時候(比如 tensor network),這樣的定義就不適用了。

個人覺得,適用性比較廣泛的定義還是所謂的多線性映射。我記得梁燦彬就喜歡用這個比喻,張量就是一個機器,有幾個槽,你用矢量(可以是流形上的切矢余矢,也可以是別的空間的矢量)填滿這些槽,它就產出一個數。唯一的限制就是產出的這個數對每個槽的矢量的響應都是線性的。

回到涉及坐標變換的張量場,坐標變換的性質實際上來自於矢量的變換性質以及張量的線性。由於張量機器產出的結果顯然是個標量(不隨坐標變換而變),所以放入機器的矢量會怎麼變換,這部機器就必須跟著線性地變換。所以我通常把張量的變換性質看做是其多線性的一個導出性質,而不是其根本。


從泛性質,也就是Abstract nonsense的角度來看張量的話,
給定一個環A, 下面都考慮其上的模:
對於給定模N,考慮一個"函子"T(M)=Motimes_A N,(M是A模)
我們知道其實對於任意的A模P,考慮U(P)=	ext{Hom}_A(N,P),
總是有 	ext{Hom}_A(T(M), P)=	ext{Hom}(M,U(P)).
所以這裡T就是U的左伴隨函子。

比如我們看一個域K上的線性空間V的張量代數T(V),
就是從K線性空間到K-代數範疇的一個函子,將V映成最一般的包含V的代數。
當然張量代數就是遺忘函子的左伴隨。

舉例個最簡單的例子,由於Aotimes_A M	o M有個唯一的同構,張量在這裡就可以起到一個「擴張」的作用,比如考慮mathbb{R}otimes_mathbb{R}mathbb{C}simeq mathbb{C}, 就可以起到把實數域的問題擴張到複數上的作用。


看過了大家的回答,感覺Andrew Shen的回答很物理,"A tensor is something that transforms like a tensor! " 確實是物理學家對待張量的實際做法。之後更數學些提到了張量是線性變換的概念,但是沒有更深入下去。 李旻昊的回答簡潔:多重線性函數,確實是張量的現代定義,但是沒有闡釋。這裡把張量的現代定義闡釋一下,這種定義方式更直接、更清晰一些。

舊的物理書中常定義張量為一些帶下標的對象的集合,這些對象按照特定的方式變換,變換規則可以藉助下標寫出。但是這種定義並不能提供更多的洞見:究竟張量是什麼。特別地,這種定義帶來兩種誤解:其一,張量的定義由它的變換性質來定義(怎麼變),讓人難以捉摸這個實體本身(是什麼)。其二,張量由分量來定義,而不像是一個脫離基底存在的實體。物理學家們一直用張量的分量形式計算,很少區分張量和矩陣。誠然分量形式運算起來很方便,但是不能對運算的對象有整體的把握。

現代的數學觀點定義:張量是多重線性函數T(v_1,v_2,...,v_r),輸入r個向量,輸出1個數,r稱作張量的階數。多重線性是指張量對於每個參數都是線性的,對於單個參數就是:T(u+c v) = T(u)+cT(v),其中u,v是任意向量,c是任意數。多重線性是張量的核心性質,張量的舊定義(按變換方式定義)、張量的分量形式(如2階張量的矩陣表示)、我們熟悉的張量的諸多性質,都可以從多重線性這一條推出。

一、 張量與張量分量

一言以蔽之,張量的分量就是張量作用在相應的一組基矢上的值。例如,二階張量T的一個分量:T_{xx} = T(hat x, hat x)hat xx方向基矢量。

下面以 Levi–Civita 張量為例,解釋張量與張量的分量的關係。Levi–Civita 符號 epsilon_{ijk} 通常只被看作數學上的方便。但實際上它是 Levi–Civita 張量的分量。

定義三階張量 epsilon (u,v,w) u,v,w三個矢量張成的平行六面體的有向面積:
epsilon (u,v,w) = (u	imes v)cdot w
易見滿足它多重線性,故而是一個張量。輸入三個矢量,輸出一個數。

取基矢量 hat x, hat y, hat z ,為方便記作 e_1, e_2, e_3
定義三階張量的分量
epsilon_{ijk} = epsilon(e_i,e_j,e_k)
容易驗證它就是原始定義的 Levi–Civita 符號 epsilon_{ijk}

以上例子告訴我們:

1. Levi–Civita 符號不僅是數學上的方便,而且是 Levi-Civita 張量(體積張量)的分量。epsilon_{ijk}的幾何解釋是e_i, e_j, e_k張成的平行六面體的有向體積。

2. 張量的分量就是張量作用在對應的一組基矢上的值。

3. 張量本身不依賴於任何基矢,但是張量的分量直接依賴於基矢的選擇。epsilon張量計算的是平行六面體的體積,顯然不依賴於基矢。

二、張量分量的用處

張量的多重線性的一個重要後果是:給定向量空間的一組基,如 {hat x, hat y, hat z} , 一個張量T完全由張量的分量,也即張量作用在這組基上的值決定。

具體以一般的二階張量為例,計算二階張量T(u,v), u,v 為任意矢量。

u = u_i  e_i, v = v_j e_j (Einstein 求和約定)
T(u,v) = T(u_i e_i, v_j e_j) = u_i v_j T(e_i,e_j) =u_i v_j T_{ij}

第二個等式是由於多重線性,第三個等式用到了張量分量T_{ij}的定義。

注意到張量的舊定義中,上述結果是定義的一部分,寫成矩陣的形式更加熟悉。

三、張量分量的變換

以一般的二階張量為例,解釋張量的現代定義如何推導出張量分量的變換規則。而在過去張量分量的變換規則被視為張量的定義。

我們從舊基矢 {e_1, e_2, e_3} 換到 新基矢 {e_1:
e_i

基矢的轉換不影響張量T,但影響張量的分量。例如:
T_{i

這就是二階張量的變換規則,也是二階張量的舊定義。新定義下這是張量的多重線性和張量分量定義的推論。

以上變換性質可以簡單推廣到r階張量的情形。

四、張量與矩陣

張量是多重線性函數,矩陣是張量在一組特定基矢下的表示。

仍以一般二階張量為例,給定一組基矢 {hat x, hat y, hat z} ,將張量的所有分量寫成矩陣形式:

[T] = left(  egin{array}{ccc}   
           T_{xx}   T_{xy}   T_{xz} \
           T_{yx}   T_{yy}  T_{yz} \
           T_{zx}   T_{zy}  T_{zz}
  end{array}  
ight)

張量作用在任意矢量上的運算可以用矩陣寫作:

T(u,v) = (u_x    u_y   u_z)left(  egin{array}{ccc}   
           T_{xx}   T_{xy}   T_{xz} \
           T_{yx}   T_{yy}  T_{yz} \
           T_{zx}   T_{zy}  T_{zz}
  end{array}  
ight)  left(  egin{array}{c}   
           v_x \
           v_y\
           v_z
  end{array}  
ight)

滿足通常的矩陣乘法。張量的矩陣表示大大方便了張量的運算。

需要強調的是,張量T的矩陣表示是依賴於所選的基矢的,而張量T作為多重線性函數是個抽象的實體,本身不依賴於基矢。

參考文獻:
N. Jeevanjee - An Introduction to Tensors and Group Theory for Physicists


給一個自己在另一個類似問題里的回答:

二階張量怎麼理解? - 知乎用戶的回答

最近做各向異性損傷模型的時候對張量有了一些更新的認識,以後有時間來補充一點吧。


電動力學課上,胡友秋老先生:「張量就是在不同坐標系下都保持不變的物理量。」(誤


這個問題曾經困擾了我多年,從剛進入高中的時候就想弄明白這個東西是什麼。
為了看了不知道多少書,先是翻數學手冊,一下就被張量用坐標變換定義的東西給嚇傻了,只能自欺欺人的告訴自己「零階張量是數,一階張量是向量,二階張量是矩陣,三階張量是立體矩陣……」但是,那是什麼還是不明白。
後來又買了很多書,UTM的張量分析,各種微分幾何的書什麼現代幾何學,陳省身的微分幾何,甚至在朗道的場論裡面想找到一點有物理意義的理解……可惜,失敗了。我還是不明白那是什麼。我的朋友給我講,但是他一來就直接上就講切空間餘切空間的……把人會搞的更蒙。
後來高二的一天,突然間就瞬間想通了,當時不過是在飯後的散步中。這件事告訴了我,積累的重要性,也許一個東西,你看很多書後還是沒感覺,可是它也許已經在你的潛意識裡了,只需要一個觸發,以及時間的沉澱……突破這個後,再看微分幾何也不再是天書了。
怎麼說了這麼多題外話……我就大致說說我的怎麼理解的。
多 線性 代數
線性代數更本質的它是有線性變換的fleft( x 
ight) ,而線性變換本身也是可以形成一個線性空間的。這大概就是對偶空間的概念。最簡單的例子的還是這樣對於空間V向量a,定義線性變換aleft( x 
ight) =acdot x這樣一個自對偶,於是所以這樣的aleft(  
ight) 組成了一個新的空間V^{ast } ,這兩個空間是同構的,V^{ast } 也有自己的基底等等。由於這兩個空間的向量對於坐標變換的時候表現是相反的,所以被叫成逆變和協變是這個原因。
好了,現在再說張量是什麼「東西」我們用e^{i} ,e_{i} 表示兩個空間的基底,一個張量也有基底,但是它的基底什麼「東西」都不是,但可以寫成這樣e^{i_{1}}otimes e^{i_{2}}otimes e^{i_{3}}otimes ......e_{i_{1} } otimes e_{i_{2} } otimes e_{i_{3} } otimes ......
也就是說,它是好幾個向量這樣張乘起來的。所以多線性代數這一點就體現出來了。
如果我要變單獨哪個向量,其他的不動,那麼它的變化方式就想一個向量一樣……當然還有一種多重線性函數的定義,這個也很好,很多書上有,你可以自己去看……
非常抱歉,我覺得這些東西真的是只可意會無法言傳,要說清楚我也感到無力。所以給一個建議是書看多了自然就會慢慢有感覺,或者,多看幾本書……


在學到tensor之前,你總該學過線性代數了吧,總該知道vector和matrix了吧。vector是一維的,matrix是二維的。而tensor是這些的泛化,用rank來表示。rank = 0的時候,就是標量,rank = 1是vector,rank = 2是matrix,rank &>= 2就沒有自己的名稱,都用rank N tensor來說了。


貼個水木數學版以前的回答,核心精神還是歸結為多線性映射

張量跟向量一樣,也是某個特定線性空間的元素

區別的地方在於,這個特定線性空間是用若干線性空間通過張量積操作生成的

因此你需要知道的其實是張量積,而張量積在概念上並不複雜,在一定程度上是
對標量積操作的一般化,即完全自由的雙線性運算

通常的標量積 A·B 對操作數 A 和 B 也是雙線性的,但是要受到運算結果必須是
一個標量的約束限制。如果你把這個約束去掉,那就是張量積了


大概說說我的理解:

首先,第一,張量是多維數組,是向量和矩陣的擴展。當然這等於什麼都沒說,因為只說明了張量是如何表示的,並沒有說明張量是做什麼的,並且為什麼要這麼表示。

所以,張量是做什麼的呢?要理解這個,首先你要有基本的線性代數知識:包括向量空間、線性變換,對偶空間等。
我們知道線性變換是一種變換,也可以理解為映射,只是有線性的這個特點。所謂線性就是說:
假設有一個變換T:V
ightarrow W
T(x+y)=T(x)+T(y)
alpha T(x)=T(alpha x)
對任何向量x,yin V和標量alpha成立

這裡可以看到,T是從向量空間V到向量空間W的映射。其實張量也是一樣,是一種映射,只不過與一般的線性映射不同的是,張量是從多個向量到標量的映射。如果限定為實數域的話,就是:
T:V_1	imes  V_2	imes  ...	imes V_p 
ightarrow R
這樣的一個映射。
這還不夠,張量還有一個很重要的性質,那就是多重線性。簡單來說就是,如果把上述V_1V_p中任意p-1個的取值固定,使得T變成從剩下的那個V_kR的映射,那麼這個映射應該是線性的。

所以,張量是一個多重線性的到標量的映射,其階數等於上面的p。而一階張量就是事實上就是線性泛函。

那麼為什麼可以表達成多維數組呢?這又要從張量空間的維度說起。知道對偶空間的人都明白,張量既然是個這樣線性變換,那他肯定也構成一個向量空間。這個向量空間V的維度是多少呢?
dim(V)=dim(V_1)	imes dim(V_2)	imes ...	imes dim(V_p)
為什麼這麼說呢?因為對每個向量空間V_k,我們都有一個對偶空間V_k,代表所有定義在V_k上的線性泛函。在有限維度的情況下,V_kV_k的維度相同,並且我們能在V_k找到對應的一組基(e^k_{j}), 1leq jleq dim(V_k)

可以證明,如果在每個V_k各取一個基,對總共p個這樣的基求張量積,
e^1_{j_1}otimes e^2_{j_2}otimes ...otimes e^p_{j_p}
所有這樣的張量積組成的集合是V的一組基。於是這組基的總數,即V的維度,就是每個V_k的維度的乘積了。

學過線性代數都知道,只要知道空間中一組基,就可以用他來唯一的表示任何一個點。因此,既然我們能找到V的一組基,那麼接下來的事情就是用這組基來表示這個某個張量T了,無非就是一個基對應一個坐標而已。這樣一來總共需要的坐標數量也就等於
dim(V)=dim(V_1)	imes dim(V_2)	imes ...	imes dim(V_p)
所有坐標可以被表示為一個p維數組,其中第k維的長度等於V_k的維度。(注意數組的維度等於張量階數,跟張量或V_k的維度是不同的)

至於逆變和協變,那就是指在坐標變換時的特性了,這裡就不多說了。


可以考慮類比 有的物理量可用一個數表示 這是標量 有的物理量需要三個數表示 這是向量 進一步 有的物理量 三個數不足以表示 需要九個數 如一點的應力狀態 這就是二階張量 我比較傾向於從物理意義來理解概念 盡量避免繁雜的數學表述


張量就是同時描述N個屬性,把這些屬性寫在一塊兒;每個屬性有多個自由度。


tensor 就是一個在多個維度上要與其他tensor(or scalar)糾纏的傢伙。


這個問題只憑直覺搞不清楚,還是找本多重線性代數的書邊看邊算吧. 張量表示方法和符號也不唯一,比如張量可以認為是個多重線性映射,也可以從形式不變觀點來理解. 梁燦彬老師有一個「張量面面觀」的比喻.


推薦閱讀:

你碰到過的最難調試的 Bug 是什麼樣的?
電腦取隨機數是什麼原理,是真正的隨機數嗎?
CPU 能否和內存集成在一起?

TAG:數學 | 計算機 | 物理學 |