这可以分解成一个简单的三个方程式:
a + b = 3
b + c = 5
a + c = 4
我怎样才能最好地估算这些值?注意,我在实际应用程序中会有更多这样的总数和变量。特别是,我想找出是否有可能通过项目清单和杂货收据的总计来有用地估算食品的成本。我假设如果我能算出成本,那么我可以预期的准确度会有所不同,所以额外的是要知道近似值的正确程度以及必须的价格范围。
编辑:我只是没有看到这个得到一个我很满意的答案,因为我没有正确地构建问题。答案 0 :(得分:3)
您正在处理一个线性方程组,以解决它:
http://www.codeproject.com/KB/cs/LinearEquationsSystemSoln.aspx
基本思想是在方程中建立系数矩阵,并使用LU decomposition或Gaussian Elimination来推导变量的值。 LAPACK可以提供帮助。
跟进:LAPACK是一个全功能的库,用于处理所有类型的线性代数(在这方面效率很高,还有基于GPU的库,例如使用CUDA在NVIDIA GPU上运行的CUBLAS)。
如果你处理的是与未知数相同数量的方程式,那么你将处理简单的方程求解解决方案。
基本上,如果你有比方程更多的未知数,那么你将会处理一些叫做欠定系统的东西。同样,您可能正在处理具有更多方程而非未知数的系统(超定系统)。如果您有一个未确定的系统,您可能想要寻找最小规范解决方案(对于一个未确定的系统可以有无数个解决方案)。对于超定系统,我们可能正在寻找所谓的最小二乘解。有关这些解决方案的更多信息,请查看:http://www.netlib.org/lapack/lug/node27.html。这些概念来自线性代数。
答案 1 :(得分:3)
这个问题的一般解决方案是找到Linear Regression/Least Squares solution,你可以得到比未知数更多的方程式。回归统计信息将为您提供有关结果准确性的信息。
答案 2 :(得分:3)
如果变量多于方程式,则会有无数个精确解,并且可能的值将遍布整个地方,而不是有用的近似值。
你需要至少与变量一样多的方程,而substantially不同的方程(只需复制一个方程几次就无济于事)。因此,如果您的方程式少于变量,则它将无效,否则将寻找统计量或线性代数库。
答案 3 :(得分:1)
乐趣:
a+b=3 | a=3-b | a=3-(5-c) | a=c-2 | a=(4-a)-2 | 2a=2 | a=1 | |
b+c=5 | b=5-c | b=5-c | b=5-c | b=5-c | b=5-c | b=5-c | b=5-3 | b=2
a+c=4 | c=4-a | c=4-a | c=4-a | c=4-a | c=4-a | c=4-1 | c=3 |
答案 4 :(得分:1)
对于像这样的方形系统,你可以求解矩阵方程
| 1 1 0 ||a| |3|
| 0 1 1 ||b|=|5|
| 1 0 1 ||c| |4|
在左边提供矩阵是可逆的,因为这是。
但是,一般情况下,您将拥有太多变量或两个变量。由于最小二乘逼近可用,因此两个方程式更好。为了找到最小二乘解,求解x的正规方程A T A x = A T b,其中x =(a,b,c),b =( 3,5,4),A是系数矩阵。请注意,上标T指的是矩阵的转置。
我确信有一些代码可以实现这一目标。
但是,当系统不确定时,即使假设a,b和c是正数,也会有无限多的解决方案。
答案 5 :(得分:0)
如果您使用的是.NET,请查看Microsoft Solver Foundation。 This post提供了如何使用它来求解线性方程的样本。
答案 6 :(得分:0)
对于价格必须在的范围,请在您喜欢的数值代数系统中使用Linear Programming求解器。你的平等约束是收据中的单个方程式;此外,您还需要添加不等式约束,以保证每个价格都是非负的。要查找项目X的可能价格范围,请将目标函数设置为X的价格,并分别求解最小值和最大值。
如果某件商品在不同收据上的价格不同,则此方法可能会失败;线性程序可能变得不可行,或者可能会产生更微妙的影响。