原創|其它|編輯:郝浩|2013-01-04 17:47:31.000|閱讀 515 次
概述:.Net的數學算法庫NMath提供計算和存儲結構的稀疏矩陣分解的類的示例
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
.Net的數學算法庫NMath提供計算和存儲結構的稀疏矩陣分解的類,包括
分解一旦結構化后,它可以重復使用,用以計算逆,決定因素和條件。如果需要靜態的方法來計算,也可以用MatrixFunctions類。
以下為一個稀疏矩陣分解的示例:
DoubleMatrix genMat = new DoubleMatrix( "5x5 [ 1.0000 0.5000 0.2500 0.1250 0.0625 0.5000 1.0000 0.5000 0.2500 0.1250 0.2500 0.5000 1.0000 0.5000 0.2500 0.1250 0.2500 0.5000 1.0000 0.5000 0.0625 0.1250 0.2500 0.5000 1.0000 ]" ); DoubleSymmetricMatrix A = new DoubleSymmetricMatrix( genMat ); DoubleSymPDFact F = new DoubleSymPDFact( A ); DoubleVector v = new DoubleVector( A.Order, new RandGenUniform(-1,1) ); DoubleVector x = F.Solve( v );
如果沒有明確構建分解的對象,你可以通過以下代碼完成:
DoubleVector x = MatrixFunctions.Solve( A, v, true );
還有第三個解決方法,就是使用Solve(),如下代碼:
int rows = 8, cols = 8; DoubleComplexVector data = new DoubleComplexVector( cols*3, new RandGenUniform(-1, 1) ); DoubleComplexTriDiagMatrix A = new DoubleComplexTriDiagMatrix( data, rows, cols ); DoubleComplexTriDiagFact F = new DoubleComplexTriDiagFact( A ); DoubleComplexMatrix B = new DoubleComplexMatrix( A.Rows, 10, new RandGenUniform(-1,1) ); DoubleComplexMatrix X = F.Solve( B );
使用分解矩陣來計算逆可以使用Inverse(),計算行列式可以使用Determinant(),示例如下:
int rows = 8, cols = 8; FloatComplexMatrix Lehmer = new FloatComplexMatrix( rows, cols ); for ( int i = 0; i < rows; ++i ) { for ( int j = 0; j < cols; ++j ) { if ( j >= i ) { Lehmer[i,j] = (float)(i+1)/(float)(j+1); } } } FloatHermitianMatrix A = new FloatHermitianMatrix( Lehmer ); FloatHermitianPDFact F = new FloatHermitianPDFact( A ); FloatHermitianMatrix AInv = F.Inverse(); FloatComplex det = F.Determinant();
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網