朱莉娅79 77 38字节
I->sum(x->(e/x)^x,0:1e-5:min(I,9))/1e5
这是一个匿名函数,它接受数字值并返回浮点数。要调用它,请将其分配给变量。
这里的方法是使用正确的黎曼和来近似积分,其由下式给出:
在我们的情况下,输入a = 0和b = I。我们将积分区域划分为n = 10 5个离散部分,因此∆ x = 1 / n = 10 -5。由于这是相对于总和的常数,我们可以将其从总和中拉出,然后简单地对每个点处的函数求和求和,然后除以n。
该函数表现出令人惊讶的行为(来自Mathematica的图):
由于对于输入大于约9的函数,该函数求值几乎为0,因此,如果I小于9,则将输入截断为I,否则将其截断为9。这简化了我们必须进行的大量计算。
取消程式码:
function g(I)
# Define the range over which to sum. We truncate the input
# at 9 and subdivide the region into 1e5 pieces.
range = 0:1e-5:min(I,9)
# Evaluate the function at each of the 1e5 points, sum the
# results, and divide by the number of points.
return sum(x -> (e / x)^x, range) / 1e5
end
感谢Dennis,节省了39个字节!