You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from sympy import *
from convert_formula import *
def solve_differential_equation(input):
"""
求解微分方程
"""
input = convert_formula(input)
input = input.replace("''", ".diff(x,2)")
input = input.replace("'", ".diff(x)")
input = input.replace("y", "y(x)")
x = symbols('x')
y = symbols('y', cls=Function)
l = input.split('=')
diffeq = Eq(sympify(l[0]), sympify(l[1]))
result = dsolve(diffeq, y(x))
return result
def test_differential_equation():
"""
测试求解微分方程的函数
"""
input = "y''+2y'+3y=0"
result = solve_differential_equation(input)
assert str(result) == 'Eq(y(x), (C1*sin(sqrt(2)*x) + C2*cos(sqrt(2)*x))*exp(-x))'
input = "y'-2y=3"
result = solve_differential_equation(input)
assert str(result) == 'Eq(y(x), C1*exp(2*x) - 3/2)'
input = "y'+2y=3"
result = solve_differential_equation(input)
assert str(result) == 'Eq(y(x), C1*exp(-2*x) + 3/2)'
def UI():
"""
微分方程求解器的用户界面
"""
while True:
inputs = input("请输入微分方程输入q退出只支持自变量为x因变量为y")
if inputs == "q":
break
result = solve_differential_equation(inputs)
print("解为:")
pprint(result)
if __name__ == "__main__":
test_differential_equation()
UI()