我正在尝试找到一种算法来解决当前问题。我有多个未知的变量(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)变量????
(如果不够清楚,我将编辑问题)
谢谢
对于一般情况,行梯队可能是必经之路。如果每个方程只有两个变量,则可以考虑每个变量都在分区中。每当两个变量一起出现在方程式中时,它们的分区就会连接。因此,从每个变量开始就在自己的分区中。在第一个方程式之后,其中包含F1
和R1
的分区。在第二个方程式之后,该分区被包含F1
,R1
和R2
的分区所取代。您应该具有某种顺序的变量,并且在连接两个分区时,将所有变量放在第一个变量以外的所有变量(第一个变量以外)(第一个变量都不重要决定哪个是"第一个")。因此,例如,在第一个方程式之后,您有R1 = a-F1
。在第二个方程式之后,您有R1 = a-F1
和R2 = a-F1
。每个变量可以由两个数字表示:分区中第一个变量的一定数量倍,加上常数。然后,在最后,您可以通过每个分区,并查找具有代表它们的两个数字的变量。
这是一个提示:您已经定义了一个具有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
如果您手动进行高斯淘汰,则可以看到例如第一行减去第二行
(0 0 0 1 -1 0 0) * (F1 F2 F3 R1 R2 R3 R4)^T = a - a
R1 - R2 = 0
R1 = R2
这意味着R1和R2是您所谓的等效物。有许多不同的方法可以解决系统或解释结果。也许您会发现此线程有用:在Python中是否有用于消除高斯的标准解决方案?