You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

多次迭代xcos函数图像出现曼德博分形的原因及相关学习资料咨询

多次迭代xcos函数图像出现曼德博分形的原因及相关学习资料咨询

哇,这个发现真的超有意思!我来帮你拆解一下背后的逻辑,再给你推荐一些能深入学习的资料~

为什么会出现曼德博分形?

其实核心原因都围绕迭代函数的动力学特性展开:

  • 迭代逻辑的本质相似性:曼德博集合的核心是反复迭代 ( z_{n+1} = z_n^2 + c ),而你写的嵌套函数 ( x\cos(x\cos(...)) ) 本质上是多次复合的迭代操作——每一层都把前一次的输出作为下一次的输入。当迭代次数足够多时,这类复合函数在复平面上的收敛/发散行为,和曼德博集合的参数空间探索逻辑高度相似,边界处的临界行为自然会催生出分形结构。
  • 复平面上的整函数迭代特性:( \cos(z) ) 在复平面是一个整函数,多次复合后,它的迭代行为会展现出Julia集(曼德博集合其实是所有Julia集的参数空间)的特征。你固定了11次嵌套迭代,相当于在观察这个复合函数的“参数空间”表现,和曼德博集合的形成逻辑不谋而合。
  • 分形的自相似共性:曼德博分形的标志性特征是自相似,而所有迭代类分形的核心都是收敛与发散边界处的局部结构不断放大重复。你的嵌套函数在临界区域的迭代正好触发了这种自相似行为,所以呈现出类似曼德博的图案。

可以学习的资料推荐

  • 入门经典教材
    • 《分形几何:数学基础及其应用》(Falconer著):分形领域的入门必读书,从定义到迭代函数系统、复动力系统都讲得很透彻,能帮你建立分形的核心认知。
    • 《复分析:可视化方法》(Needham著):用直观的可视化方式讲解复分析,其中专门有章节讲复动力系统和Julia/曼德博集合,非常适合理解这类分形的几何本质。
  • 进阶专业书籍
    • 《Complex Dynamics》(Carleson & Gamelin著):深入讲解复平面上的迭代函数动力学,涵盖曼德博集合的数学证明和深层特性,适合有一定复分析基础后阅读。
  • 实用学习资源
    • 可以查找大学数学系的“复动力系统与分形”课程讲义,很多院校会把公开课笔记公开,重点关注迭代函数的收敛性、Julia集与曼德博集合的关联。
    • 分形爱好者社区的科普内容,能看到更多类似“意外发现分形”的案例,帮你拓展对迭代分形的认知。

你提供的运行代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import cmath

# Defining the function to map a complex function
def map_complex_function(complex_func, real_range, imag_range, color_scheme=("magnitude", "argument", "(10x)/(10x+1)")):
    # Creating the domain
    real_values, imag_values = np.meshgrid(np.linspace(real_range[0], real_range[1], 1000),
                                          np.linspace(imag_range[0], imag_range[1], 1000))
    z_values = real_values + 1j * imag_values

    # Applying the complex function to the domain
    w_values = complex_func(z_values)

    # Extracting the magnitude and argument
    magnitude = np.abs(w_values)
    argument = np.angle(w_values) / (2 * np.pi) % 1

    # Determining brightness based on the provided color scheme
    if color_scheme[2] == "(10x)/(10x+1)":
        brightness = (10 * magnitude) / (10 * magnitude + 1)
    else:
        brightness = magnitude / np.max(magnitude)

    # Creating HSV values
    saturation = np.ones_like(argument)
    hsv_values = np.stack([argument, saturation, brightness], axis=-1)

    # Converting HSV to RGB
    rgb_values = mcolors.hsv_to_rgb(hsv_values)

    # Plotting the image
    plt.imshow(rgb_values, origin='lower', extent=[real_range[0], real_range[1], imag_range[0], imag_range[1]])
    plt.xlabel('Real part')
    plt.ylabel('Imaginary part')
    plt.title(f'Complex map for {complex_func.__name__}')
    plt.colorbar(label='Magnitude (custom scale)')
    plt.show()

def f(z):
    return z*np.cos(z*np.cos(z*np.cos(z*np.cos(z*np.cos(z*np.cos(z*np.cos(z*np.cos(z)))))))))

# Creating the plots
real_range = (0, 6)
imag_range = (-4, 4)
map_complex_function(f, real_range, imag_range, color_scheme=("magnitude", "argument", "(10x)/(10x+1)"))

备注:内容来源于stack exchange,提问作者intro

火山引擎 最新活动