想要一个合适的标题很难,但我只是想编写一些可以自动计算以下简单数学问题的东西:
a,b,c的平均值为25. b,c的平均值为23.'a'的值是多少?
对于我们人类,我们可以轻松地计算出'a'的值为29,而无需知道b和c。但我不确定这是否可能在编程中,我们编写一个函数,它接受'a,b,c'和'b,c'的平均值并自动输出'a'。
答案 0 :(得分:3)
是的,可以这样做。这样做的原因是,您可以将此处描述的问题类型建模为线性方程组。例如,当你说a,b和c的平均值是25时,那你就是说
a / 3 + b / 3 + c / 3 = 25.
在b和c的平均值为23的约束条件中加上等式
b / 2 + c / 2 = 23。
更一般地说,形式的任何约束&#34;变量的平均值x 1 ,x 2 ,...,x n < / sub>是M&#34;可以写成
x 1 / n + x 2 / n + ... + x n / n = M.
一旦你写出了所有这些约束,求解特定变量的值 - 或者确定存在许多解决方案 - 就缩小为求解线性方程组。有很多技术可以做到这一点,高斯消除和反向传播是一种特别常见的方法(尽管你经常将它交给MATLAB或线性代数包并让它为你工作。 )
一般来说,如果给出一组方程式,计算机可以确定它们是否有解决方案或推导出变量的值,这一点并不能保证,但这恰好是其中一个很好的例子。形状的约束使问题适合于精确的解决方案。
答案 1 :(得分:1)
好吧,我已经想出了一些事情。要直接按照标题回答问题,可以在编程中表示平均值。 1种可能的方法是创建一个地图数据结构列表,它将集合集合存储为key
(例如“a,b,c”),而集合的平均值将是value
(例如,25)。
提取密钥并用逗号分割其字符串,存储到列表中,然后将平均值乘以列表大小以得到总数(例如25x3和23x2)。这样,就不会丢失任何语义信息。
至于我问这个问题的背景,对问题的更恰当的描述是“给定一组不同变量组合的平均值,是否有可能找到每个变量的值?”答案是公开的。我无法弄清楚,但下面是一个尝试描述逻辑流程,如果要编写代码:
将列表(来自第2段)以所有可能的组合相互匹配,以检查列表是否包含另一个列表中的所有元素。如果是,则减去列表(例如abc-bc)以及值(例如75-46)。如果在减去时我们在集合中只有1个变量,那么我们就找到了这个变量的值。
如果仍然存在多于1个变量,例如abcd - bc = ad,则将值存储为地图数据结构并重复该过程,直到所有可能组合中完整迭代中的减法计数为0的点(例如,交流不能减去bc)。不幸的是,不结束。
通过组合列表(例如,ac + bd = abcd)可以找到进一步的解决方案,以获得更多可能的方法来减去和得出答案。在这种情况下,您只是不知道何时停止尝试,并且组合列表将呈指数级。也许拥有强大相关数学理论的人可能能够证明,在一定次数的迭代中,进一步的添加是无用的,因此应该停止。哎呀,甚至可能负值也有帮助,因此与我之前所说的'ac'不能减去'bd'(得到a,c,-b,-d)相矛盾。这将为计算提供更多组合。
拥有更强计算科学基础的人可以尝试使用templatetypedef建议的内容。