有限元中的Lagrange插值與Gauss積分

有限元中的Lagrange插值與Gauss積分

Lagrange插值與Gauss積分是在學習FEM中不可迴避的兩部分,雖然說是兩部分,其實在Gauss積分中,構造多項式的被積函數時,也用到了Lagrange插值多項式,所以在講關於參數單元剛度矩陣求積分的時候,在數值積分中一起提出。

int_{a}^{b} f(x)dxapproxint_{a}^{b} P(x)dx

以上表達式是說,對於一個比較難以積分的函數f,我們找到了一個與之相似度很高的多項式函數P,用P的積分來代替f的積分,那麼現在的問題就是如何找到多項式P。

那麼,先看第一種關於Newton-Cotes數值積分

Lagrange插值的定義

如果已知n個點的數值,那麼可以構造一個n-1階的多項式,通過待定係數的方式,使得這個多項式在這n個點的值就等於原本函數在這n個點的數值,關於待定係數的求解,如下:

a_{0}+a_{1}x_{1}^{}+a_{2}x_{1}^{2}+a_{3}x_{1}^{3}+...+a_{n-1}x_{1}^{n-1}=f(x_{1})

a_{0}+a_{1}x_{2}^{}+a_{2}x_{2}^{2}+a_{3}x_{2}^{3}+...+a_{n-1}x_{2}^{n-1}=f(x_{2})

... ...

a_{0}+a_{1}x_{n}^{}+a_{2}x_{n}^{2}+a_{3}x_{n}^{3}+...+a_{n-1}x_{n}^{n-1}=f(x_{n})

用矩陣表示這個線性方程組:

left( egin{array}{ccc} 1 & x_{1} & x_{1}^{2} & ... & x_{1}^{n-1} \ 1 & x_{2} & x_{2}^{2} & ... & x_{2}^{n-1} \ ... & ... & ...&...&... \ 1 & x_{n} & x_{n}^{2} & ... & x_{n}^{n-1} \ end{array} 
ight) left( egin{array}{ccc} a_{0} \ a_{1} \ ... \ a_{n-1} \ end{array} 
ight) = left( egin{array}{ccc} f(x_{1}) \ f(x_{2}) \ ... \ f(x_{n}) \ end{array} 
ight)

這裡我用一個二次多項式來舉例吧,給出三個已知點:

(x_1,y_1);(x_2,y_2);(x_3,y_3)

二次多項式為: y=a_0+a_1x+a_2x^2

將三個點帶入二次多項式來確定係數,得到的線性方程組為:

left( egin{array}{ccc} 1 & x_{1} & x_{1}^{2} \ 1 & x_{2} & x_{2}^{2} \ 1 & x_{3} & x_{3}^{2}\ end{array} 
ight) left( egin{array}{ccc} a_{0} \ a_{1} \ a_{2} \ end{array} 
ight) = left( egin{array}{ccc} y_{1} \ y_{2} \ y_{3} \ end{array} 
ight)

係數矩陣A明顯是一個范德蒙矩陣,范德蒙矩陣是可逆的,因此,我們可以直接通過克萊姆法則來求解係數向量,得到係數向量以後,把每一個係數寫成縱坐標y的線性組合,我直接給出我計算的結果,並且只保留y_1的係數:

a_0 =x_2·x_3·(x_3-x_2)·y_1+...

a_1=(x_2-x_3)·(x_2+x_3)·y_1+...

a_2=(x_3-x_2)·y_1+...

另外係數矩陣,即范德蒙行列式的值為:

D=(x_3-x_2)·(x_3-x_1)·(x_2-x_1)

現在可以得到y的表達式:

y=frac{x_2·x_3·(x_3-x_2)+(x_2-x_3)·(x_2+x_3)·x+(x_3-x_2)·x2}{(x_3-x_2)·(x_3-x_1)·(x_2-x_1)} y_1+...

y=frac{x_2·x_3-(x_2+x_3)·x+x2}{(x_3-x_1)·(x_2-x_1)} y_1+...

y=frac{(x-x_2)·(x-x_3)}{(x_1-x_3)·(x_1-x_2)} y_1+.frac{(x-x_1)·(x-x_3)}{(x_2-x_3)·(x_2-x_1)} y_2+frac{(x-x_1)·(x-x_2)}{(x_3-x_1)·(x_3-x_2)} y_3

接下來,記:

f_1(x)=frac{(x-x_2)·(x-x_3)}{(x_1-x_3)·(x_1-x_2)}

f_2(x)=frac{(x-x_1)·(x-x_3)}{(x_2-x_3)·(x_2-x_1)}

f_3(x)=frac{(x-x_1)·(x-x_2)}{(x_3-x_1)·(x_3-x_2)}

則: y=f_1(x)·y_1+f_2(x)·y_2+f_3(x)·y_3

可以容易的看出:

f_i(x_j)=delta_{ij} ,這個意思就是說,在某一個帶入值的點,比如點1,f2與f3都取0,而f1則取1,所以,在所有帶入值的點,多項式插值的結果與原來函數的值是相等的。

這就是Lagrange插值,最後給一個一般性的表達式:

P(x)=sum_{n}^{i=1}[{prod_{j=1(i
e j)}^{n}}frac{(x-x_j)}{(x_i-x_j)}·y_i]

那麼,Newton-Cotes數值積分也就順理成章的被引出了:

Newton-Cotes數值積分將原積分轉化為權函數與原函數值的線性組合

然後,就是FEM里常用的Gauss積分了:

首先談一下我的理解,上面的Newton-Cotes數值積分,是將一個函數轉換為一個多項式,採用的多項式是Lagrange插值多項式,採用的n個點沒有特殊的要求,下面的Gauss積分,就是要對積分點進行確定,對積分點函數值得權函數同時進行確定。

Gauss積分的定義

可以看出,構造的高斯積分的函數雖然階次提高到了2n-1,它的兩項中的第一項仍然為n-1階,並且就是之前的拉格朗日插值多項式,只是在後面添加了一個「輔助項」,輔助項在所有積分點處的值為零,其實為什麼這麼構造我是不清楚的,我是一個沒學過數值分析的本科生,慚愧,但是毋庸置疑的是:

(1)整個多項式的階次被提高到2n-1次,相比於牛頓積分更精確;

(2)利用上述的積分條件(共n個),可以用來確定n個積分點的位置。

確定積分點之後,再確定權函數

今天就寫這麼多吧,作為參數單元內容的補充。


推薦閱讀:

以日本武士刀製作過程談力學概論感想
【餘力學文】— 學貴立志
擴展有限單元法學習的簡單小結
傅科擺

TAG:數學 | 物理學 | 力學 |