淺談數(shù)值模擬的誤差來(lái)源與解決方法
數(shù)值模擬(或叫做仿真)作為一種研究手段,受到大量研究人員的青睞。應(yīng)用廣泛,大到航空國(guó)防,小到手機(jī)中的電池?zé)峁芾?,眾多鄰域都能?jiàn)到它的身影。既然叫做模擬,那么他就存在誤差,帶來(lái)誤差因素也貫穿于仿真的全過(guò)程。對(duì)于引起這些誤差的因素如果沒(méi)有深刻的理解,很容易得到錯(cuò)誤仿真的結(jié)果,進(jìn)而得出錯(cuò)誤的結(jié)論,那就對(duì)你正在進(jìn)行的研究工作沒(méi)有起到該有價(jià)值,從而就失去了數(shù)值模擬分析的意義。下面將淺析數(shù)值模擬的誤差。
?
第一,模擬軟件。數(shù)值模擬本質(zhì)是對(duì)真實(shí)物理解的一種近似,我們仿真大多數(shù)用的都是商用模擬軟件,使用者只需要點(diǎn)點(diǎn)鼠標(biāo)就可以完成一個(gè)仿真任務(wù),然而殊不知,你每點(diǎn)一下鼠標(biāo),每輸入一個(gè)參數(shù),這究竟意為著什么呢?其實(shí)這些仿真軟件,本質(zhì)上都是對(duì)迄今為止最先進(jìn)數(shù)學(xué)、物理等理論模型,通過(guò)算法轉(zhuǎn)化為一串串代碼植入到了軟件中,再通過(guò)可視化技術(shù),變成了我們眼前看到的操作界面,再配合上植入了各種優(yōu)秀數(shù)值算法的求解器,就可以完成各種仿真任務(wù)求解。那么就迎來(lái)了第一個(gè)誤差,也是最原始的誤差:理論模型誤差,而且這對(duì)數(shù)值模擬來(lái)說(shuō)這幾乎不能避免。這是因?yàn)?,這些學(xué)者在建立理論模型過(guò)程中,往往都是基于一些基本假設(shè)(例如流體力學(xué)、固體力學(xué)中的連續(xù)介質(zhì)假設(shè)以及一些理想化假設(shè)如真空、無(wú)阻、完全彈性),但一般在使用過(guò)程中這個(gè)假設(shè)帶來(lái)的誤差可以忽略不計(jì),但你要是鉆牛角尖的話,誤差還是有的。又如,很多理論模型都是學(xué)者基于特定的物理?xiàng)l件建立的(如CFD分析中的湍流模型,模型中的一些參數(shù)都是在特定的實(shí)驗(yàn)中獲取的,還有一些經(jīng)驗(yàn)參數(shù)),他們并不具有普適性,那么你要是錯(cuò)誤的將該模型應(yīng)用到實(shí)際物理情況相差很大的情況下,勢(shì)必將引起不小的誤差。那么這要如何避免呢?個(gè)人認(rèn)為,各個(gè)理論模型本身的假設(shè)誤差,作為應(yīng)用者來(lái)說(shuō)無(wú)法避免,但是我們要是能對(duì)研究的實(shí)際物理問(wèn)題有深刻的認(rèn)識(shí),同時(shí)對(duì)可供選擇的理論模型也有深刻的認(rèn)識(shí),進(jìn)而選擇最適合我們物理問(wèn)題的理論模型,這樣既避免了導(dǎo)致很大的誤差來(lái)源,同時(shí)還能對(duì)我們的研究工作可以起到事半功倍的效果。數(shù)值算法,上面我們說(shuō)到了求解器,求解器的本質(zhì)就是,我們?cè)O(shè)置完各種邊界條件后,等待求解時(shí),此時(shí)軟件底層已經(jīng)針對(duì)你的物理問(wèn)題建立好了龐大的代數(shù)方程,求解這些代數(shù)方程,就需要用到求解器,而求解器的作用就是用我們數(shù)值分析中學(xué)到了各種求解代數(shù)方程方法(如Jacobi與Gauss-Seidel迭代法)來(lái)計(jì)算這些方程,那么這個(gè)過(guò)程就會(huì)存在數(shù)值迭代誤差,以及計(jì)算機(jī)在求解過(guò)程中還存在截?cái)嗾`差(舍入誤差),這樣結(jié)果就與方程的精確解有一定的偏差。我們作為仿真軟件的應(yīng)用者,理論模型誤差和數(shù)值算法誤差我們都無(wú)法避免,我們只能針對(duì)不同問(wèn)題選擇合適的模型和合適的求解器,以盡可能大的降低他們帶來(lái)的誤差影響。???
第二,幾何簡(jiǎn)化。對(duì)任何一個(gè)工程問(wèn)題,要進(jìn)行數(shù)值模擬時(shí),我們都會(huì)針對(duì)實(shí)際物理情況對(duì)其進(jìn)行計(jì)算域幾何建模。然而,實(shí)際情況往往都非常復(fù)雜,因?yàn)榧?xì)節(jié)太多。人的直線思維往往會(huì)這樣處理:一比一還原實(shí)際的物理幾何模型,這樣得到的結(jié)果一定真實(shí)準(zhǔn)確,理論上確實(shí)是這樣,但實(shí)際卻很難做到,因?yàn)榻裉鞜o(wú)論是從理論上,還是從仿真軟件的發(fā)展來(lái)講,都還沒(méi)有能力處理好每一個(gè)細(xì)節(jié),有時(shí)候這些不必要細(xì)節(jié)還會(huì)導(dǎo)致計(jì)算失敗。因此我們計(jì)算前,要對(duì)物理幾何進(jìn)行一些簡(jiǎn)化和省略,常見(jiàn)的簡(jiǎn)化有這些,三維簡(jiǎn)化為二維,軸對(duì)稱幾何簡(jiǎn)化為二人之一,以及忽略掉對(duì)我們結(jié)果不會(huì)產(chǎn)生影響的幾何特征(這需要工程經(jīng)驗(yàn)),但是注意,如果進(jìn)行了一些不合理的簡(jiǎn)化,容易造成物理問(wèn)題的改變,這樣得到的結(jié)果就不是你原來(lái)想要研究問(wèn)題的結(jié)果了。話說(shuō)回來(lái),既然簡(jiǎn)化了,當(dāng)然誤差就會(huì)產(chǎn)生了,但是,這是真的誤差嗎?其實(shí)不然,我稱這種誤差為偽誤差,為什么這樣說(shuō)呢,第一,其實(shí)當(dāng)我有了大量仿真經(jīng)驗(yàn)和工程經(jīng)驗(yàn)時(shí)會(huì)發(fā)現(xiàn),有時(shí)候二維簡(jiǎn)化可能得到比三維更準(zhǔn)確地結(jié)果,盡管有時(shí)候我們二維分析多數(shù)是為了減少計(jì)算量才這樣做的。第二,我們進(jìn)行數(shù)值模擬,都是帶著為了得到某種目標(biāo)結(jié)果去的,有些幾何上的簡(jiǎn)化,并不會(huì)對(duì)我們想要得到的結(jié)果產(chǎn)生影響,可以忽略,因此這樣產(chǎn)生的誤差不算是真的誤差,是一種偽誤差。雖然幾何簡(jiǎn)化是必要的,但是不合理的幾何簡(jiǎn)化,就會(huì)產(chǎn)生巨大的誤差,對(duì)于后面要說(shuō)的這些因素中,它帶來(lái)的誤差往往是最大的。針對(duì)這一點(diǎn),我們通??梢赃x取幾種簡(jiǎn)化方案(同樣需要豐富的工程經(jīng)驗(yàn)或模仿),與實(shí)際情況進(jìn)行對(duì)比,選取結(jié)果最佳的那個(gè)進(jìn)行進(jìn)一步分析。
第三,網(wǎng)格劃分。劃分網(wǎng)格帶來(lái)的誤差,一般稱為離散誤差。網(wǎng)格質(zhì)量、精度、類型都會(huì)造成離散誤差。這是網(wǎng)格劃分所引起的,本質(zhì)上講,一個(gè)物理問(wèn)題對(duì)應(yīng)的是一組偏微分方程或積分方程(也就是控制方程,例如流體分析中的質(zhì)量、動(dòng)量守恒方程等),求解這些方程的方法就是把對(duì)應(yīng)這個(gè)物理問(wèn)題的偏微分方程,通過(guò)離散方法(有限元、有限差分、有限體積法),在一個(gè)個(gè)單元(網(wǎng)格)節(jié)點(diǎn)上進(jìn)行離散,從而得到一組代數(shù)方程(也叫離散方程),而所有的網(wǎng)格節(jié)點(diǎn)上都有這些代數(shù)方程組,這構(gòu)成了這個(gè)物理問(wèn)題所組成的龐大代數(shù)方程組,再通過(guò)數(shù)值算法就能求解這些代數(shù)方程組。概括來(lái)說(shuō)就是,把連續(xù)域上物理場(chǎng)的量,通過(guò)離散點(diǎn)的物理量的集合代替。所以對(duì)于網(wǎng)格精度,只要我們的網(wǎng)格無(wú)限小,那么要求解的代數(shù)方程組就越多,獲得的解就會(huì)足夠的精確,同時(shí)計(jì)算時(shí)間就會(huì)相應(yīng)的增加,但是我們一般不會(huì)這么做,這會(huì)造成計(jì)算資源的巨大浪費(fèi)。我們一般的解決辦法是會(huì)在未知變量變化很大的地方劃分更多更細(xì)的網(wǎng)格,以捕捉到變量變化梯度。但是到底劃多少網(wǎng)格合適呢?這個(gè)沒(méi)有標(biāo)準(zhǔn)答案,工程上的解決辦法是,進(jìn)行網(wǎng)格無(wú)關(guān)解驗(yàn)證,即由粗到細(xì)分別劃分網(wǎng)格,直到結(jié)果之間的變化率小到可以忽略不計(jì)為止,此時(shí)的網(wǎng)格,在保證計(jì)算資源夠用的情況下,就是精度最高,誤差最小的網(wǎng)格。對(duì)于網(wǎng)格類型,總的來(lái)分有結(jié)構(gòu)化網(wǎng)格和非結(jié)構(gòu)化網(wǎng)格,二維結(jié)構(gòu)化網(wǎng)格都由四邊形組成,三維結(jié)構(gòu)化網(wǎng)格都由六面體組成,視覺(jué)上的表現(xiàn)就是,那種看上去整齊規(guī)范的四邊形或六面體組成的網(wǎng)格就是結(jié)構(gòu)化網(wǎng)格,那種沒(méi)有明顯的規(guī)范性網(wǎng)格,就是非結(jié)構(gòu)網(wǎng)格。不過(guò),隨著計(jì)算機(jī)技術(shù)的發(fā)展,今天非結(jié)構(gòu)化網(wǎng)格被認(rèn)為更有前景,因?yàn)閯澐纸Y(jié)構(gòu)化網(wǎng)格,是一個(gè)極其消耗體力和時(shí)間的過(guò)程。二維網(wǎng)格一般有,三角形、四邊形,三維有四面體、六面體、棱柱、多面體等,對(duì)于同一物理問(wèn)題,不同的網(wǎng)格類型,計(jì)算結(jié)果往往不同。但是,對(duì)于一般簡(jiǎn)單物理問(wèn)題,在保證網(wǎng)格質(zhì)量相差不大的情況下,這種誤差很小,可以忽略不計(jì)。再來(lái)說(shuō)說(shuō)網(wǎng)格質(zhì)量,一般造成誤差很大的是網(wǎng)格質(zhì)量,太差的網(wǎng)格質(zhì)量會(huì)造成數(shù)值發(fā)散,有時(shí)直接導(dǎo)致計(jì)算失敗,但對(duì)今天的求解器來(lái)說(shuō),只要質(zhì)量不是太差,求解器對(duì)質(zhì)量不好的網(wǎng)格魯棒性還是很高的,依然能夠完成求解。但是質(zhì)量高的網(wǎng)格,總會(huì)帶來(lái)更精確的結(jié)果,這是毋庸置疑的。網(wǎng)格質(zhì)量又該如何保證呢?對(duì)于網(wǎng)格質(zhì)量一般我們可以參考網(wǎng)格劃分軟件的各種指標(biāo)(如正交比、縱橫比、翹曲率等),但主要還是靠我們的經(jīng)驗(yàn)。對(duì)于不同網(wǎng)格劃分軟件,網(wǎng)格生成技術(shù)也不同,針對(duì)不同的幾何選擇合適網(wǎng)格劃分軟件,可以大大提高我們的效率和減少網(wǎng)格對(duì)研究問(wèn)題造成的影響。網(wǎng)格劃分其實(shí)是一個(gè)系統(tǒng)性課題,很難一兩句話說(shuō)清楚,還需要多動(dòng)手,多學(xué)習(xí)才能更好掌握其中奧秘,從而服務(wù)于我們要研究的問(wèn)題。
第四,邊界條件、初始條件。邊界條件和初始條件是使我們控制方程有確定解的前提。也就是我們?cè)诓僮鬈浖^(guò)程點(diǎn)擊的各種選項(xiàng)和輸入的各種參數(shù),從而建立起一個(gè)特定物理問(wèn)題的求解模型(例如靜力學(xué)分析中,不同地方加載的各種力和約束,以及像流體力學(xué)分析,進(jìn)出口條件等),這要求我們沒(méi)有打開(kāi)軟件之前就要知道怎么設(shè)置,通常這是由實(shí)際物理?xiàng)l件確定的,有些參數(shù)也需要我們從實(shí)驗(yàn)中獲取。因此,若不能正確的設(shè)置邊界條件就會(huì)導(dǎo)致錯(cuò)誤結(jié)果,容易產(chǎn)生非物理解,有時(shí)甚至?xí)?dǎo)致求解中斷。當(dāng)然,這一點(diǎn)我們是可以完全避免的,正確認(rèn)識(shí)我們的問(wèn)題,做到還原實(shí)際邊界條件,該獲取的參數(shù)從實(shí)驗(yàn)獲得。
第五,結(jié)果分析。當(dāng)你完成仿真之后,會(huì)得到各種各樣的結(jié)果(他們通過(guò)云圖、折線圖、等值線圖等形式表現(xiàn)出來(lái)),如何正確且有效的利用這些結(jié)果,我們稱之為后處理。是否能夠通過(guò)仿真結(jié)果得出正確的結(jié)論,我稱為分析誤差,其實(shí)我認(rèn)為這也是最難的。因?yàn)橐ㄟ^(guò)這些結(jié)果得出對(duì)我們有指導(dǎo)意義的結(jié)論,對(duì)分析人員來(lái)說(shuō),不僅需要知道上面我提到的這些,還需要大量的知識(shí)儲(chǔ)備和工程經(jīng)驗(yàn)積累,也就是認(rèn)知水平。例如在靜力學(xué)分析中,在建立好模型之后,沒(méi)有得出仿真結(jié)果之前,你就要對(duì)仿真結(jié)果有一個(gè)預(yù)判,哪些地方可能是應(yīng)力大地方,是否會(huì)出現(xiàn)應(yīng)力集中,應(yīng)力大致分布是怎樣,這對(duì)于我們得到仿真結(jié)果之后,對(duì)結(jié)果正確性進(jìn)行判斷非常重要,不然你自己都會(huì)對(duì)你得到的仿真結(jié)果存疑,那么仿真的意義又何在呢。其次,你要是沒(méi)有必要的知識(shí)儲(chǔ)備,還對(duì)仿真結(jié)果進(jìn)行分析,那你就很難正確的解讀結(jié)果,很容易得出錯(cuò)誤的結(jié)論,這必然產(chǎn)生誤差。對(duì)于這一點(diǎn),只有分析人員不斷學(xué)習(xí)專業(yè)知識(shí),積累實(shí)際經(jīng)驗(yàn),勤于總結(jié)來(lái)提升我們的內(nèi)功,這也對(duì)于提升我們的研究能力的幫助是具大的。
大家對(duì)于數(shù)值模擬的態(tài)度,容易存在兩種極端,有人說(shuō)數(shù)值模擬不可靠,全是假的,也有人篤信數(shù)值模擬的結(jié)果。但我想說(shuō)的是,對(duì)于任何一個(gè)物理現(xiàn)象都一定存在一個(gè)物理真值,但想獲得它,所消耗的人力、物力、財(cái)力是一般人負(fù)擔(dān)不起的。數(shù)值模擬僅能作為一種研究手段,利用他得到的信息永遠(yuǎn)是有限的,優(yōu)秀的研究,從來(lái)都是要通過(guò)實(shí)驗(yàn)分析和理論分析等研究手段進(jìn)行相互補(bǔ)充的,這樣我們的研究才有價(jià)值,有意義。