各計算はCPUに最適化されたインテル® MKLを直接利用することでマルチコア、マルチスレッド、巨大データに対応した圧倒的高速性能を実現しています。
|
Mol による線形連立方程式解法例
// 計算例:密な一般行列で A*X = B を解く
int n = 2000; // 行列のサイズ = 2000 x 2000
// 定数行列
MatrixDenseGeneralDouble B = new MatrixDenseGeneralDouble(n, 10);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= 10; ++j) B[i, j] = 1.0;
}
// 係数行列
MatrixDenseGeneralDouble A = new MatrixDenseGeneralDouble(n, n);
for (int i = 1; i <= n; ++i) {
A[i, i] = 2;
if (i > 1) A[i - 1, i] = -1;
if (i < n) A[i, i + 1] = -1;
}
DateTime time = DateTime.Now;
LuSolver lu = LuSolver.Create(A); // 行列 A を因子分解する。
MatrixDenseGeneralDouble X = lu.Solve(B); // A*X = B を解く
Console.WriteLine("計算時間 = " + (DateTime.Now - time));
MatrixDenseGeneralDouble D = A * X - B;
Console.WriteLine("Norm =" + D.NormE()); // A * X - B を確認
※一般行列以外は計算時間・メモリ使用量を最小にするため複雑・特殊な内部構造を持っています(が使用方法は同じです)。
|
|