设有一元多项式Am(x) 和Bn(x)。 Am(x) = A0+A1x1+A2x2+A3x3+… +Amxm Bn(x) = B0+B1x1+B2x2+B3x3+… +Bnxn 试求M(x)= Am(x)+Bn(x)、N(x)= Am(x)-Bn(x)。 (1)要求结果M(x)中无重复阶项和无零系数项。 (2)要求输出结果的升幂和降幂两种排列情况。 (3)设计实现菜单方式的交互界面,界面友好,可反复操作。
时间: 2023-08-11 13:03:09 浏览: 121
以下是解题思路:
1. 对于M(x),将Am(x)和Bn(x)按照指数大小合并,并对合并后的多项式进行化简,去除重复项和零系数项即可。
2. 对于N(x),同样将Am(x)和Bn(x)按照指数大小合并,但是需要注意减去Bn(x)时的符号。同样化简,去除重复项和零系数项即可。
3. 设计一个菜单交互界面,用户可以选择执行哪个操作。在每次操作结束后,询问用户是否需要继续,如果需要,则返回菜单,否则退出程序。
以下是Python实现代码,其中使用了SymPy库来进行多项式的化简和去重复项操作:
```python
from sympy import *
init_printing()
# 定义多项式Am(x)和Bn(x)
m, n = symbols('m n')
x, x1, x2, x3 = symbols('x x1 x2 x3')
Am = Sum(symbols(f'A{i})*x**i', (i, 0, m))
Bn = Sum(symbols(f'B{i})*x**i', (i, 0, n))
# 计算M(x)
M = poly(expand(Am+Bn), x).as_expr()
M = simplify(M)
M = Poly(M, x).as_dict()
M = {key: value for key, value in M.items() if value != 0}
# 输出M(x)的升幂和降幂两种排列情况
print('M(x) =', M)
print('M(x) 升幂排列:', poly(M, x).as_expr())
print('M(x) 降幂排列:', poly(M, x, order='lex').as_expr())
# 计算N(x)
N = poly(expand(Am-Bn), x).as_expr()
N = simplify(N)
N = Poly(N, x).as_dict()
N = {key: -value for key, value in N.items() if value != 0}
# 输出N(x)的升幂和降幂两种排列情况
print('N(x) =', N)
print('N(x) 升幂排列:', poly(N, x).as_expr())
print('N(x) 降幂排列:', poly(N, x, order='lex').as_expr())
# 设计交互界面
while True:
print('\n请选择操作:')
print('1. 计算M(x)')
print('2. 计算N(x)')
print('3. 退出程序')
choice = input('请输入数字选择操作:')
if choice == '1':
m = int(input('请输入Am(x)的最高次数m:'))
n = int(input('请输入Bn(x)的最高次数n:'))
Am = Sum(symbols(f'A{i})*x**i', (i, 0, m))
Bn = Sum(symbols(f'B{i})*x**i', (i, 0, n))
M = poly(expand(Am+Bn), x).as_expr()
M = simplify(M)
M = Poly(M, x).as_dict()
M = {key: value for key, value in M.items() if value != 0}
print('M(x) =', M)
print('M(x) 升幂排列:', poly(M, x).as_expr())
print('M(x) 降幂排列:', poly(M, x, order='lex').as_expr())
choice = input('是否继续操作?(Y/N)')
if choice.lower() == 'n':
break
elif choice == '2':
m = int(input('请输入Am(x)的最高次数m:'))
n = int(input('请输入Bn(x)的最高次数n:'))
Am = Sum(symbols(f'A{i})*x**i', (i, 0, m))
Bn = Sum(symbols(f'B{i})*x**i', (i, 0, n))
N = poly(expand(Am-Bn), x).as_expr()
N = simplify(N)
N = Poly(N, x).as_dict()
N = {key: -value for key, value in N.items() if value != 0}
print('N(x) =', N)
print('N(x) 升幂排列:', poly(N, x).as_expr())
print('N(x) 降幂排列:', poly(N, x, order='lex').as_expr())
choice = input('是否继续操作?(Y/N)')
if choice.lower() == 'n':
break
elif choice == '3':
break
else:
print('请输入正确的数字!')
```
阅读全文