Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算列表中多项式的根?_Python_List - Fatal编程技术网

Python 如何计算列表中多项式的根?

Python 如何计算列表中多项式的根?,python,list,Python,List,我的大学作业有点麻烦,所以我决定发到这里寻求帮助 我必须为多项式创建一个列表。这部分没问题: n = int(input("Degree of polynomial: ")) p = [] for i in range(n+1): p.append(float(input("p["+str(i)+"]: "))) i += 1 例如,多项式: 5x^4+3x^3-2x^2+x-2 有:

我的大学作业有点麻烦,所以我决定发到这里寻求帮助

我必须为多项式创建一个列表。这部分没问题:

n = int(input("Degree of polynomial: "))
p = []

for i in range(n+1):
    p.append(float(input("p["+str(i)+"]: ")))
    i += 1
例如,多项式:

                                             5x^4+3x^3-2x^2+x-2
有:

以及以下所示的列表:

                                             p[] = [5, 3, -2, 1, -2]
此外,我还创建了一个列表,其中的值假装是多项式的根(listPRoots,可能的根)。这部分也可以:

listPRoots= []

for i in range(int(p[0])): 
    if p[0]%(i+1) == 0:
        listPRoots.append(-(i+1))
        listPRoots.append(i+1)
正如代码所示,我有一个列表,其中的值可以是多项式的根。我用有理根定理列出了这个列表

现在,我想取一个多项式,它的系数在一个列表(p)中。使用这个多项式,我想验证列表中的每个值(称为listPRoots),以找到多项式根的值。当我找到这个值时,我想把它们放在一个新的列表中(称为ListIntegerRoots)。为此,我尝试:

listIntegrerRoots = []
listTestRoots     = []

for i in range(len(listPRoots) - 1):
    flag = len (p) - 1
    while flag > 0:
        root = (listPRoots[i]**(flag)) * p[flag]
        listTestRoots.append(root)
        flag = flag- 1
    if sum(listTestRoots)  + p[0] == 0:
        listIntegrerRoots.append(listPRoots[i])
但是,我无法得到我想要的清单。例如:

n = 2
p[0] = 6, p[1] = -5, p[2] = 1
结果:

x^2 - 5x + 6
以及:

我想:

listIntegrerRoots[] = [2, 3]
因为2和3是多项式的根。但我得到:

listIntegrerRoots[] = []
有人能帮我吗


谢谢。

每次测试一个新的可能的根值时,请不要忘记清除总和缓冲区
listTestRoots

应该是这样的:

for i in range(len(listPRoots) - 1):
    listTestRoots = []
    ....
在我看来,累积和变量可能是更好的选择

--*编辑*--


请将其降低并提高到预期值。显示中间结果与预期结果的偏差。您发布的代码在的第一个
处失败,因为
p
未定义。您稍后发布的值未包含在代码中,在语法上不合法,描述的是一个集合而不是一个列表,并且与上面的多项式系数不一致。您将英语帖子与葡萄牙语(?)变量名混合在一起,这已经够令人困惑的了,但如果你在课文中拼错了它们,情况会更糟——请同时使用英语示例。我是一名工程师的学生,我真的不知道“Accumative sum variable”的意思。你能给我举个例子吗?非常感谢您的回答,您可以试一试。非常感谢您的耐心和帮助!
listIntegrerRoots[] = []
for i in range(len(listPRoots) - 1):
    listTestRoots = []
    ....
In [23]: for i in range(len(listPRoots)):
    ...:     s = 0
    ...:     for j in range(len(p)):
    ...:         s += (listPRoots[i] ** j) * p[j]
    ...:     if s == 0:
    ...:         listIntegerRoots.append(listPRoots[i])
    ...:
    ...:
    ...:

In [24]: listIntegerRoots
Out[24]: [2, 3]