#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 также позволит мне переключить свой голос.