我必须在 b = A*x 中求解 x,其中 a 是稀疏的。这适用于 Matlab 的 mldivide:x = A \ b。由于我将不得不对非常大的 A 使用迭代算法,因此我目前正在测试 Matlab 的迭代算法,特别是 bicgstab:
[L, U] = ilu(A, struct('type', 'ilutp', 'droptol', 0.0000001, 'udiag', 0));
[delta2, flag, relres, iter] = bicgstab(A, b, 0.0000001, 2000, L, U);
基本上,这适用于使用 randn(...) 生成的一般向量 b。但它不适用于我的问题中的向量 b 。在这种情况下不起作用意味着:它执行一次或仅几次迭代并返回标志 1,表示它没有在允许的迭代次数内收敛。与 x = A \b 的解相比,返回的向量是错误的。
向量 b 和矩阵 A 的值在很大的幅度范围内(大约 1e10),矩阵 A 是一个一般的稀疏矩阵,维度大约为 2000x2000,条件大约为 1e14
我目前唯一的想法是更改矩阵后面系统的物理单位,使大值变小,小值变大。
我知道关于这个问题的信息很少,但我很乐意提供任何提示,尤其是如何找到有关该问题的更多信息。