如何使用 Jupyter Nootebook 中的 Sympy 定义方程、微分和绘制方程?
How is it possible to define a equation, differentiate and plot it, using Sympy in Jupyter Nootebook?
我想在 Jupyter Notebook 中定义一个方程,微分并绘制方程。
import sympy as sp
from IPython.display import display
sp.init_printing()
import matplotlib.pyplot as plt
import numpy as np
x = sp.symbols('x')
def func(x):
a= sp.sympify("4/5")
return (x**3+a*x**2)
display(func(x))
def dfunc(x):
a = sp.diff(func(x),x)
return a
display(dfunc(x))
x = np.linspace(-10,10,20)
plt.plot(x,func(x))
plt.plot(x,dfunc(x)) # doesn't work
display(dfunc(x))
显示了想要的功能,但 plt.plot(x,dfunc(x))
returns 错误消息 ValueError: cannot derive by this array
有谁知道剧情怎么弄的吗?
(它也不适用于 sp.integrate(func(x),x)
而不是 sp.diff(func(x),x)
。只返回另一条错误消息 ValueError: Invalid limits given: ...
)
非常感谢。
马蒂亚斯
您可以使用 SymPy plot
函数而不是 matplotlib
函数。 matplotlib plot 函数需要数组作为输入,而 sympy 函数接受 sympy 表达式(然后计算值以为 matplotlib 创建数组):
In [36]: import sympy as sym
In [37]: a = sym.Rational(4, 5)
In [38]: x = sym.Symbol('x')
In [39]: f = x**3 + a*x**2
In [40]: f
Out[40]:
2
3 4⋅x
x + ────
5
In [41]: f.diff(x)
Out[41]:
2 8⋅x
3⋅x + ───
5
In [42]: sym.plot(f.diff(x))
我想在 Jupyter Notebook 中定义一个方程,微分并绘制方程。
import sympy as sp
from IPython.display import display
sp.init_printing()
import matplotlib.pyplot as plt
import numpy as np
x = sp.symbols('x')
def func(x):
a= sp.sympify("4/5")
return (x**3+a*x**2)
display(func(x))
def dfunc(x):
a = sp.diff(func(x),x)
return a
display(dfunc(x))
x = np.linspace(-10,10,20)
plt.plot(x,func(x))
plt.plot(x,dfunc(x)) # doesn't work
display(dfunc(x))
显示了想要的功能,但 plt.plot(x,dfunc(x))
returns 错误消息 ValueError: cannot derive by this array
有谁知道剧情怎么弄的吗?
(它也不适用于 sp.integrate(func(x),x)
而不是 sp.diff(func(x),x)
。只返回另一条错误消息 ValueError: Invalid limits given: ...
)
非常感谢。
马蒂亚斯
您可以使用 SymPy plot
函数而不是 matplotlib
函数。 matplotlib plot 函数需要数组作为输入,而 sympy 函数接受 sympy 表达式(然后计算值以为 matplotlib 创建数组):
In [36]: import sympy as sym
In [37]: a = sym.Rational(4, 5)
In [38]: x = sym.Symbol('x')
In [39]: f = x**3 + a*x**2
In [40]: f
Out[40]:
2
3 4⋅x
x + ────
5
In [41]: f.diff(x)
Out[41]:
2 8⋅x
3⋅x + ───
5
In [42]: sym.plot(f.diff(x))