python怎么画参数函数图像_用Python绘制带参数的函数图像

上一次我们讲解了利用Python的2D绘图库matplotlib来绘制函数图像(用Python画函数图像),下面我们来讨论如何绘制带参数的函数图像。

下面我们用正态分布的概率密度在做例子(概率密度的图像为正态分布曲线),其概率密度如下:

用Python绘制带参数的函数图像

概率密度中包含两个参数,其中σ为分布的标准差,μ为分布的均值。

首先,根据概率密度公式,我们可以得到如下映射方法。其中参数u为均值,s为标准差;代码中的math.exp为计算自然对数e的幂,math.sqrt为开根号,math.pi为圆周率π。import math

def f_standard_normal_distribution(x,u,s):

return math.exp((-(x-u)**2)/2*(s**2))/(math.sqrt(2*math.pi)*s)

下面,我们在绘制方法中添加参数,并将参数传到映射方法中(因为需要对应传参,此时的draw_function不能再将映射方法作为参数了)。def draw_function(a,b,density,u,s):

x=numpy.linspace(a,b,density)

y=[f_standard_normal_distribution(i,u,s) for i in x]

pyplot.plot(x,y)

pyplot.show()

此时调用draw_function函数绘制正态分布曲线的结果如下:draw_function(-3,3,600,0,1)

用Python绘制带参数的函数图像【完整代码】如下:

import matplotlib.pyplot as pyplot

import numpy

import math

def draw_function(a,b,density,u,s):

x=numpy.linspace(a,b,density)

y=[f_standard_normal_distribution(i,u,s) for i in x]

pyplot.plot(x,y)

pyplot.show()

def f_standard_normal_distribution(x,u,s):

return math.exp((-(x-u)**2)/2*(s**2))/(math.sqrt(2*math.pi)*s)

draw_function(-3,3,600,0,1)

下面,我们来对以上的代码做一些优化:

1.为了可以将映射方法作为参数传入,将传入draw_function的函数参数改替换数组,并将映射方法传入。def draw_function(a,b,density,f,param):

x=numpy.linspace(a,b,density)

y=[f(i,param) for i in x]

pyplot.plot(x,y)

pyplot.show()

对应的,也需要将映射方法中传入的参数替换为数组。def f_standard_normal_distribution(x,param):

return math.exp((-(x-param[0])**2)/2*(param[1]**2))/(math.sqrt(2*math.pi)*param[1])

调用方法也对应地修改为:draw_function(-3,3,600,f_standard_normal_distribution,[0,1])

2.因为传递参数的数组可能并不符合映射方法的需要,如数组个数少于映射方法需要的参数个数,则会导致异常抛出。因此需在映射方法中对参数数组作出检验。if len(param)!=2:

return 0

至此,利用matplotlib绘制带参数的函数图像的小模块就更新完成了。【完整代码】如下:

import matplotlib.pyplot as pyplot

import numpy

import math

def draw_function(a,b,density,f,param):

x=numpy.linspace(a,b,density)

y=[f(i,param) for i in x]

pyplot.plot(x,y)

pyplot.show()

def f_standard_normal_distribution(x,param):

if len(param)!=2:

return 0

return math.exp((-(x-param[0])**2)/2*(param[1]**2))/(math.sqrt(2*math.pi)*param[1])

draw_function(-3,3,600,f_standard_normal_distribution,[0,1])

其他内容

运用为图表添加标题、修改颜色,以及matplotlib绘制散点图、直方图等其他图表的内容会在日后逐步更新。

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页