[英]The cost of performing analyzePattern() and factorize() in Eigen library Compute()
我指的是Eigen文檔中的“計算步驟”部分:
在
compute()
函數中,矩陣通常被分解:....
對於這類求解器來說,計算步驟可進一步細分為
analyzePattern()
和factorize()
。
analyzePattern()
的目標是對矩陣的非零元素進行重新排序,以使分解步驟創建的填充更少。 此步驟僅利用矩陣的結構。 因此,該步驟的結果可用於矩陣結構相同的其他線性系統。 ....在
factorize()
,計算系數矩陣的因數。 每當矩陣值更改時,都應調用此步驟。 但是,矩陣的結構模式不應在多個調用之間改變。
計算列排列以最小化填充
- 將此置換應用於輸入矩陣-
- 計算置換矩陣上的列消除樹
- 對消除樹和列排列進行后置排序
數值分解與符號分解交錯在退出時,信息為
= 0:成功分解
0:如果info = i,而我是
<= A-> ncol:U(i,i)恰好為零。 分解已經完成,但是因子U恰好是單數,如果將其用於求解方程組,則將被零除。
A-> ncol:發生內存分配失敗時分配的字節數,再加上A-> ncol。 如果lwork = -1,則是估計的所需空間量,再加上A-> ncol。
我的問題是,我們知道調用analyzePattern()
和factorize()
的相對成本嗎?
這個問題對我很重要,因為我的應用程序具有穩定的矩陣結構,但系數矩陣不斷變化。 示例:在FEM模型中,FEM用戶通常使元素連接保持不變,但始終更改元素尺寸以獲取最佳設計。
因此,如果analyzePattern()
比factorize()
昂貴得多,那么我可以利用這一事實並重寫我的代碼。 如果沒有,我可以堅持使用compute()
函數,並在每次元素大小更改時重新運行analyzePattern()
。
這在很大程度上取決於矩陣的結構。 根據我的經驗,符號部分通常比數字部分便宜,但是,根據對此答案的評論,有時是相反的。 因此,恐怕您只有在替補席上才能永遠不知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.