2016-11-17 3 views
-2

저는 과학 계산을 파이썬으로 배우고 있습니다. 여기 파이썬 : 내 다항식 계수는 10 배로 떨어졌습니다.

enter image description here

내 구현 : 운동, 나는이 공식으로 뿌리를 사용하여 다항식을 생성 해하고

def poly(x,roots):   #Pass real and/or complex roots 

    x = symbols(x) 
    f = 1    
    for r in roots: 
     f = f*(x - r) 

    return expand(f) 

내가 그것을 테스트 :

from sympy import expand 
poly('x',[(-1/2), 5, (21/5), (-7/2) + (1/2)*sqrt(73), (-7/2) - (1/2)*sqrt(73)]) 

다음과 같이 표시됩니다.

x**5 - 1.7*x**4 - 50.5*x**3 + 177.5*x**2 - 24.8999999999999*x - 63.0 
,

하지만 가야는 : 나는 f = 10을 설정하면

10*x**5 - 17.0*x**4 - 505.0*x**3 + 1775.0*x**2 - 248.999999999999*x - 630.0 

는 따라서, 모든 그것은 작동하지만 그렇게해야하는 이유를 나는 보지 않는다, (10)의 요인에 의해 꺼져 있습니다. 나는 명백한 실수를하고 있는가? 고맙습니다!

+2

수식이 표시되지 않습니다. 이걸 고칠 수 있을까요? –

+0

symbols()은 무엇을합니까? –

+1

특정 루트를 갖는 다항식을 구성 중입니다. coeff를 곱하면 어떤 수로도 뿌리는 동일하게 유지됩니다. – mingaleg

답변

1

10x**5 + ...은 정확하지만 실제로는 필요한 것은 아닙니다. 10 * p(x)입니다. 현재 받고있는 답변은 괜찮습니다. rroots, p(r)0입니다.

+0

각 루트를 테스트했습니다. 책이 경고하면서, 부동 소수점 반올림 오류로 인해 0에 가까운 매우 작은 숫자를 얻습니다. 가능한 경우이 문제를 해결하기위한 기본 기술이 있습니까? – Johnathan

+1

@Johnathan 일반적으로 부동 소수점 오류가 발생합니다. 나는 일반적으로'1e-12'와'abs (p (r)) <1e-12'의 공차를 설정합니다. 괜찮을 것입니다. 그것에 대해 자세히 알아보십시오 [여기] (http://stackoverflow.com/questions/588004/is-floating-point-math-broken?rq=1). –

+0

대단히 감사합니다 !! – Johnathan

0

x**5이 정확합니다.

수식에서 알 수 있듯이 계수는 없습니다.

+0

도움 주셔서 대단히 감사합니다! – Johnathan