math - 如何在数学中定义一个使用复杂递归关系的函数?
问题描述
我正在尝试编写一个小脚本来计算整数序列。我试图用代码编写的函数是黑板中的一个,a(n)。问题是我期待我在脚本中定义的函数 h(n) 给出一个数字作为结果,但它给出了其他东西:对于 h(2) 它给出了ArgMax[{p, HarmonicNumber[p] <= 1}, p, Integers]
我该如何纠正?(您必须了解我绝不是程序员,对mathematica也不太了解。在此先感谢。我写的脚本是这个:
h[n_] := (ArgMax[{p,
Sum[1/s, {s, 1 + Sum[h[k], {k, 1, (n - 1)}], p}] <= 1}, p,
Integers]) - Sum[h[k], {k, 1, (n - 1)}]; h[1] = 1;
a(n)=(最大 p 使得从 s 等于 r 到 p 的和小于或等于 1)-r+1,其中 r=1+a( k),并且 a(1)=1
PD:那些看起来像 v 的字母是 r。对不起。
解决方案
您收到此答案的主要原因是 Mathematica 中的 Sum 命令进行复杂的符号计算以将术语和表达式重写为经典数学函数,试图对所有内容做出尽可能少的假设。
当然,如果你对整数的倒数求和,它会试图回到谐波数。
它通常很有用,但可能有交叉用途。
为避免这种情况,只需更换
Sum[ , {var, start, end}]
经过
Total[Table[ , {var, start, end}]]
它应该给你你想要的东西,而不需要额外的时间来对 summand 进行符号解释。
无论如何,您的代码中存在重大问题。
你应该对 h 使用 memoization
您想找到最大值 p 使得从 r 开始的逆数之和小于或等于 1。您的代码不会这样做。您不能简单地将不等式放入范围参数中。您必须通过控制或使用反函数来循环您的总和。
推荐阅读
- c - 设置文件访问时间、修改时间
- sql - SQL 计算一个月的天数,不包括周末和节假日
- php - Facebook 图表仅返回 id
- javascript - 升级全日历?
- flutter - 如何在 DataTable 小部件中滚动 DataRow 项目
- vue.js - 基于插件值的 Vue 计算属性
- regex - 正则表达式:匹配最后一个字符串,直到出现另一个字符串(如果出现)
- python - tf.data.Dataset.window 和 tf.train.SequenceExample
- php - 我想使用 Zend 框架 2 在同一表单上的 2 个不同路径上上传 2 个文件
- java - 方法 println(Object...) 的最后一个参数的类型 int[][] 与 vararg 参数类型不完全匹配