当前位置: 首页 > 知识库问答 >
问题:

我试图画曼德布罗特集时,我的数学出了什么问题?

乐正嘉瑞
2023-03-14

我目前正在尝试用python编写一个程序,结果是绘制mandelbrot集。分形的形状看起来不错,但轮廓一点也不精确。我正试图弄清楚这个问题是来自我的数学还是我的代码

我试图提高最大迭代次数(我称之为i),看看计算是否太低,但变化不大。

import numpy as np
from PIL import Image

taille = 1000
nb_points = 500
centre_x = taille/2
centre_y = taille/2

fractale = np.zeros((taille, taille, 3), dtype = np.uint8)

for x in range(-nb_points,nb_points):
    x = float(x)
    x = x/250

    for y in range(-nb_points,nb_points):
        y = float(y)
        y = y/250

        X = float(0)
        Y = float(0)
        i = 0

        module_carre = 0

        while module_carre < 4 and i <20 :
            X = float(X**2 - Y**2 + x)
            Y = float(2*X*Y + y)
            i += 1 
            module_carre = float(X*X + Y*Y)

        if module_carre < 4:
            i=0

        couleur = liste_couleur[i]

        fractale[centre_x + x*250,centre_y + y*250] = couleur
imgpil = Image.fromarray(fractale, 'RGB')
imgpil.save("resultat.jpg")

我是法国人,这就是为什么你可能不明白一切。我没有粘贴所有关于定义不同深浅的蓝色等的线条...我不明白为什么我的轮廓这么糟糕。我相信它来自我的数学,但我没有看到任何错误。这是我第一次发布堆栈溢出,我还不明白所有的工具。我没有设法添加输出的图像对不起我的英语,我希望你能帮我修复我的代码

共有1个答案

金钊
2023-03-14

主要问题是:

X = float(X**2 - Y**2 + x)
Y = float(2*X*Y + y)

Y的计算中,您希望使用X的旧值,但它已经更新,不再可用。你可以这样做:

new_X = float(X**2 - Y**2 + x)
Y = float(2*X*Y + y)
X = new_X

或者您可以并行更新它们:

X, Y = float(X**2 - Y**2 + x), float(2*X*Y + y)

此外,您不需要调用float,因此您真正需要的是:

X, Y = X**2 - Y**2 + x, 2*X*Y + y

顺便说一下,Python确实有一个内置的复数类,所以您可以将zZ初始化为z=复杂(x, y)Z=复杂(0.0,0.0)。那么你的循环体会有:

Z = Z**2 + z

我还建议增加最大迭代次数。将其限制在20将给出非常低的分辨率。当生成高分辨率图像时,我通常至少使用1000,至少对于边界附近的点。

 类似资料:
  • 虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子。实际上,这是tensorflow一个非常直截了当的可视化运用。(我们最终也许会提供一种更加精心设计的运用方式来生成真正更加美丽的图像。) 说明:本教程使用了IPython的notebook。 基本步骤 首先,我们需要导入一些库。 # 导入仿真库 import

  • 我写了一个mandelbrot集,我读过关于julia集的文章,它非常相似,但到底是什么关系呢?我能用mandelbrot公式画一个julia集吗?起始参数是什么?请阅读我的mandelbrot集合代码: 我不确定mandelbrot集对于z是迭代的,julia集对于c是迭代的,这意味着什么?我需要更改代码吗? 更新:我更改了代码,但它不起作用。我的想法是从$re和$im开始,而不是从0开始: 更

  • 这是计算功能代码。我听说“逃跑”应该是。因为如果()小于,它就不会无限大。但是在这个代码中,转义是。为什么?为什么?

  • 虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子。实际上,这是tensorflow一个非常直截了当的可视化运用。(我们最终也许会提供一种更加精心设计的运用方式来生成真正更加美丽的图像。) 说明:本教程使用了IPython的notebook。 基本步骤 首先,我们需要导入一些库。 # 导入仿真库 import

  • 我有一个可搜索的术语数组,我想使用Lucene基本上CTRL-F通过这个文档堆栈,找到并存储所有这些术语在该文档堆栈中的位置。例如: 术语:“A”、“B”、“C” null 差不多吧。我怎么能这么做?到目前为止,我只是使用一个StandardAnalyzer,如下所示: Lucene最初会生成很多文档,但后来删除了除。cfs文件以外的所有文档。我如何保留其他文件来执行我的查询?

  • 我试着在画布里放一幅画。但就是没有出现。我谷歌了一下,看看哪里出了问题。不幸的是,我还是解决不了。这是我的代码 这是css文件