gpt4 book ai didi

wolfram-mathematica - 如何在 Mathematica 中构建所有小于 n 的斐波那契数列

转载 作者:行者123 更新时间:2023-12-01 10:03:04 24 4
gpt4 key购买 nike

我想编写一个 Mathematica 函数来构造一个包含所有小于 n 的斐波那契数列的列表。此外,我想尽可能优雅和实用地执行此操作(因此没有显式循环)。

从概念上讲,我想取一个无限的自然数列表,将 Fib[n] 映射到它上面,然后从这个列表中取出小于 n 的元素。我如何在 Mathematica 中执行此操作?

最佳答案

第一部分可以在 Mathematica 中很容易地完成。下面,我提供了两个函数 nextFibonacci,它提供了下一个大于输入数字的斐波那契数(就像 NextPrime)和 fibonacciList,它提供了所有小于输入数字的斐波那契数列。

ClearAll[nextFibonacci, fibonacciList]
nextFibonacci[m_] := Fibonacci[
Block[{n},
NArgMax[{n, 1/Sqrt[5] (GoldenRatio^n - (-1)^n GoldenRatio^-n) <= m, n ∈ Integers}, n]
] + 1
]
nextFibonacci[1] := 2;

fibonacciList[m_] := Fibonacci@
Range[0, Block[{n},
NArgMax[{n, 1/Sqrt[5] (GoldenRatio^n - (-1)^n GoldenRatio^-n) < m, n ∈ Integers}, n]
]
]

现在您可以执行以下操作:

nextfibonacci[15]
(* 21 *)

fibonacciList[50]
(* {0, 1, 1, 2, 3, 5, 8, 13, 21, 34} *)

不过,第二部分很棘手。你正在寻找的是一个 Haskell 类型的惰性评估,它只会在必要时评估(否则,你不能在内存中保存无限列表)。例如,类似(在 Haskell 中):

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

然后允许你做类似的事情

take 10 fibs
-- [0,1,1,2,3,5,8,13,21,34]

takeWhile (<100) fibs
-- [0,1,1,2,3,5,8,13,21,34,55,89]

不幸的是,没有对您想要的内容的内置支持。但是,您可以扩展 Mathematica 以实现惰性样式列表,如 this answer 所示。 , 这也是 implemented as a package .现在您已拥有所需的所有部分,我将让您自己处理。

关于wolfram-mathematica - 如何在 Mathematica 中构建所有小于 n 的斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006743/

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