- 论坛徽章:
- 0
|
回复 41# ssfjhh
其实是很简单的数学。第一步,
F(t,s)的构造,就是考虑到图片和面的比例的差异, 这个差异,这里用对数差的平方,其实就是s/t偏离1的程度来度量的。
之所以用它,是因为s/t>1,还有可能s/t<1. 对数差平方,可以很好描述两个比值的的偏离程度。
另外一个好处,就是这里,有关系z=x*y, 所以 ln z = ln x + lny; 使求解更容易。
理论推导用了简单的微积分,和解方程,你检查一下有没有错误,如果这步错了,后面的公式就不对了。我也再查查。
这个优化解根本不用写程序,就拿最后的那两个式子,就能求解x,y 的值,定出长方体。
如你的例子中,我算了一下,可是结果,很不理想;如下
- >>> s=[19.87/5.57,22.68/6.55,18.37/7.65,19.16/8.13,23.2/13.69,23.2/12.74]
- >>> s
- [3.5673249551166966, 3.4625954198473283, 2.4013071895424836, 2.35670356703567, 1.6946676406135865, 1.8210361067503924]
- >>> lx = 0.25*(log(s[0])+log(s[1])) + 0.375*(log(s[2])+log(s[3]))-0.125*(log(s[4])+log(s[5]))
- >>> from math import exp
- >>> x = exp(lx)
- >>> x
- 3.119198217143163
- >>> ly = 0.25*(log(s[0])+log(s[1])) - 0.125*(log(s[2])+log(s[3]))+0.375*(log(s[4])+log(s[5]))
- >>> exp(ly)
- 2.3033937315879887
- >>> exp(lx+ly)
- 7.184741620947991
复制代码 这个值,和原来的差异很大。原因可能是,你的数据中的长宽高,明显不满足z=xy;
我不知道实际这样的长方体效果如何?
|
|