首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求根确定区间的个数

求根确定区间的个数
EN

Stack Overflow用户
提问于 2016-07-28 14:47:54
回答 1查看 539关注 0票数 0

我有n次多项式系统,只是我想学习在先前确定的区间.But之间的根的个数,我不想找根,我需要根的个数,我需要写python代码。例如: x^8+2x^6+5x^4+x^2+45x+1=0我们在3-5之间有多少根?emphasize=I不想找根,我只想知道我有多少根。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 19:01:27

您可以使用numpy实现这一点

代码语言:javascript
复制
import numpy as np
coeff = [1,0,2,0,5,0,1,45,1] #for the polynomial  x^8+2x^6+5x^4+x^2+45x+1=0
np.roots(coeff) 
 # array([ 1.37234708+0.91495949j,  1.37234708-0.91495949j,
 #   0.43013459+1.75225934j,  0.43013459-1.75225934j,
 #  -1.06175643+1.53395567j, -1.06175643-1.53395567j,
 #  -1.45921726+0.j        , -0.02223323+0.j        ])

因此,正如您所看到的,这一个没有实际的根。

编辑:如果您希望在不显式查找根的情况下查找某个间隔之间的根数,则可以使用sturm's theorem。使用渐近,

代码语言:javascript
复制
from sympy import Sturm,Symbol
from sympy.abc import x
sturm_seq = sturm(x**6-3*x**5+2*x**4)
limits = [2,4]; x = Symbol('x')
values_at_start = [polynomial.subs(x,limits[0]).evalf() for polynomial in sturm_seq]
values_at_end = [polynomial.subs(x,limits[1]).evalf() for polynomial in sturm_seq]
import itertools
# Count number of sign changes in values_at_start
count_start = len(list(itertools.groupby(values_at_start, lambda values_at_start: values_at_start > 0)))
count_end = len(list(itertools.groupby(values_at_end, lambda values_at_end: values_at_end > 0)))
ans = count_start - count_end
print ans # ans = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38628952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档