我正在尝试找到解决当前问题的算法。我有多个未知变量(F1,F2,F3,... Fx)和(R1,R2,R3 ... Rx)和多个这样的方程式:
> package version source
1 packrat 0.4.8-1 CRAN
其中a,b和c是已知数字。我试图找到这些方程中的所有相等变量。例如,在上面的等式中,我可以看到F2和F3相等,R3和R4相等。
第一个等式告诉我们R1和R2是相等的,第二个告诉我们F2和F3是相等的,而第三个告诉我们R3和R4是相等的。
对于更复杂的场景,是否有任何已知的算法可以找到所有相等的(F和R)变量????
(如果不够清楚,我会编辑问题)
由于
答案 0 :(得分:0)
这里有一个提示:你已经定义了一个包含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?
答案 1 :(得分:0)
对于一般情况,行梯队可能是要走的路。如果每个方程只有两个变量,那么您可以将每个变量视为一个分区。每当两个变量一起出现在方程式中时,它们的分区就会连接在一起。所以从每个变量开始都在它自己的分区中。在第一个等式之后,有一个包含F1
和R1
的分区。在第二个等式之后,该分区将被包含F1
,R1
和R2
的分区替换。您应该以某种顺序获得变量,并且当连接两个分区时,将除第一个变量之外的所有变量放在第一个变量中(它对您如何排序变量并不重要,您只需要某种方式决定哪个是"第一个")。例如,在第一个等式之后,您有R1 = a-F1
。在第二个等式之后,您有R1 = a-F1
和R2 = a-F1
。每个变量可以用两个数字表示:它们的分区中的第一个变量加一个常数。然后在最后,您遍历每个分区,并查找具有相同两个数字的变量代表它们。