parent
b209d81ccf
commit
5e80a7840e
@ -0,0 +1,71 @@
|
||||
from sympy import *
|
||||
from convert_formula import *
|
||||
|
||||
def limitation(series_expr):
|
||||
"""
|
||||
计算数列的极限并判断敛散性
|
||||
:param series_expr: 数列通项表达式
|
||||
:return: (极限值, 是否收敛)
|
||||
"""
|
||||
series_expr = convert_formula(series_expr)
|
||||
series_expr = sympify(series_expr)
|
||||
n = symbols('n')
|
||||
limit_value = limit(series_expr, n, oo)
|
||||
try:
|
||||
limit_value = float(limit_value)
|
||||
return limit_value, True
|
||||
except:
|
||||
return limit_value, False
|
||||
|
||||
def partial_sum(series_expr, n_value = ''):
|
||||
"""
|
||||
计算数列的前n项和
|
||||
:param series_expr: 数列通项表达式
|
||||
:param n_value: 项数
|
||||
:return: 数列的前n项和, 部分和的极限, 级数敛散性
|
||||
"""
|
||||
series_expr = str(series_expr).replace('n', 'i')
|
||||
series_expr = convert_formula(series_expr)
|
||||
series_expr = sympify(series_expr)
|
||||
i, n = symbols('i n')
|
||||
partial_sum = simplify(summation(series_expr, (i, 1, n)))
|
||||
sum_infinit, convergent = limitation(partial_sum)
|
||||
if n_value != '':
|
||||
partial_sum = partial_sum.subs(n, n_value)
|
||||
return str(partial_sum), sum_infinit, convergent
|
||||
|
||||
def test_functions():
|
||||
"""
|
||||
测试函数
|
||||
"""
|
||||
assert limitation('1/n') == (0, True)
|
||||
assert partial_sum('1/2^n') == ('1 - 1/2**n', 1, True)
|
||||
|
||||
def UI():
|
||||
while True:
|
||||
command = input('请选择功能 1.数列极限计算及敛散性判断 2.数列前n项和及级数敛散性判断 3.退出')
|
||||
if command == '1':
|
||||
series_expr = input('请输入数列通项表达式')
|
||||
limit_value, convergent = limitation(series_expr)
|
||||
print('数列的极限为', limit_value)
|
||||
if convergent:
|
||||
print('数列收敛')
|
||||
else:
|
||||
print('数列发散')
|
||||
elif command == '2':
|
||||
series_expr = input('请输入数列通项表达式')
|
||||
n_value = input('请输入项数,若求表达式请留空')
|
||||
if n_value != '':
|
||||
n_value = int(n_value)
|
||||
partial, sum_infinit, convergent = partial_sum(series_expr, n_value)
|
||||
print('数列的前n项和为{}'.format(partial))
|
||||
if convergent:
|
||||
print('级数收敛')
|
||||
else:
|
||||
print('级数发散')
|
||||
elif command == '3':
|
||||
break
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_functions()
|
||||
UI()
|
||||
Loading…
Reference in new issue