В настоящее время я застрял в поиске производной функции полинома Лагранжа Ли. Вот как я пишу функцию Ли:
def Li(x, xArr, n):
L = 1
resArr = []
for i in range(n):
for j in range(n):
if j == i:
continue
L = L * ((x - xArr[j])/ (xArr[i] - xArr[j]))
resArr.append(round(L,4))
L = 1
return resArr
И я хочу вычислить производные результатов массива от функции. Например, если мы попытаемся жестко запрограммировать его, с данным xArr = [10.5, 12] это будет выглядеть так:
L[0] = (x - xArr[1]) / (xArr[0] - xArr[1]) * (x- xArr[0]) / (xArr[1] - xArr[0])
L[0] = (x - 12)/(10.5 - 12) * (x - 10.5)/(12 - 10.5)
L[0] = (x^2 - 22.5x + 126) / -2.25
а затем мы найдем производную L[0] с этой функцией (x^2 - 22,5x + 126) / -2,25, при ручном решении мы можем вставить x позже, но если мы кодируем это, я предполагаю, что код должен сначала знать значение x, верно?
так, например, я даю значение x = 11,5, и это дает результаты L[0] = 0,3333
и теперь я хочу вычислить производную L[0], и результат будет:
L'[0] = 2x - 22.5 / -2.25 for x = 11.5
L'[0] = 0.5
Есть ли способы сделать это? Я пробовал использовать torch.tensor и np.diff, но результаты неудовлетворительны. Спасибо.