左右黎曼和和是定积分的近似值。当然,在数学中我们需要非常精确,因此我们的目标是使用许多接近无穷大的细分来计算它们,但对于本挑战而言,并不是必需的。相反,您应该尝试编写最短的程序,以任何编程语言通过任何默认方法获取输入并提供输出,该语言可以执行以下操作:
任务
给定两个有理数和(定积分的极限),一个正整数,代表左/右的布尔和一个黑盒函数 ,计算∫的左或右黎曼和(取决于)b a f (x )d x,使用n个相等的细分。
I / O规格
和可以是有理数/浮点数或分数。
可以由任意两个不同且一致的值表示,但请记住,不允许您将完整或部分函数用作输入。
是黑盒功能。引用上面链接的meta答案,可能无法访问黑盒功能的内容(即代码),您只能调用它们(如果适用,则传递参数)并观察其输出。如果需要,请提供有关您的语言使用的语法的必要信息,以便我们测试您的提交。
作为输出,您必须提供一个有理数/浮点数/分数,代表您想要的黎曼和。如过去所讨论的,只要四舍五入到最接近的1/1000的倍数(例如1.4529999
,可以代替1.453
),您的输出至少可以精确到小数点后三位,就可以忽略浮点不精确度。
数学规格
保证在和之间是连续的(没有跳跃,没有孔,没有垂直渐近线)。
您必须处理三种可能的情况:(结果应为或等效值),或。
如果,则积分会更改其符号。此外,在这种情况下,整体的正义感是朝着。
图表下方的区域为负,图表上方的区域为正。
示例/测试用例
分辨率不是最佳的,因为我不得不将它们缩小一点,但是它们仍然可读。
,k =右:
结果应该是,由于各矩形的宽度为,相应的高度为。
,k =左:
输出应为。
,k =右:
期望输出值是,因为翻转的边界时的积分变化的征兆()。
,k =左:
计算我们的黎曼和,我们得到。
,k =右-输出:。
,k =左-输出:。
f(x) = x * sin(1 / x); a = 0; b = 1; n = 50; k = right — Output: 0.385723952885505. Note that sine uses radians here, but feel free to use degrees instead.
现在f(x)是一个黑匣子,为什么这么重要?