Python:绘制函数的对数

时间:2016-12-04 19:12:59

标签: python numpy math matplotlib logarithm

我有一个能够绘制的功能。 现在我想绘制这个函数的对数。 Python说log10()没有为函数定义(我理解)。 所以问题是:如何绘制函数的对数,如f(x,a)= a *(x ** 2)?

2 个答案:

答案 0 :(得分:1)

如果您的难度是计算对数基数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 base的log b = log(x)/ log(b)

log()函数使用哪个基数甚至无关紧要:您可以为任何基础获得相同的答案。

答案 1 :(得分:1)

说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()

enter image description here