在用户定义函数中用Sympy求解微分方程的线性系统

时间:2019-03-31 07:45:53

标签: python-3.x sympy

t, C1, C2= symbols("t C1 C2")
x, y =  symbols("x y", cls = Function, Function = True)
eq1 = Eq(3 * diff(x(t), t), y(t))
eq2 = Eq(diff(y(t),t), - 3 * y(t) - 15 * x(t) + 4 * 1)
soln = dsolve((eq1, eq2), ics = {x: 5, y: 0})
soln

效果很好。 但是

t, C1, C2= symbols("t C1 C2")
x, y =  symbols("x y", cls = Function, Function = True)
ics = {x: 5, y: 0}
eq1 = Eq(3 * diff(x(t), t), y(t))
eq2 = Eq(diff(y(t),t), - 3 * y(t) - 15 * x(t) + 4 * 1)
def solve_ode_ivp(eq1, eq2, ics):
    soln = dsolve((eq1, eq2), ics)
    return soln
solve_ode_ivp(eq1, eq2, ics)

给出错误消息TypeError:不可散列的类型:'dict'。 ics有问题,但我不知道为什么以及如何修改solve_ode_ivp才能正常工作。

1 个答案:

答案 0 :(得分:2)

在第一个版本中输入ics= {x:5 , y: 0}时,您指定可选参数ics将以该字典作为值,在第二个版本中,您将其作为第二个参数(不是ics)发送给

您可以将其更改为此:

t, C1, C2= symbols("t C1 C2")
x, y =  symbols("x y", cls = Function, Function = True)
ics = {x: 5, y: 0}
eq1 = Eq(3 * diff(x(t), t), y(t))
eq2 = Eq(diff(y(t),t), - 3 * y(t) - 15 * x(t) + 4 * 1)
def solve_ode_ivp(eq1, eq2, ics):
    soln = dsolve((eq1, eq2), ics=ics)
    return soln
solve_ode_ivp(eq1, eq2, ics)