You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Python循环实现f(n+1)=ln|f(n)|混沌映射并排除1、e初始值

错误原因梳理

  • 第一版math代码问题:
    1. lambda表达式参数名与存储迭代值的变量名均为f,产生命名冲突
    2. 循环直接将迭代序号ii传入函数计算,未使用初始值,第一次传入ii=0时计算ln(0)触发定义域错误
  • 第二版math代码问题:
    lambda表达式内部调用自身,形成无限递归,触发递归深度超限错误
  • 你提供的numpy版本存在逻辑错误:
    1. 直接使用np.empty初始化的未赋值垃圾值作为初始值
    2. 每一步计算的是当前下标数组元素本身的对数绝对值,不符合f(n+1)=ln|f(n)|的递推逻辑

仅使用math库的正确实现

首先需注意初始值不能为1或e,否则后续迭代会出现ln(0)的定义域问题,代码中增加了初始值校验逻辑:

import math

# 迭代次数配置
num_iters = 10
# 初始值可自行修改,禁止为1或e
init_value = 2.0

# 初始值合法性校验,用浮点误差阈值避免精度问题
if abs(init_value - 1) < 1e-9 or abs(init_value - math.e) < 1e-9:
    raise ValueError("初始值不能为1或e")

current = init_value
for _ in range(num_iters):
    current = math.log(math.fabs(current))
    print(current)

如果需要存储所有迭代结果,可以用列表记录:

import math

num_iters = 10
init_value = 2.0

if abs(init_value - 1) < 1e-9 or abs(init_value - math.e) < 1e-9:
    raise ValueError("初始值不能为1或e")

# 存储所有迭代值,第一个元素为初始值
f_sequence = [init_value]
for _ in range(num_iters):
    next_val = math.log(math.fabs(f_sequence[-1]))
    f_sequence.append(next_val)
    print(next_val)

内容的提问来源于stack exchange,提问作者Sam Andersson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:05