有一个表:
w x1 x2 x3 ...
100 29.4 0.7 100.6
100 34.6 0.9 101.5
... ... ... ...
其中 w是重量,x1,x2,x3是各种含量,各种含量由重量(w)计算
列相加要符合x1=1000,x2=56.9,x3=2000,
怎样计算重量(w)?
请大牛们帮忙设计个算法,不胜感激!
w x1 x2 x3 ...
100 29.4 0.7 100.6
100 34.6 0.9 101.5
... ... ... ...
其中 w是重量,x1,x2,x3是各种含量,各种含量由重量(w)计算
列相加要符合x1=1000,x2=56.9,x3=2000,
怎样计算重量(w)?
请大牛们帮忙设计个算法,不胜感激!
都没有规则性可参考呀,如何写算法呀>>>>>>>>>
有一种语言叫:LINGO,语言风格就跟平常的数学优化模型表达式差不多,它可以很好的解决这类优化问题,强于分析,不用自己设计算法,效率很快,但有可缺点不易程序化,如果你要做成程序化得用C,C++,java,C#写更好,但问题是你要设计一个很抽象的算法,如果数据量少的话比如i<1000可以用穷举,ai以0.005步长递增,加上一些sum值的约束减枝,可以很好解决这个问题。如果你的数据量大,可以考虑用MATLAB中的优化工具包,效果没有LINGO高,但可以生成DLL,更或是c代码,如果你汇编强,可以从里面直接提汇编,加到你的程序中去,如果你不会,可以直接用他生的DLL,这样的一个问题是你又要去学习MATLAB的一些知识,有点成本在这里,但如果你是一个算法迷,你可以在前面说的那个方法,在目前没有更好的办法时,加入一些好的数据结构或是最优堆等,从一些侧面加速算法。你也可以考虑加入一些高斯收敛等算法,从数学逻辑上推出一个等价的简易模型,但这要求你的数学能力。
W A1 A2 ... An
----------------------------
w1 a11 a21 ... an1
w2 a12 a22 ... an2
...
wm a1m a2m ... anm
目标:
W A1 A2 ... An
----------------------------
-- b1 b2 ... bn则现在要求序列X
x1
x2
...
xm使得下列式子成立:
x1*a11+x2*a12+...+xm*a1m=b1
x1*a21+x2*a22+...+xm*a2m=b2
...
x1*an1+x2*an2+...+xm*anm=bn令矩阵A
| a11 a12 ... a1m |
A= | a21 a22 ... a2m |
|... |
| an1 an2 ... anm |X= |x1 x2 ... xm|B= |b1 b2 ... bn|则上述方程可写为求向量X的矩阵方程
AX^=B^
解法多多,最简单的有Gauss消去法。