sympy的dsolve函数

小记

翻译官方sympy库之ODE

想用来sympy求解线性方程,可是苦于网上资料太少,就想试着翻译。

后来发现有2个博客写的不错,传送门1,传送门2

User Functions

dsolve函数属于这个user functions 范畴内的。

这些函数是用 from sympy import *导入全局名称空间。这些函数(不像hint Functions),它只是为了普通用户使用Sympy。

s y m p y . s o l v e r s . o d e . d s o l v e \color{#008b45}{sympy.solvers.ode.dsolve} sympy.solvers.ode.dsolve

( ∗ e q ∗ , ∗ f u n c = N o n e ∗ , h i n t = ′ d e f a u l t ′ , s i m p l i f y = T r u e , i c s = N o n e , x i = N o n e , ∗ e t a = N o n e ∗ , ∗ x 0 = 0 ∗ , ∗ n = 6 ∗ , k w a r g s ) \color{#008b45}(*eq*, *func=None*, hint='default', simplify=True, ics=None, xi=None, \\*eta=None*, *x0=0*, *n=6*, kwargs) (eq,func=None,hint=default,simplify=True,ics=None,xi=None,eta=None,x0=0,n=6,kwargs)

可求解任意(支持的)常微分方程和常微分方程方程组。

对于单常微分方程

Usage

将认为它的方程组中的方程个数为1,

d s o l v e ( e q , f ( x ) , h i n t ) \color{#008b45}dsolve(eq, f(x), hint) dsolve(eq,f(x)hint) ->使用方法 hint在常微分方程组eq中求解f(x)。

Details

  • eq 它可以是可支持的任何常微分方程。它可以是一个等式,也可以是一个表达式,假设它等于0。
  • f(x) 它的导数构成了微分方程。在大多数情况下,我们不需要提供它,它会被自动算出(如果它不能被算出就会报错)
  • hint 它是你想让dsolve使用的求解方法。使用 c l a s s i f y _ o d e ( e q , f ( x ) ) \color{#008b45}{classify\_ode(eq, f(x))} classify_ode(eq,f(x)) 可以获得一个ODE的所有可以使用的方法。默认使用 c l a s s i f y _ o d e ( ) \color{#008b45}{classify\_ode()} classify_ode().
  • simplify 可以用 o d e s i m p ( ) \color{#008b45}{odesimp ()} odesimp()来简化。有关更多信息,请参见它的DocString。例如,关闭此选项可以禁用func解的求解或任意常数的简化。它仍然会与这个提示整合。注意,如果启用此选项,解决方案可能包含比ODE的顺序更多的任意常数。
  • xi and eta 是常微分方程的无穷小函数。它们是微分方程不变的点变换的李群的无穷小。用户可以为无穷小指定值。如果没有指定,xi和eta将在各种启发式的帮助下使用 i n f i n i t e s i m a l s ( ) \color{#008b45}{infinitesimals()} infinitesimals()进行计算。
  • ics 为微分方程的初始/边界条件集。它应该以类似于的形式 { f ( x 0 ) : x 1 , f ( x ) . d i f f ( x ) . s u b s ( x , x 2 ) : x 3 } \color{#0000ff}{\{f(x0): x1, f(x).diff(x).subs(x, x2): x3\}} {f(x0):x1,f(x).diff(x).subs(x,x2):x3}给出。对于幂级数解,如果没有指定初始条件,则假定为f(0)为c0,幂级数解为0。
  • x0 是那个要求解出的点。
  • n 给出要求解出的变量的指数

Hints

先跳

Tips

  • 你可以这样声明一个未知函数的导数:
from sympy import Function,Derivative
from sympy.abc import x    # x是一个独立变量
f= Function("f")(x)   #f是x的函数
f_=Derivative(f,x)   #f_是f对x的导数
  • 在test_ord .py可以看到一系列如何使用 d s o l v e ( ) \color{#008b45}{dsolve()} dsolve()的示例。
  • d s o l v e ( ) \color{#008b45}{dsolve()} dsolve()总是返回一个等式类(除了提示是all或all_Integral的情况)。如果可能的话,它将显式地为所求解的函数求解。否则,它返回一个隐式解。任意常数是名为C1、C2等的符号。
  • 因为所有的解在数学上都是等价的,所以对于ODE,一些提示可能会返回完全相同的结果。但是,通常两个不同的提示会以不同的格式返回相同的解决方案。两者应该是等价的。还要注意,有时任意常数在两个不同解中的值可能不相同,因为一个常数可能“吸收”了其他常数。
  • h e l p ( o d e . o d e < h i n t n a m e > ) \color{#008b45}{help(ode.ode_)} help(ode.ode<hintname>)可以获取关于特定提示的更多信息,其中是不带_Integral的提示的名称。

对于常微分方程组

Usage

d s o l v e ( e q , f u n c ) \color{#008b45}{dsolve(eq, func)} dsolve(eq,func) ->解常由x(t),y(t),z(t)等构成的微分方程组eq。

Details

eq 它可以是任意支持的常微分方程组它可以是一个等式,也可以是一个表达式,假设它等于0。

func 设x(t)和y(t)是一个变量的函数,该变量及其部分导数构成常微分方程的方程组。它将被自动检测(如果无法检测,则会引发一个错误)。

Examples

from sympy import Function, dsolve, Eq, Derivative, sin, cos, symbols
from sympy.abc import x
f=Function('f')
ans=dsolve(Derivative(f(x),x,x)+9*f(x),f(x))
print(ans)
#Eq(f(x), C1*sin(3*x) + C2*cos(3*x))

你可能感兴趣的:(断篇)