0431 平方谷仓
* * * *
拉格朗日计划
* * * *
平方谷仓

农夫张三找人新建了一座谷仓,然而他发现这个谷仓竟是圆柱形时,这使他非常愤怒,因为张三对平方数有一种特别的喜好。

谷仓制造商李四解释说,他造的谷仓一贯如此, 而且不管怎么说谷仓的地基反正是正方形的,不过张三并不接受这个说法,并坚持要拆掉谷仓。

李四灵机一动,又解释说当堆积在谷仓里的谷物顶部会形成一个锥形,其母线与水平面的夹角称为休止角。例如,当休止角$\alpha=30^{\circ}$且锥顶位于谷仓的中心点时,其顶部将是一个标准的圆锥形,而谷仓的直径是6米,从而此时谷仓中被浪费掉的空间约为$32.648388556 m^3$。而当锥顶的位置不在谷仓中心时,其顶部则会形成一个奇特的弯曲斜面,如下图:



用x表示锥顶与谷仓中心点的距离,休止角仍为$\alpha=30^{\circ}$,并用$V(x)$来表示被浪费掉的空间,若$x=1.114785284$(保留到$9=3^2$位小数),则$V(x)\approx36$,此外还有$V(2.511167869)\approx49$,这就好比平方数如谷仓之王一般从谷顶俯瞰。

张三觉得这番胡言乱语还颇为优雅,不过当他更仔细地检验了李四的示意图和计算后又指出,谷仓的半径(而非直径)是6米,且休止角实际是$40^{\circ}$。不过若李四还能找到类似的解,他会愿意保留这个谷仓。

帮李四找出此时所有使得被浪费的空间为平方数的x值,并计算出$\sum x$,结果保留9位小数。

本题难度:



解答

本题题面的说明不甚明晰,实际是在$x\in[0,6]$的范围内求所有能令$V(x,40,6)$为完全平方数的x之和,并将结果舍入至9位小数,其中$V(x,\alpha,r)$表示锥顶与谷仓中心点的距离为x,休止角为$\alpha$,谷仓半径为r时被浪费的空间。

用最基础的牛顿科特斯法作数值积分,再用二分法求解x即可。V的解析式可由锥面方程直接获得,不过步骤繁琐并无乐趣,以下代码直接改编自官网论坛,最终结果是$23.386029052$。

注:因使用scipy作数值积分,以下代码为Python 3。

注2:本题涉及公式是数学系本科《解析几何》、《数值分析》的标准内容。

from math import *
from scipy.integrate import quad

g=lambda u,x: u*(d:=sqrt(u*u+x*x))+x*x*log(u+d)
f=lambda x,p,r:g(-p+(d:=sqrt(r*r-x*x)),x)-g(-p-d,x) 

r=6
t=tan(pi*40/180)
epsilon=0.000000001
res=0
for n in range(20,26):
    a,b=0,r
    va=t*quad(lambda x:f(x,a,r),0,r)[0]
    vb=t*quad(lambda x:f(x,b,r),0,r)[0]
    while b-a>epsilon:
        c=(a+b)/2
        v=t*quad(lambda x:f(x,c,r) ,0,r)[0]
        if v <= n*n:
            a,va=c,v
        else:
            b,vb=c,v
    res+=c

print(f"{res:.9f}")