如何在mathemathica中定义使用复杂递归关系的函数?
我试图写一个小脚本来计算一个整数序列。我试图用代码编写的函数是黑板上的函数,a(n)。问题是,我希望我在脚本中定义的函数h(n)作为结果给出一个数字,但它给出了另一个结果:对于h(2),它给出了如何在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命令进行复杂的符号计算,将术语和表达式重写为经典数学函数,试图对所有内容进行尽可能少的假设 当然,如果你对整数的逆求和,它会尝试返回到调和数 它通常是有用的,但可能有交叉的目的 要避免这种情况,
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}]]