numpy 求函数的对数

yws3nbqq  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(75)

我有一个函数,我可以画出来。现在我想画出这个函数的对数。Python说log10()不是为函数定义的(我理解这一点)。所以问题是:我如何画出函数f(x,a)=a*(x**2)的对数?

dzjeubhm

dzjeubhm1#

说matplotlib可以绘制函数是误导性的。Matplotlib只能绘制值。
如果你的函数是

f = lambda x,a : a * x**2

首先需要为x创建一个值数组,并定义a

a=3.1
x = np.linspace(-6,6)

然后可以通过以下方式绘制数组y = f(x,a)

ax.plot(x,y)

如果你现在想绘制f的对数,你真正需要做的是绘制数组y的对数。所以你要创建一个新的数组

y2 = np.log10(y)

然后把它画出来

ax.plot(x,y2)

在某些情况下,与其在线性尺度上显示函数的对数,不如在对数尺度上显示函数本身。这可以通过将matplotlib中的轴设置为对数并在该对数尺度上绘制初始数组y来完成。

ax.set_yscale("log", nonposy='clip')
ax.plot(x,y)

下面是这三种情况的一个典型例子:

import matplotlib.pyplot as plt
import numpy as np

#define the function
f = lambda x,a : a * x**2

#set values
a=3.1
x = np.linspace(-6,6)

#calculate the values of the function at the given points
y =  f(x,a)
y2 = np.log10(y)
# y and y2 are now arrays which we can plot

#plot the resulting arrays
fig, ax = plt.subplots(1,3, figsize=(10,3))

ax[0].set_title("plot y = f(x,a)")
ax[0].plot(x,y) # .. "plot f"

ax[1].set_title("plot np.log10(y)")
ax[1].plot(x,y2) # .. "plot logarithm of f"

ax[2].set_title("plot y on log scale")
ax[2].set_yscale("log", nonposy='clip')
ax[2].plot(x,y) # .. "plot f on logarithmic scale"

plt.show()

krcsximq

krcsximq2#

如果你的困难是计算以10为底的对数,使用

def g(x, a):
    return math.log(f(x, a)) / math.log(10)

或只是

def log10(x):
    return math.log(x) / math.log(10)

这会给出非正值的错误,这正是你想要的。它使用标准身份
以x为底的对数b = log(x)/ log(b)
log()函数使用哪个基都无关紧要:你会得到相同的答案。

相关问题