python实现数学函数图像

预备知识

使用python绘制基本初等函数

在数学里,基本初等函数包括幂函数、指数函数、对数函数、三角函数、反三角函数、常数函数。不同函数的定义:

python 幂函数 拟合 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 库的数值表示函数

python 幂函数 拟合 python画幂函数图像_开发语言_02

math 库的幂对数函数

python 幂函数 拟合 python画幂函数图像_Python_03

math 库的三角运算函数

python 幂函数 拟合 python画幂函数图像_坐标轴_04

示例

具有图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)绘制数学函数图像例子,在此不多说,可见 后面部分。 

下面的例子,需要用到数据处理库numpy和超强的图像库matplotlib,这两个属于第三方库(模块),需要安装后使用【关于“Python第三方模块(库、包)安装、卸载与查看”详情】。

Python使用numpy和matplotlib实现函数可视化,先看运行效果:

python 幂函数 拟合 python画幂函数图像_开发语言_05

源码如下: 

#参考
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)

等等试试