網頁

2023年11月13日 星期一

非線性結構模擬入門(07)完 非線性模擬的計算方式


非線性的模擬問題到底是如何求解的?模擬軟體是進行怎樣的計算?


非線性的問題,並不像線性的問題一樣可以靠單純的四則運算來求解。關於這一點,其實已經在連載的第一篇中簡單地說明過一次了。那麼,說到「到底該怎麼求解呢?」,通常可以靠增分解法來一點點逼近最終希望目標的方式來求得結果。這種手法中最具代表性的,就是許多商用模擬軟體都採用的「牛頓-拉福森(Newton-Raphson)法」。


所以這次,就把「牛頓-拉福森(Newton-Raphson)法」(或簡稱牛頓法)拿出來解釋,並且一起看看非線性模擬軟體是怎樣展開計算的。


在非線性模擬軟體中經常使用的牛頓法


在這裡重新複習一下第一篇中提到的,線性的問題就是去解「一次方程式」。就是:


式1



在這個式子之中,a是常數,如果是給了y,要來求解未知數x的話,單純靠除法就能解出x=y/a的答案。像這樣只要是線性的問題,就能使用四則運算來求解。不過,如果像是式2這樣的二次方程式的話,狀況就不太一樣了。


式2



此時給予y值,要求解x的話,可知x=+/-(y/a)^0.5,顯然已經不是單純的四則運算就能解答了。順帶一提,使用有限元素法來求解,就是在解聯立一次方程式;這在本連載前面的篇幅中已經說明過了。


那麼,說到到底該怎麼去求解這種非線性的問題,通常為了到達最終想求的解,並不是一次解出問題,而是利用增分解法,慢慢降低誤差來一步步求出答案。像這樣子的增分解法的其中之一、被稱為是「牛頓.拉福森法(Newton-Raphson)」的手法,就是非線性分析模擬軟體程式中最常採用的一種手法。說得極端簡單的話,就是從現在已知的地方開始出發,分階段來持續往前計算,然後逼近最終目的,以求得目的的結果。


圖1 非線性模擬中的增分計算概念



增分解法的基本想法/牛頓-拉福森法的概念


也是這樣,接下來要說明一下增分解法的基本想法。


所謂的牛頓-拉福森法,是用數值方式來解非線性方程式的方法之一。原始的方程式如果是可微分的式子的話,使用這個方法可以不必微分就能求解。此外,也可以靠反覆疊代計算,逼近真正的解答值。


作為參考範例,來說明一下牛頓-拉福森法是如何計算根號3這個值的。


在牛頓.拉福森法中,是利用反覆計算求出f(x)=0方程式的解,而各個反覆計算的步驟是由式3來定義:


式3



此處的n為0、1、2、3...等整數。


所以要來計算根號3的話,首先就要解出X-3=0這個方程式的其中一解(正數解)。所以用函數f(x)的方式來思考的話,就是f(x)=X-3。


圖2就是將這個函數作圖出來的樣子。


圖2 用牛頓-拉福森法求出根號3的概念。



這裡就使用牛頓-拉福森法來反覆計算讓f(x)=0的x值。


接下來就要開始反覆計算了。利用這個方法計算時,一開始的初始值非常重要。從中學的數學課本中,我們知道根號3的近似值大概是1.732;但是這裡故意把初始值設成4(x0=4)。


至於f(x)的微分函數則如式4所示:


式4

因此第一計算步驟會是式5所示的樣子:


式5


在這個第一步驟中求出來的答案,實在不能說是很近似正解的數值,因此必須再進行第二步驟。第二計算步驟得到的結果,則如式6所示:


式6


結果雖然大幅靠近正確值了,但感覺還差臨門一腳,所以再進行第三步驟的計算(式7)。


式7



到了第三計算步驟得到的結果,已經非常接近一般常使用的近似值1.73了。換句話說,實用上,反覆計算到這個步驟已經是相當足夠堪用了。以上,就是牛頓-拉福森法的簡單計算概念。


非線性模擬軟體是怎麼執行計算處理的?


不過,就算看過上述的實例計算,不實際更深入模擬的程序還是很難真正理解模擬程式是怎麼計算的。因此接下來還是要簡單說明非線性模擬軟體的內部是怎麼執行計算處理程序的。


這裡則是從式子的觀點來和線性模擬進行比較,並且使用圖3來說明。


圖3 非線性模擬與牛頓-拉福森法



首先從計算途中、再往上追加負載的狀況看起。通常,這會是前一步驟所計算出來的收斂負載。接下來慢慢再往目標負載F施加負載上去。


第一次的計算,就是圖3中最左側的狀態。一開始,就在既知狀態下建立切線剛性矩陣,然後施加目標負載(負載增分)。不過用這個切線剛性矩陣實際下去計算,會得到偏離材料反應的數值,所以只能當作反覆疊代的第一次嘗試計算。此時師加負載與目標負載的差值就是剩餘負載。另外可以從目標負載與切線剛性矩陣算出Δu1。


從這裡開始,就為了要計算增分負載而進入下一個反覆疊代計算的迴圈:修正解答值,求出剩餘負載Δf2,並且使用更新後的切線剛性矩陣,再求出Δu2。此時剩餘負載如果夠小的話,就可以停止反覆疊代計算;但如果判斷剩餘負載還很大的話,就要再進入下一輪的疊代計算。這個反覆疊代的次數越多,應該就會越來越接近正確的解。


話說回來,現實上當然不可能讓這個計算迴圈永遠持續下去。因此模擬軟體就會執行「求出實用上沒有問題的解答就夠了」的處理。一般所謂的「解答已經收斂」,簡單來說就是「已經算出實用上精度很足夠的解答」了。


如何指定最終的目標負載要用多少的增分來計算


在模擬軟體的使用者介面(UI)中,能夠指定最終的目標負載要用多少的增分來計算。而這個增分量,可以利用使用者指定的一定增分量來計算;也可以讓軟體根據收斂狀態來增加增分量或減少增分量來計算。


相對來說非線性程度比較平緩的模擬計算中,不管使用固定的增分或者是可變的增分來計算,事都沒有甚麼問題的;但是如果計算中會出現突然的挫曲線現象等激烈的剛性變化、或者是有非常不穩定的行為,那麼使用固定的增分量來計算就會很難收斂,而在逼近到最終目標負載前,就看到「無法收斂」的錯誤訊息而爆掉,不得不結束模擬的狀況是時有所見。


如果是使用可變的增分,遇到非線性比較強烈的狀況,軟體可以自動縮小增分量(話雖如此,能縮小的程度還有限的),就有比較高的機會不出現錯誤而收斂得解。


圖4 (左)Solidworks Simulation的計算步驟設定畫面/(右)MSC Marc的前處理器Mentat的計算步驟設定畫面



如果是可以預測是強烈非線性的模擬計算中,遇到要選擇是固定的增分量或可變的增分量時,筆者會建議使用「一開始採用較小的增分量」的選項。因為增分量過大時,很容易出現反覆疊代計算很多次之後,剩餘負載還是不會變小,計算無法收斂而爆掉的問題。就算僥倖能夠收斂,還是會因為增加了反覆計算的次數,而讓整體模擬的時間變長很多。


相反地,如果將增分值設得太小時,雖然可以降低反覆疊代計算數的問題,但是因為疊代次數太多,結果還是很花模擬的時間。所以設定「恰到好處」的增分量,才能更有效率地模擬非線性的問題。


結語


以上就是本文想要傳達的非線性構造模擬問題的相關基本認識。


正如本文一開始所言,結構模擬、特別是非線性結構模擬,只知道如何設定非線性模擬軟體是很難做好模擬的,而且軟體設定就能會做模擬分析的想法也是不正確的。就保證自己運算模擬的結果而言,也很有必要將本文提及的內容好好的記在心裡。


===


相關系列文章:

沒有留言:

張貼留言