【发布时间】:2017-09-11 09:51:12
【问题描述】:
考虑一个欠定线性方程组Ax=b。
我想找到一组向量x_1, ..., x_n,这样它们都可以解决Ax=b,并且它们之间尽可能地不同。
第二部分实际上不太重要;我会很高兴每次调用它时都会返回一个随机解 Ax=b 的算法。
我知道scipy.sparse.linalg.lsqr 和numpy.linalg.lstsq 返回一个欠定线性系统Ax=b 的稀疏解(根据最小二乘),但我不关心解的属性;我只想要Ax=b的任何解决方案,只要我能生成一堆不同的解决方案。
事实上,scipy.sparse.linalg.lsqr 和numpy.linalg.lstsq 应该遵循一个迭代过程,从一个解决方案跳到另一个解决方案,直到他们找到一个似乎是最小二乘法最小值的解决方案。那么,是否有一个 python 模块可以让我在没有特定目标的解决方案之间跳转并返回它们?
【问题讨论】:
-
好吧,这里展示了如何使用 Numpy 计算
A的零空间,然后自己生成随机解决方案,非常简洁。 stackoverflow.com/questions/33614378/… -
scipy-cookbook.readthedocs.io/items/RankNullspace.html 向您展示如何找到矩阵的零空间。零空间列的任何线性组合都由
A映射到零。因此,要获得许多解决方案,请采用零空间的随机线性组合并将它们添加到最小二乘解决方案中。那么,A . (xLS + colsOfNullspace . rand) = A . xLS = b!有了其中许多,您可以使用您喜欢的任何矩阵选择最不同的那些。 -
也许添加更多关于您想要实现的目标的信息。
I would like to find a set of vectors x_1, ..., x_n such that they all solve Ax=b and they are as different between each other as possible.没有解决方案,因为要求彼此不同会增加右侧的偏差。这是一个多目标优化问题,如果不指定这两个目标的优先级,则无事可做。如果您可以将此优先级指定为常数因子,则这是一个简单的凸优化问题(对此差异有一些假设)。
标签: python numpy scipy linear-algebra