2017-10-03 2 views
1

私はsympyを使ってsin(b * x)のような特定の関数を持っていますが、微分と逆畳み込みの式がありますが、これらの3つの関数をmatplotlibにプロットする必要があります。私の問題はmatplotlibでプロットするために関数をnumpyに正しく変換できないことです。私はlambify関数sympyページのドキュメントに従っているが動作しません。sympl関数をmatplotlibでプロットする方法は?

from sympy import Symbol, diff, integrate, sin, cos, Function 
from sympy.utilities.lambdify import lambdify, implemented_function 
from sympy.abc import x 

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 

def signal(b,x): 
    return sin(b*x) 

def derivative(b,x): 
    yprime = diff(signal(b,x), x) 
    return yprime 

def antiderivative(b,x): 
    anti = integrate(signal(b,x), x) 
    return anti 

b = 5 

evalfunc = lambdify((b,x), signal(b,x), modules=['numpy']) 
evalderiv = lambdify((b,x), derivative(b,x), modules=['numpy']) 
evalantideriv = lambdify((b,x), antiderivative(b,x), modules=['numpy']) 

axis_color = 'lightgoldenrodyellow' 
fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
fig.subplots_adjust(left=0.25, bottom=0.25) 
t = np.arange(-10, 10, 0.001) 

[line] = ax.plot(t, evalfunc(b,t), linewidth=2, color='red') 
[line2] = ax.plot(t, evalderiv(b,t), linewidth=2, color='blue') 
[line3] = ax.plot(t, evalantideriv(b,t), linewidth=2, color='blue') 
ax.set_xlim([-10, 10]) 
ax.set_ylim([-5, 5]) 

ax.grid() 
plt.show() 

それはax.plotとValueErrorに失敗します:http://docs.sympy.org/latest/modules/utilities/lambdify.html

私はこのコードを持っているシーケンスが大きすぎます。 32より大きくすることはできません

+0

あなた 'evalfunc'定義し、次の2行はsympy 1.0に私のためにエラーを上げ、MPL 2.0.0、1.12.1 numpyの。前の行で 'b'を整数に設定しているからです。これらのどのバージョンを実行していますか? – saintsfan342000

+0

私はキャノピーを使用しています。私はNumpy 1.11.3-3 mpl 2.0.0-3 sympy 1.0-2を持っています。私はb = Symbol( 'b')のようにbを使ってみましたが、AttributeErrorがあります: 'Mul'オブジェクトにax.plotの属性 'sin'がありません – Reyjhonny

答えて

0

コードはかなり実用的な例ではありませんが、変更する必要はありません。

派生する前にbを実際のシンボルとして宣言する必要があります。 数値評価の前にb=5と設定します。

参照:

from sympy import Symbol, diff, integrate, sin, cos, Function 
from sympy.utilities.lambdify import lambdify, implemented_function 
from sympy.abc import x 

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider, Button, RadioButtons 

def signal(b,x): 
    return sin(b*x) 

def derivative(b,x): 
    yprime = diff(signal(b,x), x) 
    return yprime 

def antiderivative(b,x): 
    anti = integrate(signal(b,x), x) 
    return anti 

b = Symbol('b', real=True) 

evalfunc = lambdify((b,x), signal(b,x), modules=['numpy']) 
evalderiv = lambdify((b,x), derivative(b,x), modules=['numpy']) 
evalantideriv = lambdify((b,x), antiderivative(b,x), modules=['numpy']) 

axis_color = 'lightgoldenrodyellow' 
fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 
fig.subplots_adjust(left=0.25, bottom=0.25) 
t = np.arange(-10, 10, 0.001) 

b = 5 

[line] = ax.plot(t, evalfunc(b,t), linewidth=2, color='red') 
[line2] = ax.plot(t, evalderiv(b,t), linewidth=2, color='blue') 
[line3] = ax.plot(t, evalantideriv(b,t), linewidth=2, color='blue') 
ax.set_xlim([-10, 10]) 
ax.set_ylim([-5, 5]) 

ax.grid() 
plt.show() 
関連する問題