我目前正在做一个Mathematica项目,用来计算Riemann的总和,并将它们放在一个表格中。打印行号(间隔)时遇到问题。(行号也是辅助函数的参数)。我不知道有什么方法可以直接访问Mathematica Table中迭代器的索引,所以我尝试使用函数参数来计算它们。
这是一个我想要打印的例子,关于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以大小'(b - a)/n‘的步长从'a’到'b - ((b - a)/n)‘。
在我的代码说“在这里插入索引”的每一个地方,我都需要放入相同的等式。现在,我使用'n *k+ 1‘来计算索引,它适用于正范围,但当我有一个像{a,b} = {-1,1}这样的范围时,它就会中断。
我认为这是一个相当简单的代数问题,但我已经绞尽脑汁几个小时了,就是找不到一个通用的方程式。
(如果这是一个重复的问题,我很抱歉-我试图搜索Stack overflow归档,但很难将我的问题总结为几个关键词。)
发布于 2013-03-30 05:05:16
我终于想出了解决这个问题的办法。我过多地考虑了范围,而不是依靠内部函数来控制它。我将函数重写为:
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]]]发布于 2012-12-13 10:56:44
您可能需要考虑的是创建一个函数来生成表的每一行。此函数的一个参数是行号。
使用MapIndexed执行此函数,这将为您提供一种根据需要遍历范围的方法,同时提供递增的行号。
(创建一个具有值范围的列表,然后将MapIndexed函数应用于此列表。)
https://stackoverflow.com/questions/13770031
复制相似问题