2016-12-04 13 views
0

私はプロットできる関数を持っています。 ここでは、この関数の対数をプロットしたいと思います。 Pythonはlog10()が関数に対して定義されていないと言います(と私はそれを理解しています)。 質問は、f(x、a)= a *(x ** 2)のような関数の対数をプロットするにはどうすればよいですか?Python:関数の対数をプロットする

+0

はあなたの問題対数ベース10を計算するか、値をプロットしますか?後者の場合、他のプロットとはどのように違いますか?また、 'f(x、a)'は2つの値の関数です。あなたは 'x''と' 'a''の変更をプロットしたいですか? –

+0

xは私の変数でなければならず、関数をプロットするときに私が入れることができるパラメータです。問題は、私が正しい関数を定義することができないことです。 g(x、a)= log10(f(x、a))これは、関数をログに入れることができないためです。 – user7248647

+0

私は基本的にプログラムに言っていることを意味します:与えられたf(x、a)(私がすでにプロットした)は、その関数のすべての点でlog10()を使ってプロットします。 – user7248647

答えて

0

matplotlibが関数をプロットできると言うのは間違いです。 Matplotlibは値をプロットするだけです。

あなたの機能があるので、場合

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

あなたが最初にあなたが、その後

経由配列 y = f(x,a)をプロットすることができ xの値の配列を作成し、 a

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

を定義する必要があるだろう

ax.plot(x,y) 

ログをプロットする場合はあなたが実際に行う必要があるのは、配列の対数をプロットすることですy。ですから、新しい配列

y2 = np.log10(y) 

を作成し、それにいくつかのケースでは

ax.plot(x,y2) 

をプロットしたい、代わりにリニアスケール上の関数の対数を示すのではなく、機能を表示するには良いかもしれ対数スケールでそれ自身である。これは、matplotlibの軸を対数に設定して、最初の配列yをその対数目盛にプロットすることによって行うことができます。だからここ

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

は、すべての3例のショーケースの例である:

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

0

あなたの難易度は対数の底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のログ=ログ(X)/ログ(b)は

を使用していますそれはlog()機能が使用するベースはしても問題ではない:あなたは同じを取得します任意のベースに対する答え。

関連する問題