Может кто-нибудь объяснить, как мы получаем вывод для функции numpy.poly - PullRequest
0 голосов
/ 10 января 2019

Я хочу знать, что происходит за сценой, когда мы вызываем функцию numpy.poly. Пример демонстрации будет оценен.

>>> numpy.poly((0, 0, 0)) # Multiple root example
array([1, 0, 0, 0])

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Чтобы построить ответ @ Джейсона:

Код np.poly для основных случаев можно упростить до:

def foo(seq):
    a = np.array([1.])
    for s in seq:
        a = np.convolve(a, [1,-s])
    return a

In [39]: foo([0,0,0])
Out[39]: array([1., 0., 0., 0.])
In [40]: np.poly([0,0,0])
Out[40]: array([1., 0., 0., 0.])
In [41]: foo([2,0,-2])
Out[41]: array([ 1.,  0., -4.,  0.])
In [42]: np.poly([2,0,-2])
Out[42]: array([ 1.,  0., -4.,  0.])
In [43]: foo([.1,.2,.3])
Out[43]: array([ 1.   , -0.6  ,  0.11 , -0.006])
In [44]: np.poly([.1,.2,.3])
Out[44]: array([ 1.   , -0.6  ,  0.11 , -0.006])

Что делает np.convolve и почему это работает для этой задачи, это еще один уровень вопроса.

Печать a после каждой итерации:

In [46]: foo([.1,.2,.3])
[ 1.  -0.1]
[ 1.   -0.3   0.02]
[ 1.    -0.6    0.11  -0.006]

Группировка по уравнению Джейсона:

-abc + abx + acx + bcx - ax2 - bx2 - cx2 + x3
-abc + (ab + ac + bc)*x + (- a - b - c)*x2 + x3

-.1*.2*.3, (.1*.2 + .1*.3 + .2*.3), (-.1-.2-.3), 1
-.006, .02+.03+.06, -.6, 1

или здание постепенно

-a + x
-ab + (-a-b)x + x2
-abc + ...
0 голосов
/ 10 января 2019

Полином с корнями в 'a', 'b' и 'c' можно легко создать, написав (x-a)(x-b)(x-c), который можно умножить для получения -abc + abx + acx + bcx - ax 2 - bx 2 - cx 2 + x 3 . В вашем случае, когда a, b, c равны нулю, это упрощается до x 3 . Ваш результат [1, 0, 0, 0] является представлением этого многочлена в виде массива коэффициентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...