【问题标题】:Mathematica recursion, solve fixed pointMathematica 递归,求解不动点
【发布时间】:2014-04-25 01:17:42
【问题描述】:

这是一个简单的问题,希望得到一个简单的答案。 (免责声明:我是 Mathematica 的新手。)我试图找到差分方程的不动点。一个简单的例子是:

x[t_] := x[t] = (x[t - 1])^2
Solve[x[t] == x[t - 1], x[t - 1]]

它输出$RecursionLimit::reclim: Recursion depth of 1024 exceeded. 所以我假设它同时递归替换x[t]x[t-1]?我试过了

Solve[x[t] == Hold[x[t - 1]], x[t - 1]]

但这并没有解决任何问题。如果它只是用x[t-1]^2 代替x[t],它会发现它非常容易解决。有关如何轻推 Mathematica 的任何建议?

【问题讨论】:

  • 嗯...如果我尝试 RSolve[x[t+1]==x[t],x[t],t],它仍然会给我递归深度错误。因为这只是一个例子(我真正的问题是方程组,每个方程都相当复杂),我想避免在 RSolve 或 Solve 中明确写出方程。否则,我可以做 Solve[x[t-1]=(x[t-1])^2,x[t-1]] 因为我只是在求解不动点。
  • 如果你只定义x[t](没有下划线,一定要Clear[x])你会得到一个没有任何递归的解决方案
  • @Bill,不幸的是我注意到了这个问题,所以我一直在不断地重新启动,但即使使用新笔记本重新启动,我也会遇到递归深度错误。这正是我输入的内容:x[t_] := x[t] = (x[t - 1])^2RSolve[x[t + 1] == x[t], x[t], t]
  • @george,不幸的是,这是一种简单的方法,并不能真正解决我的问题,因为我将在 x[t] 上进行其他操作,例如在我将要使用的地方进行导数等等实际上想要一个 t 依赖,而不仅仅是一个用名称“x[t]”定义的变量..
  • @Bill,很抱歉造成误解。但这并不能真正解决我的问题,因为正如我在第二条评论中提到的那样“我想避免在 RSolve 或 Solve 中明确写出方程。”不过,谢谢你的建议。

标签: recursion wolfram-mathematica recurrence evaluate


【解决方案1】:

你有 x[n+1] = x[n]^2。如果您只是将其视为递归,那么您将获得无限递归。 (您最初的情况是什么?您没有指定一个,并且通常不需要它来查找固定点。但是,M'ma 所知道的是您有一些 syntactically 递归定义的函数 - - 您通过应用您编写的 SetDelayed[] 来评估函数。)

但是,如果您将其表述为“y[x_] := x^2”,将更新重写规则与递归重写规则分开,您可以通过“y(x)=x”找到固定点:

Solve[y[x]==x,x]

事实上,这是寻找不动点问题的通用方法——当我使用更新函数对其进行操作时,输入是什么?

假设现在你想要 k 周期点...

kPoints[k_] := Solve[Nest[y,x,k]==x,x]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多