我目前正在开发一个Mathematica项目来计算Riemann的总和并将它们放在一张表中。我在打印行号(间隔)时遇到问题。 (行号也是辅助功能的参数)。我不知道如何在Mathematica表中访问迭代器的索引,所以我试图使用函数参数计算它们。
以下是我要打印的示例,其中x ^ 2在{0,1}范围内的积分,包含10个细分。
tableRiemannSums[#^2 &, {0, 1}, 10]
我需要根据当前的值来弄清楚每次迭代的索引是什么 细分k,积分{a,b}的范围,以及细分数n。下面是主要代码。
tableRiemannSums[fct_, {a_, b_}, n_] := Table[{'insert index here',
leftRiemannSum[fct, {a, b}, 'insert index here'],
rightRiemannSum[fct, {a, b}, 'insert index here']},
{k, a, b - (N[b - a]/n), N[b - a]/n}]
在上面的等式中,行
{k, a, b - (N[b - a]/n), N[b - a]/n}]
表示表格的范围是k,因为k从'a'变为'b - ((b - a)/ n)',步长为'(b - a)/ n'。
在我的代码在此处插入索引的每个地方,我需要使用相同的等式。现在,我正在使用'n * k + 1'计算索引,该索引适用于正范围,但是当我有{a,b} = {-1,1}这样的范围时会中断。
我认为这是一个相当简单的代数问题,但是我已经绞尽脑汁几个小时,无法找到一个通用方程式。
(如果这是一个重复的问题,我道歉 - 我尝试搜索Stack溢出档案,但很难将我的问题总结为几个关键词。)
答案 0 :(得分:1)
我终于想出了如何解决这个问题。我过度思考范围,而不是依靠内部函数来控制范围。我把这个函数重写为:
tableRiemannSums[fct_, {a_, b_}, n_] := Table[{k,
leftRiemannSum[fct, {a, b}, k],
rightRiemannSum[fct, {a, b}, k]},
{k, 1, n}}]
作为参考,这里是左右总和(对任何感兴趣的人!):
leftRiemannSum[fct_, {a_, b_}, n_] :=
N[b - a]/n* Apply[Plus, Map[fct, Range[a, b - N[b - a] / n, N[b - a]/n]]]
rightRiemannSum[fct_, {a_, b_}, n_] :=
N[b - a]/n* Apply[Plus, Map[fct, Range[a + (N[b - a]/n), b, N[b - a]/n]]]
答案 1 :(得分:0)
您可能需要考虑的是创建一个函数来创建表的每一行。该函数的一个参数是行号。
使用MapIndexed执行此功能,它将为您提供一种在提供递增行号时根据需要遍历您的范围的方法。
(创建一个包含值范围的列表,然后将MapIndexed函数应用于此列表。)