如何在同情中解决这个微分方程?

Ere*_*evi 0 sympy

我想在同意中解决这个微分方程:

f'(x) = f(x+1)
Run Code Online (Sandbox Code Playgroud)

我试试这个:

from sympy import *
x = symbols("x")
f = Function("f")
f_ = Derivative(f,x)
dsolve(f_(x) - f(x+1), f(x))
Run Code Online (Sandbox Code Playgroud)

但得到一个错误:"'衍生'对象不可调用".

当我用"f_"替换"f_(x)"时,我得到一个不同的错误:"TypeError:doit()缺少1个必需的位置参数:'self'".

这个的正确语法是什么?

Wrz*_*mft 5

提出论证后你必须要区分.以下适用于我:

from sympy import *
x = symbols("x")
f = Function("f")
f_ = Derivative(f(x),x)
dsolve(f_ - f(x+1), f(x))
Run Code Online (Sandbox Code Playgroud)

旁注:解决您的实际问题

你所拥有的本质上是一个DDE,只是时间指向错误的方向.DDE的典型形式是g'(t)= -g(t-1).有了我的这个模块,我们可以用数字解决这个问题:

from jitcdde import y, t, jitcdde
from numpy import arange

f = [-y(0,t-1)]
DDE = jitcdde(f)

DDE.constant_past([1.0])

DDE.step_on_discontinuities()
times = arange(0,1000,0.1) + DDE.t
solution = [(time,DDE.integrate(time)[0]) for time in times]
Run Code Online (Sandbox Code Playgroud)

似乎无论我们如何初始化过去,解决方案最终会收敛到exp(a·t)·sin(b·t)形式的某些东西,下面指定了一些常数ab.事实上,如果不是DDE.constant_past([1.0])我们使用

a = -0.318131477176434
b =  1.33723563936212
DDE.past_from_function([exp(a*t)*sin(b*t)])
Run Code Online (Sandbox Code Playgroud)

解决方案非常好地匹配exp(a·t)·sin(b·t).

  • 你们两个可能对https://math.stackexchange.com/questions/61818/how-to-solve-differential-equations-of-the-form-fx-fx-a感兴趣. (2认同)