擅长:python、mysql、java
<p>我只是在这里吐口水。。。(因为我没有时间来真正的尝试一下)。。。在</p>
<p>你的数据看起来(大致上)在对数图上是线性的(至少,每一段看起来都是。。。所以,我可以考虑在日志空间中进行某种集成。在</p>
<pre><code>log_x = log(x)
log_y = log(y)
</code></pre>
<p>现在,对于每个点,您可以获得log log空间中的斜率(和截距):</p>
^{pr2}$
<p>同样,可以计算截距:</p>
^{3}$
<p>好的,现在我们在log log log空间中有一堆(直线)线。但是,log log空间中的一条直线对应于实数空间中的<code>y = log(intercept)*x^slope</code>。我们可以很容易地集成:<code>y = a/(k+1) x ^ (k+1)</code>,所以。。。在</p>
<pre><code>def _eval_log_log_integrate(a, k, x):
return np.log(a)/(k+1) * x ** (k+1)
def log_log_integrate(a, k, x1, x2):
return _eval_log_log_integrate(a, k, x2) - _eval_log_log_integrate(a, k, x1)
partial_integrals = []
for a, k, x_lower, x_upper in zip(intercepts, slopes, x[:-1], x[1:]):
partial_integrals.append(log_log_integrate(a, k, x_lower, x_upper))
total_integral = sum(partial_integrals)
</code></pre>
<p><sup>你要检查一下我的数学--我已经有一段时间没有做这种事情了:-)</sup></p>