番外——關於張量計算(Index notation)

由於之後的幾篇文章會用到大量的index notation形式的張量計算,所以在這裡做個簡要的介紹。Index notation初次接觸會很不習慣,但是熟悉了之後會發現確實能大大簡化張量計算書寫和計算過程。

首先從簡單的一階張量—向量說起。在一個以{hat{e_1},hat{e_2},hat{e_3}}為底的三維空間坐標系中,我們可以將向量表示為:

underline{v}=v_1hat{e_1}+v_2hat{e_2}+v_3hat{e_3} ,或者用求和公式表示為:underline{v}=sum_{i=1}^{3}{v_ihat{e_i}}

通過求和公式,已經能把之前很長的方程大大簡化了。但是愛因斯坦在大概100年前提出來寫求和符號也好煩啊,就不能把它也省了嗎。於是他想出了一個簡化的方法,後來也被稱為愛因斯坦求和約定(Summation Convention)。其主要內容是:當一個下標在單獨某項中出現了兩次,那麼我們可以省略求和符號,但依然對這單獨某項關於重複下標的所有可能值求和。我語文不好,這句話可能解釋的有點拗口,還是結合上面的向量例子來說明。首先單獨某項可以是任意多項的乘積,只要不出現加減之類的,我們都姑且把它當成是單獨項。在向量的例子中,v_ihat{e_i}就是一個單獨項,而且下標i出現了兩次,因此我們可以省去求和符號,但仍然進行求和運算。即可以將向量表示為underline{v}=v_ihat{e_i}

現在我們可以繼續討論二階張量,一般用雙下劃線表示,如underline{underline{I}}。在三維坐標系中,二階張量有9個分量。比如應力張量:underline{underline{sigma}}=sigma_{11}hat{e_1}hat{e_1}+sigma_{12}hat{e_1}hat{e_2}+sigma_{13}hat{e_1}hat{e_3}+sigma_{21}hat{e_2}hat{e_1}+sigma_{22}hat{e_2}hat{e_2}+sigma_{23}hat{e_2}hat{e_3}+sigma_{31}hat{e_3}hat{e_1}+sigma_{32}hat{e_3}hat{e_2}+sigma_{33}hat{e_3}hat{e_3}

如果向量方程的長度還能接受的話,那二階張量的長度就是災難了(我打了好久啊)。但是我們現在有了Summation Convention可以用。這樣就可以將其簡寫為:

underline{underline{sigma}}=sigma_{ij}hat{e_i}hat{e_j}

這裡乘積項中ij各出現了兩次,所以都要進行求和,對於某一個ij有三項要求和,而i本身又有三項求和,所以一共有3*3=9項。如果對這個過程不熟悉的,可以先寫出帶有求和符號的式子:underline{underline{sigma}}=sum_{i=1}^{3}{sum_{j=1}^{3}{sigma_{ij}hat{e_i}hat{e_j}} } ,然後把求和符號去掉就行了。

運用Index notation時有一些重要的規則需要遵守。如果不注意會造成混亂。

規則1. 同一個下標不能在單獨某項中出現兩次以上。舉個例子,a_{ii}b_{ij}就是沒有意義的,因為i出現了三次。

規則2. 方程的每一項所含的自由下標(free index)必須一致。Free index就是指沒有重複,不用求和的下標。舉個例子:a_{iik}+b_{m}c_{mk}=d_nd_nd_k。這個式子中,只有k是free index,因為它在單項中沒有重複。而每一項都有k,是一致的,所以成立,反之如果某一項缺少k,那麼就不成立。

接下來我們引入一個很有用的量: Kronecker delta(delta_{ij}),它的定義為:

delta_{ij}=1, hspace{.2in} ifhspace{.1in} i=j;delta_{ij}=0, hspace{.2in} ifhspace{.1in} i
e j;

上述定義和單位向量的乘積是一致的。比如hat{e_i}cdothat{e_j}i=j的情況下等於1,在i
e j的情況下等於0,所以我們有:delta_{ij}=hat{e_i}cdothat{e_j}delta_{ij}同樣是有9項,我們可以把它當成是一個二階張量的9個分量,寫成矩陣的形式就是單位矩陣I。這個不難理解,因為單位矩陣是對角線上的項等於1,其他分量等於0。而對角線上的分量就是兩個下標相等的情況。趁熱問個tricky的問題: 那delta_{kk}是多少呢?等於3,因為k出現了兩次,根據summation convention,需要進行求和,即等於delta_{11}+delta_{22}+delta_{33}=3

Kronecker delta有個令人興奮的性質,舉個例子說:a_idelta_{ij}=a_j。語言敘述就是當某一項和Kronecker delta相乘時,如果它有和Kronecker delta相同的下標,那麼可以將這個下標改成delta的另一個下標然後去掉delta。在例子中,a_idelta_{ij}有相同的下標i,所以可以把這個i改成delta_{ij}的另一個下標j,然後去掉delta_{ij},就變成了a_j。這個性質很好證明,只要按照求和展開就一目了然了,之後就可以無腦使用了。

現在終於可以用上述知識解決問題啦。首先從向量點乘開始。

underline{a}cdotunderline{b}=a_ihat{e_i}cdot b_jhat{e_j}=a_ib_jdelta_{ij}=a_ib_i

這裡要說明的是,由於要遵守上述的規則1,表示underline{b}的時候必須要使用和underline{a}不同的下標,比如j。不然下標i就重複出現四次了。

向量本身就不難算,所以上述例子還不能體現Index notation的優越性。下面我們來試試二階張量點乘向量,也可以看成是矩陣和向量相乘:

underline{underline{sigma}}cdot underline{n}=sigma_{ij}hat{e_i}hat{e_j}cdot n_khat{e_k}=sigma_{ij}n_khat{e_i}delta_{jk}=sigma_{ij}n_jhat{e_i}

上式是traction的計算公式,應力張量和表面法向量的乘積,得到的是向量,通常我們把這個結果記做underline{t}=t_ihat{e_i},帶入上式得到sigma_{ij}n_j=t_i

下面就是我覺得index notation最有用的地方了,計算梯度和散度,偏微分。

首先我們引入梯度(gradient)
abla=frac{partial}{partial x_i}hat{e_i}=partial_ihat{e_i} ,注意這裡也用到了summation convention,其實是三項的和。比如對於標量的梯度:
abla u=partial_khat{e_k}u=u_{,k}hat{e_k}=frac{partial u}{partial x_1}hat{e_1} +frac{partial u}{partial x_2}hat{e_2} +frac{partial u}{partial x_3}hat{e_3} ,得到的是向量。這裡說明下一般會將frac{partial u}{partial x_i} 簡寫成u_{,i}這種逗號的形式,同樣遵循上述所說的index notation的所有性質。對於向量的梯度:
ablaunderline{u}=partial_khat{e_k}u_ihat{e_i}=u_{i,k}hat{e_i}hat{e_k}。可以看到得到的是二階張量。所以梯度永遠是將該項的階數升高1階。

再來看散度(divergence)
ablacdot,多了個點乘。標量沒有散度。向量的散度為:
ablacdotunderline{u}=partial_khat{e_k}cdot u_ihat{e_i}=u_{i,k}delta_{ik}=u_{i,i},可以看到得到的是個標量。對於二階張量的散度:
ablacdotunderline{underline{u}}=partial_khat{e_k}cdot u_{ij}hat{e_i}hat{e_j}=u_{ij,k}delta_{ik}hat{e_j}=u_{ij,i}hat{e_j},結果是一個向量。所以散度是將該項的階數降1階。

作為練習可以嘗試計算Laplace operator:
abla^2f=
ablacdot(
abla f)=?


推薦閱讀:

外代數的楔積之間的內積到底怎麼算?

TAG:固体力学 | 工程数学 | 张量 |