Matlab 病态线性系统

Matlab 病态线性系统,matlab,matrix,linear-algebra,Matlab,Matrix,Linear Algebra,我要解一个线性系统,写为Ax=b A是一个175×175的对称正方形,对角线上有一个(即aii=1),其他条目的范围为0到1(即0) A是非常病态的,不是正定的,它的秩是162,条件数是3.5869e+16 我花了几天时间在MATLAB中解决这个问题,我几乎尝试了我能找到的所有方法,包括\、pcg、bicgstab、bicgstab、cgs、gmres、lsqr、minres、qmr、symmlq、tfqmr 这些方法给了我一些解决方案。但我不知道如何信任它们,或者信任哪种解决方案。是否有确定的

我要解一个线性系统,写为Ax=b A是一个175×175的对称正方形,对角线上有一个(即aii=1),其他条目的范围为0到1(即0) A是非常病态的,不是正定的,它的秩是162,条件数是3.5869e+16

我花了几天时间在MATLAB中解决这个问题,我几乎尝试了我能找到的所有方法,包括\、pcg、bicgstab、bicgstab、cgs、gmres、lsqr、minres、qmr、symmlq、tfqmr 这些方法给了我一些解决方案。但我不知道如何信任它们,或者信任哪种解决方案。是否有确定的标准

如果有人能给我一个我可以信任的解决方案,我将不胜感激。 谢谢

A和b存储在.mat文件中,可以从dropbox链接下载:

这样使用:

荷载(“A.mat”)

荷载(“b.mat”)


x=A\b;

不确定这是否有帮助,但试一试:

基本上,当以下情况由于病态条件而难以计算时:

您可以最小化以下内容

通常为单位矩阵

最后,得到x的以下方程式:

若要添加,通常需要添加一个“超参数”,以控制将问题正则化的程度。因此\Gamma将是一个数字(即0.001)乘以
size(a)

最后一个方程式应该很简单,可以在Matlab中尝试。试一试


注意:这不是答案。实际上,解决不适定问题可能没有唯一的答案。这只是一条路。

你不能用另一个条件更好的线性系统来表达这个问题吗?即使
a
不是满秩,你是否期望有唯一的解决方案?如果不是,你是l想要找到一个最小均方误差的解决方案吗?你有没有试过查看
(a*x-b)*(a*x-b)
的结果,看看误差是否令人满意?@eigenchris谢谢你的回复。我想找到一个最小均方误差的解决方案。(Ax-b)*(Ax-b)有多小被认为是令人满意的?1e-07足够小吗?@Igenchris谢谢。在所有方法中,A\b给出的残差最小(Ax-b)'*(Ax-b)~1e-23。其他人给出了大约1e-7。但是,我怀疑A\b。如果x=A\b,我注意到x的一些条目的abs非常大,这是不应该发生的,因为它与我正在模拟的物理现象冲突。我希望解x的所有条目都应该>=0和@eigenchris!Tikhonov Regulation有点挑剔单位矩阵会惩罚较大的
x
。其他一些正则化技术会惩罚其他一些属性,例如总变差!但事实上,该死的正则化!正如您所指出的,这里使用的正则化是一种改进原始系统条件的技巧。新问题的解决方案无法保证比通过数值求解原始最小二乘问题得到的结果更有意义。@Jubobs的确!我还没有测试OP的矩阵,但当我将此方法与我的方法一起使用时,由于浮点算术限制,最小二乘问题无法解决。因此,这是一种方法。这是
x=a\b
你确实设法解决了一些系统,但你必须问问自己:这是一个新系统(及其解决方案)吗甚至与原始问题有关?如果原始系统的条件不好,我会回到我得到它的地方,尝试重新表述问题,以获得更好的条件系统。@Jubobs确实如此!但有一件事是由于对真实系统的描述不好(例如,FEM质量差)而产生了病态矩阵,但是,有时你会遇到一个不适定的系统,系统的性质和物理特性默认是这样的。如果你想要一个例子,我会做电阻抗断层扫描(EIT),唯一可能的解决方案是正则化(在一般的断层扫描中).我不知道OP有什么,但确实这两种情况都需要考虑。谢谢@AnderBiguri、jubobs和Egenchris,Tikhonov正则化是我想要的解决方案。你们让我开心了!