用Python绘制10种经典函数图像:从幂函数到阿基米德螺线(附完整代码)
你是否也曾对着数学课本上那些优美的曲线图赞叹不已,却苦于不知如何亲手将它们“画”出来?对于许多刚开始接触Python编程的数学爱好者来说,理解函数公式是一回事,但将其转化为屏幕上清晰、美观、可交互的图像,往往是另一道门槛。这篇文章正是为你准备的。我们将抛开枯燥的理论推导,直接进入代码实战,用Python中最强大的绘图库Matplotlib,一步步还原从基础的幂函数到充满几何美感的阿基米德螺线在内的十种经典函数图像。你会发现,编程不仅是解决问题的工具,更是探索数学之美、将抽象概念可视化的绝佳画笔。无论你是想巩固数学理解,还是希望为你的数据分析报告增添一抹亮色,这里的代码和思路都能直接拿来就用。
1. 环境搭建与核心工具介绍
在开始绘制任何图形之前,一个稳定且功能齐全的编程环境是基石。对于科学计算和可视化,Anaconda发行版是一个极佳的选择,它集成了Python、Jupyter Notebook以及我们即将用到的所有核心库,避免了繁琐的依赖管理。
我们将主要依赖三个库:
- NumPy:Python科学计算的基础包,提供了强大的多维数组对象和数学函数库。我们将用它来生成函数定义域内的数据点。
- Matplotlib:Python生态中应用最广泛的2D绘图库,其绘图风格和命令很大程度上借鉴了MATLAB,但功能更加强大和灵活。
- Matplotlib的
pyplot子模块:提供了一套类似MATLAB的命令式绘图接口,对于快速绘图和交互式工作非常方便。
你可以通过以下命令一次性安装所有必需的包(如果你使用的是纯净的Python环境):
pip install numpy matplotlib
安装完成后,在Python脚本或Jupyter Notebook的开头,我们通常以这样的方式导入它们,并约定俗成地使用简写,这几乎是数据科学领域的“标准开场白”:
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体(如果需要显示中文标签)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
注意:在macOS或某些Linux系统上,你可能需要安装额外的字体包或指定已安装的中文字体名称,上述
SimHei在Windows上通常有效。
准备工作就绪,让我们从最基础的函数开始,逐步构建我们的图像画廊。
2. 基础代数函数可视化
这一部分涵盖了我们从中学到大学初期接触的核心函数类型:幂函数、指数函数和对数函数。它们的图像是理解更复杂函数行为的基石。
2.1 幂函数:探索指数带来的形态变化
幂函数 y = x^a 的图像形态极其丰富,完全由指数 a 的值决定。我们可以通过一次绘制多个不同指数的函数,来直观对比这种变化。
# 绘制幂函数族 y = x^a
x = np.linspace(0, 2, 500) # 生成0到2之间均匀分布的500个点
# 定义不同的指数a
exponents = [0.5, 1, 2, 3, -1]
labels = [r‘$y = x^{0.5}$ (平方根)‘, r‘$y = x^{1}$ (直线)‘, r‘$y = x^{2}$ (抛物线)‘,
r‘$y = x^{3}$ (三次函数)‘, r‘$y = x^{-1}$ (反比例)‘]
plt.figure(figsize=(10, 6))
for a, label in zip(exponents, labels):
y = x ** a
plt.plot(x, y, linewidth=2, label=label)
plt.title(‘幂函数图像对比‘, fontsize=14)
plt.xlabel(‘x‘, fontsize=12)
plt.ylabel(‘y‘, fontsize=12)
plt.grid(True, linestyle=‘--‘, alpha=0.6)
plt.legend()
plt.axis([0, 2, 0, 5]) # 设置坐标轴显示范围
plt.show()
这段代码的关键在于np.linspace,它生成了绘图所需的x坐标数组。r‘$...$‘的写法允许我们使用LaTeX语法在图表中渲染漂亮的数学公式。运行后,你将清晰地看到指数如何影响曲线的增长速度和弯曲方向。
2.2 指数与对数:一对互逆的“增长”与“压缩”
指数函数和对数函数互为反函数,它们的图像关于直线 y = x 对称。将它们放在一起绘制,能深刻理解这种关系。
# 绘制指数函数与对数函数
x_exp = np.linspace(-2, 2, 400)
x_log = np.linspace(0.05, 5, 400) # 对数函数定义域为x>0,从0.05开始避免log(0)
y_exp = np.exp(x_exp) # y = e^x
y_log = np.log(x_log) # y = ln(x)
fig, (ax1, ax2) = plt.subplo

&spm=1001.2101.3001.5002&articleId=152545627&d=1&t=3&u=f7c3f4795f4b4689aebb62f6b2abd68a)
2520

被折叠的 条评论
为什么被折叠?



