为什么Mathematica不会在数字上评估此RecurrenceTable?

sma*_*ane 3 recurrence wolfram-mathematica

我正试图RecurrenceTable在Mathematica中使用条件,并且递归的东西正常工作,但它不会完全评估它.

In:= RecurrenceTable[{x[n] == If[Mod[n, 2] == 0, x[n - 1], y[n - 1]], 
       y[n] == If[Mod[n, 2] == 0, R x[n - 1] (1 - x[n - 1]), y[n - 1]], 
       x[1] == x0, y[1] == 0}, {x, y}, {n, 1, 10}]

Out:= {{0.25, 0.}, {x[1], 3 (1 - x[1]) x[1]}, {y[2], y[2]}, {x[3], 
        3 (1 - x[3]) x[3]}, {y[4], y[4]}, {x[5], 3 (1 - x[5]) x[5]}, {y[6], 
        y[6]}, {x[7], 3 (1 - x[7]) x[7]}, {y[8], y[8]}, {x[9], 
        3 (1 - x[9]) x[9]}}
Run Code Online (Sandbox Code Playgroud)

这些是正确的结果,但我需要它是数字形式,即 {{0.25, 0.}, {0.25, 0.5625} ...

有没有办法做到这一点?谢谢!

Mr.*_*ard 8

通常,您应该使用Piecewise数学函数,并保留If编程流程.

您可以If使用PiecewiseExpand以下方法转换许多语

If[Mod[n, 2] == 0, x[n - 1], y[n - 1]] // PiecewiseExpand
If[Mod[n, 2] == 0, r*x[n - 1] (1 - x[n - 1]), y[n - 1]] // PiecewiseExpand
Run Code Online (Sandbox Code Playgroud)

最终代码可能如下所示:

r = 3;
x0 = 0.25;
RecurrenceTable[
 {x[n] == Piecewise[{{x[n - 1], Mod[n, 2] == 0}}, y[n - 1]],
  y[n] == Piecewise[{{r*x[n - 1] (1 - x[n - 1]), Mod[n, 2] == 0}}, y[n - 1]],
  x[1] == x0,
  y[1] == 0},
 {x, y},
 {n, 10}
]
Run Code Online (Sandbox Code Playgroud)
{{0.25, 0.}, {0.25, 0.5625}, {0.5625, 0.5625}, {0.5625, 
  0.738281}, {0.738281, 0.738281}, {0.738281, 0.579666}, {0.579666, 
  0.579666}, {0.579666, 0.73096}, {0.73096, 0.73096}, {0.73096, 0.589973}}

几个相关点:

  1. 最好不要使用大写字母作为符号名称,因为它们可能与内置函数冲突.

  2. 如果您愿意,您可以考虑Divisible[n, 2]代替Mod[n, 2] == 0.