繁体   English   中英

使用 SYMPY 绘制微分方程的解

[英]Plotting a Solution of differential equation Using SYMPY

from sympy import *
import sympy as sp
from sympy.abc import *
import numpy as np
import matplotlib.pyplot as plt

x=sp.Function('x')
t=symbols('t')
w=int(input("enter the frequency in hz"))
eq= sp. Eq(x(t).diff(t,2)+w**2*x(t)-f*sp .cos(w*t),0)
c= sp. dsolve(eq,x(t),ics={x(0):0,x(t).diff(t).subs(t,0):sp .cos(w*t)})
d= lambdify(t,c,'numpy')
n= np. arange (0,10,1)
y=d(n)

输出错误:

名称“x”未定义!

如何纠正这个错误?

首先,如果你打印出你的c ,你会得到Eq(x(t), (f*t/880 + cos(440*t)/440)*sin(440*t)) 对于绘图,您需要通过c.rhs获得该等式的右侧。

另请注意(再次打印)您的c.rhs中仍然有符号f ,我们应该用您的数值替换它(我用w = 440替换了手动输入)。 这样我们就得到了c.rhs.subs(f, w)

然后 lambdify 正确执行,给我们一个纯数值数组,而不是符号数组,我们可以通过plt.plot(n, y)绘制。

总而言之,

[nav] In [29]: from sympy import *
          ...: import sympy as sp
          ...: 
          ...: from sympy.abc import *
          ...: import numpy as np
          ...: 
          ...: import matplotlib.pyplot as plt
          ...: x=sp.Function('x')
          ...: 
          ...: t=symbols('t')
          ...: w=440
          ...: 
          ...: eq= sp. Eq(x(t).diff(t,2)+w**2*x(t)-f*sp .cos(w*t),0)
          ...: c= sp. dsolve(eq,x(t),ics={x(0):0,x(t).diff(t).subs(t,0):sp .cos(w*t)})
          ...: 
          ...: d= lambdify(t,c.rhs.subs(f, w),modules='numpy')
          ...: n= np. arange (0,10,1)
          ...: 
          ...: 
          ...: y=d(n)
          ...: plt.plot(n, y)
          ...: plt.show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM