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

时间:2017-10-15 12:25:39

标签: sympy

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

f'(x) = f(x+1)

我试试这个:

from sympy import *
x = symbols("x")
f = Function("f")
f_ = Derivative(f,x)
dsolve(f_(x) - f(x+1), f(x))

但得到错误:“'衍生'对象不可调用”。

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

这个的正确语法是什么?

2 个答案:

答案 0 :(得分:5)

您必须在提供参数后进行区分。 以下适用于我:

from sympy import *
x = symbols("x")
f = Function("f")
f_ = Derivative(f(x),x)
dsolve(f_ - f(x+1), f(x))

旁注:解决您的实际问题

你所拥有的只是一个DDE,只是时间指向错误的方向。 DDE的典型形式是 g'(t)= -g(t-1)。使用this module of mine,我们可以用数字解决这个问题:

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]

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

a = -0.318131477176434
b =  1.33723563936212
DDE.past_from_function([exp(a*t)*sin(b*t)])

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

答案 1 :(得分:0)

有些东西告诉我,我们无法隐藏。 这不是一个有用的答案。

>>> from sympy import *
>>> f = Function('f')
>>> var('x')
x
>>> Eq(f(x).diff(x,x)-f(x+1))
Eq(-f(x + 1) + Derivative(f(x), x, x), 0)
>>> dsolve(_,f(x))
Eq(f(x), C1 + x*(C2 + Integral(f(x + 1), x)) - Integral(x*f(x + 1), x))
>>> latex(_)
'f{\\left (x \\right )} = C_{1} + x \\left(C_{2} + \\int f{\\left (x + 1 \\right )}\\, dx\\right) - \\int x f{\\left (x + 1 \\right )}\\, dx'

As a graphic(尝试了各种方法将数学表示放在这里。)