我如何替换和数组到一个sympy方程,以便我可以绘制方程?



我使用dsolve在变量result中生成一个方程形式的结果。

我想画出这个方程在x_val数组中的取值范围,这样我就可以画出来了。我似乎无法找到一种方法来使用应用函数到x值。

import sympy as sy
import numpy as np
t,m,k,c  = sy.symbols('t m k c')
x = sy.Function('x')
diffeq = sy.Eq(x(t).diff(t, t) - x(t), sy.cos(t)) 
result = sy.dsolve(diffeq, ics={x(0): 0, sy.diff(x(t), t).subs(t,0): 0})
print(result)
x_val=np.linspace(0,10,100)

@ relentless的答案在这种情况下完成了工作。但是,evalf将把符号表达式求值为SymPy的Float数,这是另一个符号表达式。这种求值比较慢:如果你需要在多个点上求一个符号表达式的值,你有两个选择(在这种情况下)。

  1. 使用sympy的plot命令:
from sympy import plot
plot(result.rhs, (t, 0, 10))
  1. 将符号表达式转换为数值函数,并在numpy数组上对其进行计算。与之前的方法相反,这里您可以完全控制情节的外观:
import matplotlib.pyplot as plt
from sympy import lambdify
f = lambdify(t, result.rhs)
ts = np.linspace(0, 10, 100)
plt.figure()
plt.plot(ts, f(ts))
plt.show()

您可以像这样在返回的等式右侧使用evalf()

...
import matplotlib.pyplot as plt
...
ts = np.linspace(0, 10, 100)
xs = [result.rhs.evalf(subs = dict(t=t)) for t in ts]
plt.plot(ts, xs)
plt.show()

最新更新