python实现数学函数图像
预备知识
使用python绘制基本初等函数
在数学里,基本初等函数包括幂函数、指数函数、对数函数、三角函数、反三角函数、常数函数。不同函数的定义:
python标准库【注】math介绍
【注:标准库无需安装,python安装时就自动安装了,直接调用即可,第三方库则需要自己选择安装,但他们的调用方式相同,都需要用import语句调用
Python库是具有相关功能模块的集合,其中有一些方便开发者完成各种常见任务的变量、函数和类。
学习python的一定遇到这样一个问题,模块,包,库,初学者开始时可能感到蒙圈,在此说明一下:
Python模块、包、库从使用角度看,没有太大本质区别,模块(Module)一般是单个python文件;包(package)由分层模块(Module)构成——相关目录里的模块构成。Python中的库(library)是参考其它编程语言的说法,既可以是一个模块也可以是一个包,换言之是对模块或包的通俗的说法。】
math --- 数学函数 — Python 3.11.0 文档
math库中常用内容总结如下:
math 库的数学常数
常数 描述
math.pi 圆周率π的近似值,值为 3.141 592 653 589 793
math.e 自然对数e的近似值,值为 2.718 281 828 459 045
math.inf 正无穷大,负无穷大为 - math.inf
math.nan 非浮点数标记,NaN (Not a Number)
math 库的数值表示函数
math 库的幂对数函数
math 库的三角运算函数
示例
具有图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)绘制数学函数图像例子,在此不多说,可见 后面部分。
下面的例子,需要用到数据处理库numpy和超强的图像库matplotlib,这两个属于第三方库(模块),需要安装后使用【关于“Python第三方模块(库、包)安装、卸载与查看”详情】。
Python使用numpy和matplotlib实现函数可视化,先看运行效果:
源码如下:
#参考
from math import * #导入绘图模块
import numpy as np #导入数值计算模块
import matplotlib.pyplot as plt #导入绘图模块
plt.rcParams['font.sans-serif']=['SimHei'] #绘图中文
plt.rcParams['axes.unicode_minus']=False #绘图负号
import mpl_toolkits.axisartist as axisartist #导入坐标轴加工模块
def elementary_func_draw(X, expr): #定义绘制函数图形的函数,其中x是自变量,y为因变量
#X=np.linspace(-10, 10, 100) #自变量
Y=list(map(lambda x:eval(expr), X))
fig=plt.figure(figsize=(4, 4)) #新建画布
ax=axisartist.Subplot(fig, 111) #使用axisartist.Subplot方法创建一个绘图区对象ax
fig.add_axes(ax) #将绘图区对象添加到画布中
ax.plot(X, Y, label=expr) #绘制函数图形
ax.axis[:].set_visible(False) #隐藏原来的实线矩形
ax.axis["x"]=ax.new_floating_axis(0, 0, axis_direction="bottom") #添加x轴
ax.axis["y"]=ax.new_floating_axis(1, 0, axis_direction="bottom") #添加y轴
ax.axis["x"].set_axisline_style("->", size=1.0) #给x坐标轴加箭头
ax.axis["y"].set_axisline_style("->", size=1.0) #给y坐标轴加箭头
plt.xlim(-max(X), max(X)) #设置横坐标范围
plt.ylim(-max(Y), max(Y)) #设置纵坐标范围
ax.text(-1.0, max(Y), 'y', fontsize=12) #标注y轴
ax.annotate(text='x', xy=(max(X), 0), xycoords='data', xytext=(+0, +5), textcoords='offset points', fontsize=12) #标注x轴
plt.legend()
plt.show()
plt.savefig("func_figure.png")
if __name__=="__main__":
while True:
expr=input("请输入函数表达式(quit退出循环):")
if "quit" in expr:
break
elif "log" in expr: #画对数函数
X=np.linspace(0.001, 10, 100)
elif "asin" in expr: #画反正弦函数
X=np.linspace(-1, 1, 100)
elif "acos" in expr: #画反余弦函数
X=np.linspace(-1, 1, 100)
else:
X=np.linspace(-10, 10, 100)
elementary_func_draw(X, expr)
启动后,可输入,如:
e+1
x**2
2**x
log(x, 2)
log10(x)
log(x)
sin(x)
cos(x)
tan(x)
asin(x)
pi/2-atan(x)
等等试试