Sympy 用情节解决
Sympy dsolve with plots
我正在使用 Sympy 求解 ODE。等式是
ODE
为了解决这个问题,我使用了这个小代码,returns 这个结果。
from sympy import *
from numpy import *
import matplotlib.pyplot as plt
x = symbols('x')
y = Function('y')
f = y(x)
print(f)
edo = Eq(f.diff()+3*x**2*f, 6*x**2)
print(edo)
edoSolve = dsolve(edo, f)
print(edoSolve)
C1*exp(-x**3) + 2
我的问题是,如何绘制 x 范围为 0 到 10 的结果?
首先将这两行结合起来是有问题的:
from sympy import *
from numpy import *
这两个库定义了许多同名的函数,将它们混在一起会导致问题。为了清楚起见,最好做类似的事情:
import sympy as sym
import numpy as np
如果您为除了要绘制的符号之外的所有符号都给出数字,则只能绘制一个 sympy 表达式(即本例中的 x
)。这意味着您需要为积分常数 C1
提供一个具体值。你可以通过给 dsolve
一个初始条件 (ics
) 参数来得到它。此外,由于 dsolve
returns 方程式,您需要选择方程式的一侧作为要绘制的表达式。完成后 sym.plot
函数将完全按照您的要求执行:
In [10]: import sympy as sym
In [11]: sol = sym.dsolve(edo, f, ics={f.subs(x, 0): 1})
In [12]: sol
Out[12]:
3
-x
y(x) = 2 - ℯ
In [13]: sym.plot(sol.rhs, (x, 0, 10))
Out[13]: <sympy.plotting.plot.Plot at 0x7f346de1caf0>
如果您想一起显示 C1
的多个值的解决方案,您可以附加图:
from sympy import symbols, Function, Eq, dsolve, plot
x = symbols('x')
y = Function('y')
f = y(x)
edo = Eq(f.diff() + 3 * x ** 2 * f, 6 * x ** 2)
edoSolve = dsolve(edo, f)
plot1 = plot(show=False)
for c1 in range(-5, 6):
plotc1 = plot(edoSolve.subs('C1', c1).rhs, (x, 0, 10), show=False)
plot1.append(plotc1[0])
plot1.show()
我正在使用 Sympy 求解 ODE。等式是
ODE
为了解决这个问题,我使用了这个小代码,returns 这个结果。
from sympy import *
from numpy import *
import matplotlib.pyplot as plt
x = symbols('x')
y = Function('y')
f = y(x)
print(f)
edo = Eq(f.diff()+3*x**2*f, 6*x**2)
print(edo)
edoSolve = dsolve(edo, f)
print(edoSolve)
C1*exp(-x**3) + 2
我的问题是,如何绘制 x 范围为 0 到 10 的结果?
首先将这两行结合起来是有问题的:
from sympy import *
from numpy import *
这两个库定义了许多同名的函数,将它们混在一起会导致问题。为了清楚起见,最好做类似的事情:
import sympy as sym
import numpy as np
如果您为除了要绘制的符号之外的所有符号都给出数字,则只能绘制一个 sympy 表达式(即本例中的 x
)。这意味着您需要为积分常数 C1
提供一个具体值。你可以通过给 dsolve
一个初始条件 (ics
) 参数来得到它。此外,由于 dsolve
returns 方程式,您需要选择方程式的一侧作为要绘制的表达式。完成后 sym.plot
函数将完全按照您的要求执行:
In [10]: import sympy as sym
In [11]: sol = sym.dsolve(edo, f, ics={f.subs(x, 0): 1})
In [12]: sol
Out[12]:
3
-x
y(x) = 2 - ℯ
In [13]: sym.plot(sol.rhs, (x, 0, 10))
Out[13]: <sympy.plotting.plot.Plot at 0x7f346de1caf0>
如果您想一起显示 C1
的多个值的解决方案,您可以附加图:
from sympy import symbols, Function, Eq, dsolve, plot
x = symbols('x')
y = Function('y')
f = y(x)
edo = Eq(f.diff() + 3 * x ** 2 * f, 6 * x ** 2)
edoSolve = dsolve(edo, f)
plot1 = plot(show=False)
for c1 in range(-5, 6):
plotc1 = plot(edoSolve.subs('C1', c1).rhs, (x, 0, 10), show=False)
plot1.append(plotc1[0])
plot1.show()