国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Eigen建立稀疏矩陣和迭代求解非對稱稀疏矩陣

2021-11-29 22:02 作者:線代制霸  | 我要投稿

定義稀疏矩陣:

?

稀疏矩陣num行num列

SparseMatrix<double> A_sparse(num,num);

?

稀疏矩陣需要一個儲存其元素所在行列位置和元素值的Triplet類型的變量,用std::vector儲存起來:

std::vector<Eigen::Triplet<double>> tripletlist;

?

用push_back把行列信息和對應(yīng)值填入tripletlist中

for(int?i?= 0; i?!= num; ++i) {

? ? ? ? tripletlist.push_back(Eigen::Triplet<double>(i, i, i+1));

? ? ? ? b(i)?= i?+ 1;

? ? }

? ? for(int?i?= 0; i?!= num; ++i) {

? ? ? ? for(int?j?= 0; j?!= num; ++j) {

? ? ? ? ? ? if(i?+ j?== num-1)

? ? ? ? ? ? ? ? tripletlist.push_back(Eigen::Triplet<double>(i, j, i*j+1));

? ? ? ? }

? ? }

?

用setFormTriplets將信息填入稀疏矩陣

A_sparse.setFromTriplets(tripletlist.begin(), tripletlist.end());

?

將稀疏矩陣轉(zhuǎn)化為壓縮格式

A_sparse.makeCompressed();

?

以上就是建立稀疏矩陣A_sparse的流程

?

下邊開始構(gòu)建求解器,

求解Ax=b,其中x為待求項

?

求解器類型BiCGSTAB,使用迭代方式求解稀疏矩陣,用于求解方陣。

BiCGSTAB<SparseMatrix<double>> solver;

?

設(shè)置殘差

solver.setTolerance(1e-8);

?

計算矩陣的廣義特征值分解

solver.compute(A_sparse);

?

如果分解失敗,這時候

solver.info()!=Success

?

迭代求解x

x?=?solver.solve(b);

?

如果求解失敗,這時候

solver.info()!=Success

?

我們可以這樣來計算相對誤差

其中的.array()指代對向量的每一個對應(yīng)元素單獨處理

例如x.array() / y.array()等同于x./y,對應(yīng)元素相除。

VectorXd error = (A_sparse * x - b).array() / b.array();

double maxerror = -10, maxi;

for (int i = 0; i != error.size(); ++i) {

if(fabs(error(i)) > maxerror) {

maxerror = fabs(error(i));

maxi = i;

}

}

?

完整程序:

Eigen建立稀疏矩陣和迭代求解非對稱稀疏矩陣的評論 (共 條)

分享到微博請遵守國家法律
新宾| 探索| 盖州市| 新邵县| 灌南县| 绥阳县| 襄城县| 永康市| 山东省| 富平县| 墨玉县| 酉阳| 文安县| 贵德县| 棋牌| 揭阳市| 巴林右旗| 凌源市| 石屏县| 余庆县| 个旧市| 大竹县| 临桂县| 秦皇岛市| 渝中区| 田东县| 承德县| 阳春市| 无极县| 博爱县| 玉门市| 习水县| 普格县| 禹州市| 亳州市| 长子县| 宁阳县| 炉霍县| 周宁县| 渑池县| 改则县|