簡體   English   中英

在Eigen庫Compute()中執行analyticsPattern()和factorize()的成本

[英]The cost of performing analyzePattern() and factorize() in Eigen library Compute()

我指的是Eigen文檔中的“計算步驟”部分:

compute()函數中,矩陣通常被分解:

....

對於這類求解器來說,計算步驟可進一步細分為analyzePattern()factorize()

analyzePattern()的目標是對矩陣的非零元素進行重新排序,以使分解步驟創建的填充更少。 此步驟僅利用矩陣的結構。 因此,該步驟的結果可用於矩陣結構相同的其他線性系統。 ....

factorize() ,計算系數矩陣的因數。 每當矩陣值更改時,都應調用此步驟。 但是,矩陣的結構模式不應在多個調用之間改變。

analyticsPattern()的文檔

計算列排列以最小化填充

  • 將此置換應用於輸入矩陣-
  • 計算置換矩陣上的列消除樹
  • 對消除樹和列排列進行后置排序

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM