【问题标题】:Plotting Sympy Result to Particular Solution of Differential Equation为微分方程的特定解绘制 Sympy 结果
【发布时间】:2016-12-22 06:07:16
【问题描述】:

到目前为止,对于任何给定的质量和阻力系数,我已经设法找到该方程的特定解。然而,我还没有找到一种方法来绘制解决方案,甚至评估特定点的解决方案。我真的很想找到一种方法来绘制解决方案。

from sympy import *

m = float(raw_input('Mass:\n> '))
g = 9.8
k = float(raw_input('Drag Coefficient:\n> '))
f = Function('f')
f1 = g * m
t = Symbol('t')
v = Function('v')
equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0)
C1 = Symbol('C1')
C1_ic = solve(equation.rhs.subs({t:0}),C1)[0]
equation = equation.subs({C1:C1_ic})

【问题讨论】:

  • 你能帮我弄清楚你想要制作什么样的情节吗?你的 x 轴和 y 轴变量是什么?
  • 我想绘制速度 (v) 与时间 (t) 的关系

标签: python python-2.7 matplotlib sympy


【解决方案1】:

为了完整起见,您也可以使用 Sympy 的 plot,如果您想要“快速而肮脏”的情节,这可能更方便。

plot(equation.rhs,(t,0,10))

【讨论】:

    【解决方案2】:

    导入这些库(seaborn 只是让情节变得漂亮)。

    from matplotlib import pyplot as plt
    import seaborn as sns
    import numpy as np
    

    然后将其粘贴到最后。这将绘制时间 t 与速度 v(t) 的关系。

    # make a numpy-ready function from the sympy results
    func = lambdify(t, equation.rhs,'numpy')
    xvals = np.arange(0,10,.1)
    yvals = func(xvals)
    
    # make figure
    fig, ax = plt.subplots(1,1,subplot_kw=dict(aspect='equal'))     
    ax.plot(xvals, yvals)
    ax.set_xlabel('t')
    ax.set_ylabel('v(t)')
    plt.show()
    

    我得到这样的图,质量为 2,阻力系数为 2。

    【讨论】:

    【解决方案3】:

    如果我理解正确,您想代表解决方案的右侧,这是多种方法之一:

    from sympy import *
    import numpy as np
    import matplotlib.pyplot as plt
    
    m = float(raw_input('Mass:\n> '))
    g = 9.8
    k = float(raw_input('Drag Coefficient:\n> '))
    f = Function('f')
    f1 = g * m
    t = Symbol('t')
    v = Function('v')
    equation = dsolve(f1 - k * v(t) - m * Derivative(v(t)), 0)
    C1 = Symbol('C1')
    C1_ic = solve(equation.rhs.subs({t: 0}), C1)[0]
    equation = equation.subs({C1: C1_ic})
    
    t1 = np.arange(0.0, 50.0, 0.1)
    y1 = [equation.subs({t: tt}).rhs for tt in t1]
    
    plt.figure(1)
    plt.plot(t1, y1)
    plt.show()
    

    【讨论】:

    • 最好使用lambdify 创建一个numpy 函数,而不是使用subs 和列表推导来评估函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多