Files
jupyter-collection/scientific-computing-2/auto_examples_jupyter/plot_mandelbrot.ipynb
2025-10-21 11:20:44 +08:00

124 lines
33 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Mandelbrot set\n",
"\n",
"Compute the Mandelbrot fractal and plot it\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"jupyter": {
"outputs_hidden": false
}
},
"outputs": [
{
"data": {
"image/png": "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3r2YOXOmTbZJRLZx9+5dXL161d5pEP1/Vn0E5j8uX74skZGRMnnyZHF3d5fIyEiJjIyUlJQUS5ugoCDZuHGj5ecZM2aIh4eHbNy4UU6ePClvvfWW+Pr6SnJycr62yac0GQwGo2SEtZ/StGnBCwsLy3Undu/e/f8TAGT58uWWn81ms0ycOFF8fHzEyclJnnnmGTl58mS+t8mCx2AwGCUjrF3wOB4eERE5JI6HR0RE9BhY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFY8IiISBFsWvCmTp2Kli1bwtXVFWXKlMnXMj169IBKpcoWLVq0sGWaRESkADYteAaDAa+//jo++OCDAi3XoUMH3LhxwxK//vqrjTIkIiKl0Npy5ZMnTwYArFixokDLOTk5wcfHJ19tMzMzkZmZafk5KSmpQNsiIiLHJCJWXZ9D3sPbs2cPvLy8EBgYiL59++LWrVt5tp0+fTo8PDwsUaVKlSLMlIiIbCUhIcGq61OJtUtoLlasWIHBgwfj7t27j2z7/fffw93dHf7+/rh48SLGjx+PrKwsHD16FE5OTjna//cM7+7du/D398eVK1fg4eFhzd1waMnJyahcuTJiY2NRunRpe6dTZJS430rcZ0CZ+63EfQbuX6mrUqUK7ty5k+/nP/KjwJc0J02aZLlUmZfDhw+jadOmj5XQm2++afl3vXr10LRpU/j7+2Pr1q149dVXc7R3cnLKtRB6eHgo6gPyQOnSpbnfCqHEfQaUud9K3GcAUKutexGywAWvf//+6Nq160PbVK1a9XHzycHX1xf+/v44f/681dZJRETKU+CC5+npCU9PT1vkkquEhATExsbC19e3yLZJREQlj00fWrly5QqioqJw5coVmEwmREVFISoqCqmpqZY2tWrVwqZNmwAAqampGDZsGCIiInDp0iXs2bMHL730Ejw9PfHKK6/ka5tOTk6YOHFirpc5SzLut3L2W4n7DChzv5W4z4Dt9tumD6306NED3377bY7pu3fvRqtWre4noFJh+fLl6NGjB9LT09G5c2dERkbi7t278PX1RevWrTFlyhRUrlzZVmkSEZECFMlTmkRERPbmkO/hERERWRsLHhERKQILHhERKQILHhERKUKxL3iXLl1C7969Ua1aNbi4uKBGjRqYOHEiDAbDQ5cTEUyaNAl+fn5wcXFBq1at8PfffxdR1tahxOGXHmefS8KxvnPnDrp162bpM7Zbt26P7KqvOB7rhQsXolq1anB2dkaTJk2wf//+h7bfu3cvmjRpAmdnZ1SvXh2LFy8uokytpyD7vGfPnhzHVKVS4cyZM0WYceHt27cPL730Evz8/KBSqbB58+ZHLmONY13sC96ZM2dgNpvx1Vdf4e+//8acOXOwePFijBkz5qHLzZo1C+Hh4ViwYAEOHz4MHx8fPPfcc0hJSSmizAtPicMvPc4+l4Rj/fbbbyMqKgq//fYbfvvtN0RFRaFbt26PXK44Hevvv/8egwcPxtixYxEZGYmnn34aHTt2xJUrV3Jtf/HiRTz//PN4+umnERkZiTFjxmDgwIHYsGFDEWf++Aq6zw+cPXs223ENCAgoooytIy0tDQ0bNsSCBQvy1d5qx1pKoFmzZkm1atXynG82m8XHx0dmzJhhmZaRkSEeHh6yePHiokjRqpYvXy4eHh75ahsWFiadOnWyaT5FIb/7XBKOdXR0tACQP//80zItIiJCAMiZM2fyXK64HevmzZtLv379sk2rVauWjBo1Ktf2I0aMkFq1amWb9v7770uLFi1slqO1FXSfd+/eLQDkzp07RZBd0QAgmzZtemgbax3rYn+Gl5ukpCSUK1cuz/kXL15EXFwcQkNDLdOcnJzw7LPP4uDBg0WRol0VZPil4q4kHOuIiAh4eHjgiSeesExr0aIFPDw8HrkPxeVYGwwGHD16NNtxAoDQ0NA89zEiIiJH+/bt2+PIkSMwGo02y9VaHmefHwgODoavry/atm2L3bt32zJNh2CtY13iCt4///yDL774Av369cuzTVxcHADA29s723Rvb2/LvJKqY8eOWLNmDXbt2oXPP/8chw8fRps2bbINsVSSlIRjHRcXBy8vrxzTvby8HroPxelYx8fHw2QyFeg4xcXF5do+KysL8fHxNsvVWh5nn319fbFkyRJs2LABGzduRFBQENq2bYt9+/YVRcp2Y61j7bAFb9KkSbnenP13HDlyJNsy169fR4cOHfD666+jT58+j9yGSqXK9rOI5JhW1B5nvwvizTffxAsvvIB69erhpZdewrZt23Du3Dls3brVintRMLbeZ6D4H+vccn3UPjjisX6Ugh6n3NrnNt2RFWSfg4KC0LdvXzRu3BghISFYuHAhXnjhBcyePbsoUrUraxzrAo+WUFQKOgzR9evX0bp1a4SEhGDJkiUPXc7HxwfA/b8a/j0Kw61bt3L8FVHUlDj8ki33uSQc6xMnTuDmzZs55t2+fbtA++AIxzovnp6e0Gg0Oc5sHnacfHx8cm2v1WpRvnx5m+VqLY+zz7lp0aIFVq9ebe30HIq1jrXDFryCDEN07do1tG7dGk2aNMHy5csfOWhgtWrV4OPjgx07diA4OBjA/evpe/fuxcyZMwude2EocfglW+5zSTjWISEhSEpKwl9//YXmzZsDAA4dOoSkpCS0bNky39tzhGOdF71ejyZNmmDHjh3ZRkbZsWMHOnXqlOsyISEh+OWXX7JN2759O5o2bQqdTmfTfK3hcfY5N5GRkQ55TK3Jase6QI+4OKBr165JzZo1pU2bNnL16lW5ceOGJf4tKChINm7caPl5xowZ4uHhIRs3bpSTJ0/KW2+9Jb6+vpKcnFzUu/DYLl++LJGRkTJ58mRxd3eXyMhIiYyMlJSUFEubf+93SkqKfPzxx3Lw4EG5ePGi7N69W0JCQqRixYrFZr8Lus8iJeNYd+jQQRo0aCARERESEREh9evXlxdffDFbm+J+rNetWyc6nU6WLVsm0dHRMnjwYHFzc5NLly6JiMioUaOkW7dulvYxMTHi6uoqQ4YMkejoaFm2bJnodDr58ccf7bULBVbQfZ4zZ45s2rRJzp07J6dOnZJRo0YJANmwYYO9duGxpKSkWL67ACQ8PFwiIyPl8uXLImK7Y13sC97y5csFQK7xbwBk+fLllp/NZrNMnDhRfHx8xMnJSZ555hk5efJkEWdfOGFhYbnu9+7duy1t/r3f9+7dk9DQUKlQoYLodDqpUqWKhIWFyZUrV+yzA4+hoPssUjKOdUJCgrzzzjtSqlQpKVWqlLzzzjs5Hk0vCcf6yy+/FH9/f9Hr9dK4cWPZu3evZV5YWJg8++yz2drv2bNHgoODRa/XS9WqVWXRokVFnHHhFWSfZ86cKTVq1BBnZ2cpW7asPPXUU7J161Y7ZF04D16v+G+EhYWJiO2ONYcHIiIiRXDYpzSJiIisiQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgUgQWPiIgU4f8BqkeuAXhswSUAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from numpy import newaxis\n",
"import warnings\n",
"\n",
"\n",
"def compute_mandelbrot(N_max, some_threshold, nx, ny):\n",
" \"\"\"\n",
" 计算 Mandelbrot 集合的布尔数组。\n",
"\n",
" 参数\n",
" ----\n",
" N_max : int\n",
" 最大迭代次数。\n",
" some_threshold : float\n",
" 模长阈值,用于判断点是否属于 Mandelbrot 集。\n",
" nx, ny : int\n",
" 图像在 x、y 方向的像素个数。\n",
"\n",
" 返回\n",
" ----\n",
" mandelbrot_set : 二维 bool 数组 (nx, ny)\n",
" True 表示对应复数 c 属于 Mandelbrot 集。\n",
" \"\"\"\n",
"\n",
" # 1. 构造复平面网格\n",
" x = np.linspace(-2, 1, nx) # 实轴范围 [-2, 1]\n",
" y = np.linspace(-1.5, 1.5, ny) # 虚轴范围 [-1.5, 1.5]\n",
" c = x[:, np.newaxis] + 1j * y[np.newaxis, :] # 广播成 (nx, ny) 复数矩阵\n",
"\n",
" # 2. 初始化 z与 c 同形\n",
" z = c.copy()\n",
"\n",
" # 3. 迭代z_{n+1} = z_n^2 + c\n",
" # 屏蔽运行时警告(溢出/无效值在集合外部必然出现)\n",
" with warnings.catch_warnings():\n",
" warnings.simplefilter(\"ignore\")\n",
" for _ in range(N_max):\n",
" z = z**2 + c\n",
"\n",
" # 4. 根据最终模长判断是否在集合内\n",
" mandelbrot_set = abs(z) < some_threshold\n",
" return mandelbrot_set\n",
"\n",
"\n",
"# 5. 生成 601×401 像素的 Mandelbrot 集合\n",
"mandelbrot_set = compute_mandelbrot(N_max=50, some_threshold=50.0,\n",
" nx=601, ny=401)\n",
"\n",
"# 6. 绘制:转置使 y 轴竖直extent 设定坐标轴范围\n",
"plt.imshow(mandelbrot_set.T, extent=(-2, 1, -1.5, 1.5))\n",
"\n",
"# 7. 使用灰度色阶(黑色=集合内,白色=集合外)\n",
"plt.gray()\n",
"\n",
"# 8. 显示图形\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.11"
}
},
"nbformat": 4,
"nbformat_minor": 4
}