无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(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建立稀疏矩陣和迭代求解非對稱稀疏矩陣的評論 (共 條)

分享到微博請遵守國家法律
大石桥市| 阳原县| 马边| 徐州市| 皋兰县| 蒲江县| 涞水县| 界首市| 福州市| 滁州市| 汪清县| 云安县| 桂平市| 鄢陵县| 嫩江县| 伊金霍洛旗| 金门县| 繁峙县| 清水县| 新田县| 博兴县| 满洲里市| 宕昌县| 广昌县| 四川省| 许昌市| 邹平县| 上林县| 泰和县| 盘锦市| 务川| 西充县| 凌海市| 门头沟区| 祁东县| 佛山市| 松桃| 东兴市| 德昌县| 和平县| 石棉县|