Ошибка при вычислении производной на Python (с .subs, .evalf и .lambdify) - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь отдельно вычислить элементы разложения Тейлора и не получил результаты, которые я должен был получить. Функция для аппроксимации равна х ** 321, и первые три элемента этого разложения Тейлора вокруг х = 1 должны быть: 1 + 321 (х-1) + 51360 (х-1) ** 2 По какой-то причине код, связанный со вторым термином, не работает. Смотрите мой код ниже.

import sympy as sy
import numpy as np
import math
import matplotlib.pyplot as plt

x = sy.Symbol('x')
f = x**321
x0 = 1
func0 = f.diff(x,0).subs(x,x0)*((x-x0)**0/factorial(0))
print(func0)
func1 = f.diff(x,1).subs(x,x0)*((x-x0)**1/factorial(1))
print(func1)
func2 = f.diff(x,2).subs(x,x0)*((x-x0)**2/factorial(2))
print(func2)

Печать, полученная с использованием этого кода,

1
321x - 321
51360*(x - 1)**2

Я также использовал .evalf и .lambdify, но результаты были одинаковыми. Я не могу понять, откуда исходит ошибка.

f = x**321
x = sy.Symbol('x')

def fprime(x):
    return sy.diff(f,x)

DerivativeOfF = sy.lambdify((x),fprime(x),"numpy")
print(DerivativeOfF(1)*((x-x0)**1/factorial(1)))
321*x - 321

Я, очевидно, только начинаю с языка, поэтому спасибо за вашу помощь.

1 Ответ

0 голосов
/ 14 сентября 2018

Я нашел руководство для начинающих, как Тейлор расширился в python. Проверьте это, возможно, на все ваши вопросы есть ответы:

http://firsttimeprogrammer.blogspot.com/2015/03/taylor-series-with-python-and-sympy.html

Я проверил ваш код, и он отлично работает. как отметил Базингаа в комментариях, это просто вопрос, как python сохраняет функции внутри. Можно утверждать, что для компьютера требуется меньше ОЗУ для экономии 321*x - 321 вместо 321*(x - 1)**1. В вашей первой строке вывода он также дает 1 вместо (x - 1)**0

...