我们都熟悉解决标准线性系统的许多计算方法
我问的原因是我需要解决以下等式:
更一般地说,关于数组?例如,求解在哪里和是 3D 数组(我也需要在某些时候使用 Radon 变换来执行此操作)。
在此先感谢您,如果您觉得有需要,请随时将我送到另一个 StackExchange。
我们都熟悉解决标准线性系统的许多计算方法
我问的原因是我需要解决以下等式:
更一般地说,关于数组?例如,求解在哪里和是 3D 数组(我也需要在某些时候使用 Radon 变换来执行此操作)。
在此先感谢您,如果您觉得有需要,请随时将我送到另一个 StackExchange。
是的,你做对了,当你升级到 3-D 时它确实可以正常工作。最简单的部分,真的,是内积——只需在等效的展开上做一个标准的点积向量。由于无论如何您都可能连续存储数据,因此您可以就地执行此操作。这甚至适用于复杂的向量空间——只需将复杂的值视为一对实数值。那是因为对于 CG 你需要真正的内在产品.
当您使用一般线性运算符实现 CG(或类似的迭代方法)时,您必须注意的一件事是正确实现线性运算符的伴随。也就是说,人们经常得到,但在实现时会出错。
我建议实施一个利用以下恒等式的简单测试:对于任何符合的和, 所以你要做的是生成和的随机值,分别通过前向和伴随操作运行它们,并计算上面的两个内积。确保它们在合理的精度范围内匹配,并重复几次。
编辑:如果你的线性算子应该是对称的,你会怎么做?好吧,你也需要验证对称性。所以使用相同的测试,只需注意 ---对和应用相同的操作。当然,OP 有一个不对称的算子和一个对称的算子来处理......
事实证明,因为我的系统是对称的和正定的(因为我的线性算子写成),所以共轭梯度可以适应迭代求解这种类型的方程。唯一的修改是在计算内积时——即 CG 中的典型内积计算看起来像或。在修改后的版本中,我们使用 Frobenius 内积,可以通过对 Hadamard(逐点)积的条目求和来计算。IE
我怀疑当我升级到 3D 数组时这会很好,尽管我还没有看到在 3D 数组上定义的 Frobenius 内积(我会假设我可以再次对逐点积求和)。
如果有人知道,我仍然会对更通用的方法感兴趣!