【问题标题】:Finding equal variables in non solvable multi-variables linear equations在不可解的多变量线性方程中找到相等的变量
【发布时间】:2017-12-05 18:38:57
【问题描述】:

我正在尝试找到一种算法来解决当前问题。我有多个未知变量 (F1,F2,F3, ... Fx) 和 (R1,R2,R3 ... Rx) 以及多个这样的方程:

F1 + R1 = a
F1 + R2 = a
F2 + R1 = b
F3 + R2 = b
F2 + R3 = c
F3 + R4 = c

其中 a、b 和 c 是已知数。我试图在这些方程中找到所有相等的变量。例如在上面的等式中,我可以看到 F2 和 F3 相等,R3 和 R4 相等。

第一个方程告诉我们 R1 和 R2 相等,第二个方程告诉我们 F2 和 F3 相等,而第三个方程告诉我们 R3 和 R4 相等。

对于更复杂的场景,是否有任何已知算法可以找到所有相等(F 和 R)的变量????

(如果不够清楚,我会编辑问题)

谢谢

【问题讨论】:

  • “更复杂的场景”是指一个方程中有两个以上未知变量的情况吗?
  • 不,所有方程只有两个变量。我试图找到所有相等的 F 变量和所有相等的 R 变量。更复杂的场景意味着数百个方程。
  • 多少个方程,多少个变量? (在您的示例中,变量比方程式更多;这是一个重要的事实)
  • 我可能会得到比方程更多的变量,但我确信方程无法求解。不存在包含相同变量集的多个方程。我永远找不到 Fx 或 Rx 的值。但是我可以找到例如 Fx 是否等于 Fy 和 Fz,这就是我想要实现的。方程和变量的数量取决于我进行一些实验的时间和实验条件。对于受控测试环境,我有 128 个正向 (F) 变量和 128 个反向 (R) 变量和 2200 个方程。
  • 如果没有解决方案,那么目标是什么?听起来你有两个组成部分:最大化相等变量的数量和最大化强制约束。这些通常是相互矛盾的,需要有一些模型来控制这一点。 (示例:没有满足约束:将所有变量设置为 0)

标签: python linear-algebra equivalence


【解决方案1】:

对于一般情况,行梯队可能是要走的路。如果每个方程只有两个变量,那么您可以认为每个变量都在一个分区中。每当两个变量一起出现在一个方程中时,它们的分区就会被连接起来。因此,首先每个变量都在其自己的分区中。在第一个等式之后,有一个包含F1R1 的分区。在第二个等式之后,该分区将替换为包含F1R1R2 的分区。您应该以某种顺序排列变量,当两个分区连接时,将除第一个分区之外的所有变量都放在第一个分区中(如何排序变量并不重要,您只需要某种方式决定哪个是“第一个”)。例如,在第一个等式之后,您有R1 = a-F1。在第二个等式之后,您有R1 = a-F1R2 = a-F1。每个变量可以用两个数字表示:某个数字乘以它们分区中的第一个变量,再加上一个常数。然后在最后,您遍历每个分区,并寻找具有相同的两个数字来表示它们的变量。

【讨论】:

    【解决方案2】:

    这里有个提示:您已经定义了一个包含 7 个变量和 6 个方程的线性方程组。这是一个粗略的矩阵/向量表示法:

     1 0 0 1 0 0 0     F1     a
     1 0 0 0 1 0 0     F2     a
     0 1 0 1 0 0 0  *  F3  =  b
     0 0 1 0 1 0 0     R1     b
     0 1 0 0 0 1 0     R2     c
     0 0 1 0 0 0 1     R3     c
                       R4
    

    如果您手动执行Gaussian elimination,您可以看到例如第一行减去第二行的结果

     (0 0 0 1 -1 0 0) * (F1 F2 F3 R1 R2 R3 R4)^T = a - a
                                         R1 - R2 = 0
                                              R1 = R2
    

    这意味着 R1 和 R2 是您所说的等价物。有许多不同的方法来解决系统或解释结果。也许你会发现这个帖子很有用:Is there a standard solution for Gauss elimination in Python?

    【讨论】:

    • 在 sympy 中,rref() 返回行梯形。如果任何一行只包含两个非零条目,其中一个是 -1 并且不在扩充列中,则表示两个等效变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多