gpt4 book ai didi

wolfram-mathematica - 逻辑映射 f_c(x)=cx(1-x) 的 Poincare 返回映射

转载 作者:行者123 更新时间:2023-12-04 08:02:27 27 4
gpt4 key购买 nike

假设:

f[c_,x_]:= c x (1-x) 

在[0,1]中固定一个区间(a,b)。 f的Poincare return(to the interval (a,b)) map是一个函数

R[c,x]=f^k[c,x],

其中 k 是第一个迭代使得a<f^k[c,x]<b(此处f^k[c,x]表示k与其自身的f次组合,即f[c,f[c,...f[c,x]...]])

所以,我想写一个函数(或模块)

 R[f_,a_,b_,n_,x_]

它考虑 f 的前 n 次迭代并返回第一个落入区间f[c,x]的迭代[a,b]的值。

这是我尝试过的:

R[f_[x___ ], a_,b_, n_, x0_] := 
Module[{i, y=x0},
Catch[
For[i = 0, i <= n, i++,
If[a < f[{x}[[1]], y] < b,
Throw[f[{x}[[1]], y]], y = f[{x}[[1]], y]
]
]
]
]

代码不起作用,因为在写入f[{x}[[1]], y]的地方,f被理解为乘以数字{x}[[1]]而不是上面定义的逻辑函数。

请注意,我正在寻找一段简单的代码,如果可能,请不要在您的答案中更改函数 R 的输入数量。

编辑:我想按如下方式调用 R。

R[f[3.5, t], 0.4, 0.7, 100, 0.2]

这应该在应用函数x0=0.2后第一次落入区间(0.4,0.7)时返回f[3.5,x]=3.5x(1-x)的迭代值。 n只是我们在放弃之前尝试的最大迭代次数。

最佳答案

您遇到的问题是您实际上并未从 Module 返回任何内容.要修复您的代码,如所写,我会使用

R[f_[x___], a_, b_, n_, x0_] :=
Module[{i, y = x0},
Catch[
For[i = 0, i <= n, i++, Print["i= ", i];
If[
a < f[{x}[[1]], y] < b,
y= f[{x}[[1]], y]; Throw[y],
y = f[{x}[[1]], y]
](*If*)
](*For*)
];(*Catch*)
y (* returns y *)
](*Module*)

然而,这可以更简洁地重写为

g[c_][x_] := c x(1 - x)
(* I used Q to differentiate it from R, above. *)
Q[f_, a_, b_, n_, x0_] :=
Module[{i},
(* -- FIXED THIS, See below. -- *)
NestWhile[f, f[x0], Not[a < # < b]&, 1, n]
](*Module*)

注意,我更改了f的调用方式来自 f[c,x]g[c][x] .主要优势在于能够通过 g[c]Q而不是 f[c,t]其中 t是虚拟变量。然后像这样调用它

Q[g[3.5], 0.4, 0.7, 100, 0.2]

就像R 一样工作.

编辑:我在考虑扩展上面的代码时,发现了一个缺陷。我的条件是 a < f[#] < b&这表示只有当下一次迭代的值(value)需求在边界内时,循环才会继续。相反,我们只想在当前迭代超出范围时继续,所以我将其更改为 Not[ a < # < b ]& .


至于我正在考虑的更改,有时使用这样的计算能够查看完整的迭代列表会很好。为此,我们需要对上述代码进行一些小改动。

Clear[Q]
Options[Q] = {FullList -> False};
Q[f_, a_, b_, n_, x0_, opts : OptionsPattern[]] :=
Module[{i, nst},
nst = If[OptionValue[FullList],
NestWhileList, NestWhile];
nst[f, f[x0], Not[a < # < b] &, 1, n]
](*Module*)

其中介绍了Option FullList , 当设置为 True , Q将使用 NestWhileList而不是 NestWhile .

关于wolfram-mathematica - 逻辑映射 f_c(x)=cx(1-x) 的 Poincare 返回映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com