|
|
from sympy import *
|
|
|
from convert_formula import *
|
|
|
|
|
|
def differential(function, point):
|
|
|
"""
|
|
|
计算函数在指定点的导数
|
|
|
:param function: 函数表达式
|
|
|
:param point: 自变量的取值点
|
|
|
:return: 导数值
|
|
|
"""
|
|
|
# 转换函数表达式为SymPy表达式
|
|
|
independent_variable, function = split_function(function)
|
|
|
function = sympify(convert_formula(function))
|
|
|
independent_variable=symbols(independent_variable)
|
|
|
derivative = diff(function, independent_variable)
|
|
|
derivative_value = derivative.subs(independent_variable, point)
|
|
|
return derivative_value
|
|
|
|
|
|
def differential_function(function):
|
|
|
"""
|
|
|
计算函数的导数
|
|
|
:param function: 函数表达式
|
|
|
:return: 导函数
|
|
|
"""
|
|
|
# 转换函数表达式为SymPy表达式
|
|
|
independent_variable, function = split_function(function)
|
|
|
function = sympify(convert_formula(function))
|
|
|
independent_variable=symbols(independent_variable)
|
|
|
derivative = diff(function, independent_variable)
|
|
|
return str(derivative)
|
|
|
|
|
|
def integration(function):
|
|
|
"""
|
|
|
计算函数的积分
|
|
|
:param function: 函数表达式
|
|
|
:return: 积分公式
|
|
|
"""
|
|
|
# 转换函数表达式为SymPy表达式
|
|
|
independent_variable, function = split_function(function)
|
|
|
function = sympify(convert_formula(function))
|
|
|
independent_variable=symbols(independent_variable)
|
|
|
integral = integrate(function, independent_variable)
|
|
|
return str(integral)+'+C'
|
|
|
|
|
|
def test_differential():
|
|
|
"""
|
|
|
测试微分函数
|
|
|
"""
|
|
|
function = 'f(x)=x^2'
|
|
|
point = 2
|
|
|
assert differential(function, point) == 4
|
|
|
assert differential_function(function) == '2*x'
|
|
|
assert integration(function) == 'x**3/3+C'
|
|
|
|
|
|
def UI():
|
|
|
"""
|
|
|
用户交互界面
|
|
|
"""
|
|
|
while True:
|
|
|
print('请选择功能 1. 微分 2. 积分 3. 返回')
|
|
|
choice = input('请输入您的选择:')
|
|
|
if choice == '1':
|
|
|
function = input('请输入函数表达式:(注:只支持形如f(x)=的表达式,不支持y=的表达式)')
|
|
|
point = input('请输入自变量的取值点,求导函数请留空:')
|
|
|
if point == '':
|
|
|
print('导函数为:', differential_function(function))
|
|
|
elif 'pi' in point:
|
|
|
print('导数值为:', differential(function, point))
|
|
|
else:
|
|
|
print('导数值为:', differential(function, float(point)))
|
|
|
elif choice == '2':
|
|
|
function = input('请输入函数表达式:(注:只支持形如f(x)=的表达式,不支持y=的表达式)')
|
|
|
print('积分公式为:', integration(function))
|
|
|
elif choice == '3':
|
|
|
print('谢谢使用')
|
|
|
break
|
|
|
else:
|
|
|
print('输入错误,请重新输入')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
test_differential()
|
|
|
UI() |