【问题标题】:Is there an algorithm for determining the smallest set of solvable linear equations是否有确定最小可解线性方程组的算法
【发布时间】:2017-01-22 08:39:23
【问题描述】:

我有一组包含 W 个变量的 N(N 非常大)线性方程组。

为了提高效率,我需要找到最少数量的可解线性方程组(具有唯一解)。可以假设一组包含Y变量的X方程组在X == Y时有唯一解。

例如,如果我输入以下内容:

2a = b - c
a = 0.5b
b = 2 + a

我想返回方程组:

a = 0.5b
b = 2 + a

目前,我有一个使用一些启发式的实现。我创建了一个矩阵,列是变量,行是方程。我搜索矩阵找到一组全连接方程,然后逐个尝试删除方程,看看剩下的方程组是否仍然可解,如果是继续,如果不是,返回方程组。

对此是否有已知算法,我是否正在尝试重新发明轮子? 有人对如何更好地解决这个问题有意见吗?

谢谢。

【问题讨论】:

  • “可解决”是指“有一个独特的解决方案”还是“有一个解决方案”?技术上“可解”的意思是“有解”,而你的每一个方程本身都有解,所以最小的数是 1。
  • 我怀疑你在谈论方程组的Gaussian elimination
  • 您只处理线性方程吗?尽管a=2, b=4, c=0 可以解决所有三个方程,但您为什么只求解两个方程,而没有第一个方程,您对c 一无所知?我同意@beaker 的观点,可能会使用高斯消元法来解决这个问题。不过,其中的数字可能很棘手。
  • “可解决”是指“有一个独特的解决方案”。为清楚起见,将进行编辑。
  • 有算法。它们不是特别容易理解或实施。从阅读this presentation开始,你会得到一些概念和术语。

标签: algorithm math


【解决方案1】:

简短的回答是“是”,有已知的算法。例如,您可以添加一个方程,然后计算矩阵的秩。然后添加下一个方程并计算等级。如果它没有上升,那么新的等式就没有任何帮助,你可以摆脱它。一旦排名 == 变量的数量,你就有了一个独特的解决方案,你就完成了。有一些库(例如 ColtJAMAla4j 等)可以为您执行此操作。

更长的答案是,要正确执行此操作非常困难,尤其是当您的矩阵变大时。你最终会遇到很多数值稳定性问题等等。我不是数值线性代数专家,但如果你不小心的话,我知道这里有龙。话虽如此,如果您的矩阵很小且“条件良好”(行/列几乎不平行),那么您应该处于良好状态。这取决于您的应用程序。

【讨论】:

  • 这绝不是找到最小的可解集。
  • @n.m.真的吗?假设实际上存在解,则解将位于矩阵的列空间中。我相信以上内容将为该列空间找到一个最小的基础。由于行空间的维度 == 列空间的维度,这不能保证你有一个最小的方程组吗?我错过了什么吗?当然,如果没有解决方案,上面的内容就被打破了,但我认为这不是你要指出的问题。
  • 取这组方程:x1+x2=a1; x2+x3=a2; x3+x4 = a3; ...; x99+x100 = a99; x1-x3=a100;如果您按此顺序添加方程式,您的算法会发现什么?理想的算法应该找到由第一个、第二个和最后一个方程组成的集合。
  • @n.m.有趣的。您提出的解决方案(第一个、第二个和最后一个)确实会有一个独特的解决方案,但它不会是一个“完整”的解决方案,因为 x4、x5、x6、...、x100 的值将是未知的。我没有正式的方式来说明这一点,但它类似于“独特但不完整”的解决方案或其他东西。不确定您提出的解决方案是否是 OP 的有效解决方案。如果是这样,那么是的,我的解决方案不会找到最小集合。但是,如果您还想要一个能够为 all 变量正确分配值的解决方案,那么我认为我提出的建议是可行的。听起来对吗?
  • 就是这样。您首先求解一个小子集,从其余方程中消除其变量,找到另一个可求解的小子集,然后重复。如果您的矩阵庞大且稀疏,它应该比通常的方法更快。在上面的示例中,您可以非常快速地求解整个系统。一旦你消除了 x1、x2 和 x3,x3+x4 就可以立即解决;然后是x4+x5等。其实还有基于这个的方法。
猜你喜欢
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多