编写微分方程模块

main
Mu_Xin 10 months ago
parent 038b09b0ee
commit ef93c31df3

@ -0,0 +1,47 @@
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()
Loading…
Cancel
Save