Найдите решения poly1d для заданного комплексного числа

#python #numpy #polynomials

Вопрос:

Представьте, что у меня есть np.poly1d функция: 5 x^2 2 x 1 . Как мне создавать все сложные решения 5 x^2 2 x 1 == a , где a вводится другой параметр?

Примеры, которые я видел, просто играют с изменением самих функций или выдают выходные данные при вставке входных данных для переменной в poly1d функцию (т. Е. вывод 5 a^2 2 a 1 ).

Ответ №1:

Это очень просто, numpy создаст для вас еще один экземпляр, когда вы введете его в математическую операцию:

 >>> f = np.poly1d([5,2,1])
>>> a = 2                       # number
>>> b = [1, -2]                 # list
>>> c = np.array([-4, -4, -4])  # numpy array
>>> 
>>> f
poly1d([5, 2, 1])
>>> f-a
poly1d([ 5,  2, -1]
>>> f-b
poly1d([5, 1, 3])
>>> f c
poly1d([ 1, -2, -3])
>>> 
>>> f.roots                     # roots of f(x) = 0
array([-0.2 0.4j, -0.2-0.4j])
>>> (f-a).roots                 # roots of f(x) - 2 = 0
array([-0.68989795,  0.28989795])
>>> (f-b).roots                 # roots of f(x) - (1x - 2) = 0
array([-0.1 0.76811457j, -0.1-0.76811457j])
>>> (f c).roots                 # roots of f(x)   (-4x^2 - 4x - 4) = 0
array([ 3., -1.])
 

Однако это приведет к ошибке, если вы попытаетесь использовать массив с размером больше 1, так как это функция 1d.

 >>> d = np.array([[1], [2]])
>>> (f-d).roots
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "libsite-packagesnumpylibpolynomial.py", line 1291, in __sub__
    other = poly1d(other)
  File "libsite-packagesnumpylibpolynomial.py", line 1171, in __init__
    raise ValueError("Polynomial must be 1d only.")
ValueError: Polynomial must be 1d only.
 

Комментарии:

1. Это не ответ на вопрос. Если формула равна 5 x^2 2x 1 и a равна 8 , то вывод должен быть [-1.4, 1] . Если вы знаете, как получить эти результаты, я был бы рад переключить свой голос на голосование и проверить его как правильный ответ.

2. @JoshuaHarwood в своем примере я ставлю a = 2 . Просто измените его на a = 8 и запустите (f-a).roots , как указано выше. Я получаю ожидаемый результат. онлайн-демонстрация . Каков ваш результат ?

3. Я отметил ответ как правильный. Если вы внесете изменения в сообщение, отражающие это, StackOverflow также позволит мне переключить свой голос.