如何打印系数在 Python 中已知的 n 次多项式的字符串表示?
How to print string representation of a nth degree polynomial whose co-efficients are known in Python?
假设我有一个polynomial.How的系数,可以用我们用笔和纸写的通常形式写出来?例如如果我有系数 = 1,-2,5 并且多项式是二次多项式那么程序应该打印 x**2-2*x+5.
1*x**2-2*x**1+5*x**0
也会 do.It 最好是编写程序以便它也适用于大 n ,比如多项式的 20 或 30 阶,还有一些方法可以将 x 的一些值放入 result.e.g.If 我设置 x=0,在上面提到的例子中它应该 return 5.
到目前为止,我已经知道我要的是符号计算,在 python 中有一个现成的包叫 sympy 来做这些,但只使用函数,我无法深入了解编写函数的逻辑,我参考了 sympy 模块中几个函数的冗长源代码,并且完全 confused.Is 有一种简单的方法可以做到这一点,可能不需要使用直接的符号数学包?
对于此任务,您必须使用 python 的符号模块 (sympy),因为您特别希望输出是多项式表示。下面的代码应该可以完成这项工作。
import sympy
from sympy import poly
x = sympy.Symbol('x') # Create a symbol x
coefficients = [1,-2,5] # Your coefficients a python list
p1 = sum(coef*x**i for i, coef in enumerate(reversed(coefficients))) # expression to generate a polynomial from coefficients.
print p1 # print(p1), depending on your python version
此语句:p1.subs('x',2)
然后计算 x=2 处的多项式 'p1'。
这是一个可以运行的程序,无需使用外部包。我定义了一个 Poly class,它有两种方法:1) 求值 2) 打印多项式。
class Poly():
def __init__(self, coeff):
self.coeff = coeff
self.N = len(coeff)
def evaluate(self, x):
res = 0.0
for i in range(self.N):
res += self.coeff[i] * (x**(self.N-i-1))
return res
def printPoly(self):
for i in range(self.N):
if i == self.N-1:
print("%f" % (abs(self.coeff[i])))
else:
if self.coeff[i] != 0.0:
print("%f * x**%d" % (abs(self.coeff[i]), self.N-i-1), end='')
if self.coeff[i+1] > 0:
print(" + ", end='')
else:
print(" - ", end='')
p = poly([1,-2,5]) # creating the polynomial object.
p.printPoly() # prints: 1.0 * x**2 - 2.0 * x**1 + 5
print(p.evaluate(0.0)) # prints: 5.0
假设我有一个polynomial.How的系数,可以用我们用笔和纸写的通常形式写出来?例如如果我有系数 = 1,-2,5 并且多项式是二次多项式那么程序应该打印 x**2-2*x+5.
1*x**2-2*x**1+5*x**0
也会 do.It 最好是编写程序以便它也适用于大 n ,比如多项式的 20 或 30 阶,还有一些方法可以将 x 的一些值放入 result.e.g.If 我设置 x=0,在上面提到的例子中它应该 return 5.
到目前为止,我已经知道我要的是符号计算,在 python 中有一个现成的包叫 sympy 来做这些,但只使用函数,我无法深入了解编写函数的逻辑,我参考了 sympy 模块中几个函数的冗长源代码,并且完全 confused.Is 有一种简单的方法可以做到这一点,可能不需要使用直接的符号数学包?
对于此任务,您必须使用 python 的符号模块 (sympy),因为您特别希望输出是多项式表示。下面的代码应该可以完成这项工作。
import sympy
from sympy import poly
x = sympy.Symbol('x') # Create a symbol x
coefficients = [1,-2,5] # Your coefficients a python list
p1 = sum(coef*x**i for i, coef in enumerate(reversed(coefficients))) # expression to generate a polynomial from coefficients.
print p1 # print(p1), depending on your python version
此语句:p1.subs('x',2)
然后计算 x=2 处的多项式 'p1'。
这是一个可以运行的程序,无需使用外部包。我定义了一个 Poly class,它有两种方法:1) 求值 2) 打印多项式。
class Poly():
def __init__(self, coeff):
self.coeff = coeff
self.N = len(coeff)
def evaluate(self, x):
res = 0.0
for i in range(self.N):
res += self.coeff[i] * (x**(self.N-i-1))
return res
def printPoly(self):
for i in range(self.N):
if i == self.N-1:
print("%f" % (abs(self.coeff[i])))
else:
if self.coeff[i] != 0.0:
print("%f * x**%d" % (abs(self.coeff[i]), self.N-i-1), end='')
if self.coeff[i+1] > 0:
print(" + ", end='')
else:
print(" - ", end='')
p = poly([1,-2,5]) # creating the polynomial object.
p.printPoly() # prints: 1.0 * x**2 - 2.0 * x**1 + 5
print(p.evaluate(0.0)) # prints: 5.0