如何在mathemathica中定义使用复杂递归关系的函数?

如何在mathemathica中定义使用复杂递归关系的函数?,math,wolfram-mathematica,discrete-mathematics,mathematica-8,Math,Wolfram Mathematica,Discrete Mathematics,Mathematica 8,我试图写一个小脚本来计算一个整数序列。我试图用代码编写的函数是黑板上的函数,a(n)。问题是,我希望我在脚本中定义的函数h(n)作为结果给出一个数字,但它给出了另一个结果:对于h(2),它给出了ArgMax[{p,HarmonicNumber[p]您得到这个答案的主要原因是Mathematica中的Sum命令进行复杂的符号计算,将术语和表达式重写为经典数学函数,试图对所有内容进行尽可能少的假设 当然,如果你对整数的逆求和,它会尝试返回到调和数 它通常是有用的,但可能有交叉的目的 要避免这种情况,

我试图写一个小脚本来计算一个整数序列。我试图用代码编写的函数是黑板上的函数,a(n)。问题是,我希望我在脚本中定义的函数h(n)作为结果给出一个数字,但它给出了另一个结果:对于h(2),它给出了
ArgMax[{p,HarmonicNumber[p]您得到这个答案的主要原因是Mathematica中的Sum命令进行复杂的符号计算,将术语和表达式重写为经典数学函数,试图对所有内容进行尽可能少的假设

当然,如果你对整数的逆求和,它会尝试返回到调和数

它通常是有用的,但可能有交叉的目的

要避免这种情况,只需更换

Sum[,{var,start,end}]

Total[表[,{var,start,end}]]

它应该给你你想要的,没有额外的时间符号解释的总和

无论如何,你的代码中有很多问题

  • 你应该为h使用备忘录

  • 您希望找到最大值p,以便从r开始的逆和小于或等于1。您的代码不会这样做。您不能简单地将不等式放入范围参数中。您必须使用控制或使用逆函数循环求和

十六,

或者以另一种形式

Total[Table[1/s, {s, 10, 25}]] <= 1   (* True *)

p - r + 1 = 25 - 10 + 1 = 16
{40.8906,{1,2,6,16,43,117,318,865,2351,6391,17372,47222, 128363348927}


我认为有一个Mathematica特定的Stackexchange论坛,因此您可能会在那里得到更多更好的答案。也就是说,您确实需要尝试陈述问题,以便其他人能够理解它;指向混乱图像的链接无助于其他人理解。请通过编写问题陈述来帮助其他人。好的,我已经看到scr中的一个主要缺陷所以我将重写这个问题。虽然我还没有找到那个论坛。看看:
Maximize[{Sum[1/s]很有趣
a[1] = 1;

a[n_] := Module[{sum = 0},
  r = 1 + Sum[a[k], {k, n - 1}];
  x = r;
  While[sum <= 1, sum += 1/x++];
  p = x - 2;
  p - r + 1]

Table[a[n], {n, 6}]
r = 1 + Sum[a[k], {k, 4 - 1}]

  = 1 + a[1] + a[2] + a[3]       (* refer to established results for a[n] *)

  = 1 +  1  +  2  +  6  =  10

sum = 0;
x = r;
While[sum <= 1, sum += 1/x++];
p = x - 2;
p - r + 1
Total[Table[1/s, {s, 10, 25}]] <= 1   (* True *)

p - r + 1 = 25 - 10 + 1 = 16
Clear[a]

a[1] = 1;

a[n_] := a[n] = Module[{sum = 0},
   r = 1 + Sum[a[k], {k, n - 1}];
   x = r;
   While[sum <= 1, sum += 1/x++];
   p = x - 2;
   p - r + 1]
Timing[Table[a[n], {n, 14}]]