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.

82 lines
2.8 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 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()