2014-10-27 2 views
1

Вот что я написал: это классическое упражнение по интерполяции, которое я уже закончил и отправил. Мне было интересно, если там был другой (больше) способ ...Сумма абсолютных значений многочленов с python numpy

q является список поплавков (точки интерполяции)

i является индексом Лагранжа многочлен

x является точкой где оценивается:

def l(q,i,x): 
    poly=1.0 
    for j,p in enumerate(q): 
     if j==i: 
      continue 
     poly *=(x-p)/(q[i]-p) 
    return poly 

Тогда есть функция, на которой я работаю:

def Lambda(q,x): 
    value=0.0 
    for j in range(0,len(q)): 
     value+=abs(l(q,j,x)) 
    return value 

Теперь я могу использовать некоторые подпрограммы python, чтобы найти его максимальное значение в интервале [0,1], и я это сделал. В питоне есть полиномиальный модуль, с помощью которого можно легко повторно определить л:

import numpy.polynomial.polynomial as P 

def l_poly(q,i): 
    poly = [] 
    for j,p in enumerate(q): 
     if j==i: 
      continue 
     poly.append(p/(q[i]-p)) 
    return P.polyfromroots(poly) 

Я хотел бы сделать то же самое с Lambda, так что я могу найти свой максимум с помощью встроенного в функции от (найти нули и т. д. и т. д.). Проблема в том, что это сумма abs(polynomials). Есть ли способ сделать это? Или для смешивания производной полинома и производной от abs(...)?

+0

Вам нужен 'abs (Poly1) + abs (Poly2) + abs (Poly3) ...' или 'abs (Poly1 + Poly2 + Poly3 ...)'? – MackM

+0

Я не знаю, возможно ли это, но, как вы видите, функция abs (poly1) + abs (poly2) и т. Д. Но, возможно, библиотека полиномов просто не поддерживает ее ... – GivAlz

ответ

0

NumPy не поддерживает произвольное символическое выражение. Он работает только с многочленами, представляющими полином как набор коэффициентов. Абсолютное значение многочлена не является многочленом, поэтому это не понятие, которое имеет NumPy. Это символическое выражение, которое может обрабатываться библиотеками символической манипуляции, такими как SymPy.

используя встроенную функцию производной (найти нули и т. Д. И т. Д.).

Есть несколько проблем с этим:

  1. Как сказано выше, polyder метод NumPy не относится к этой ситуации, так как абс (полиномом) не является многочленом.
  2. Производная от абсолютной функции не определена в 0.
  3. Минимальное или максимальное выражение с абсолютными значениями может быть достигнуто там, где производная не существует, поэтому даже если вы можете найти производную и как-то найти ее корни , вы все равно не решите проблему.
  4. Поиск нулей производных не является хорошим способом свести к минимуму или максимизировать функцию, вне упражнений исчисления. Библиотеки, такие как scipy.optimize, реализуют множество эффективных численных методов для подобных задач.
Смежные вопросы