Если задана полиномиальная функция в виде строки, вернуть первую производную в виде строки - PullRequest
0 голосов
/ 11 февраля 2020

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

def derivative(str):


derivative("3*x^2 + 4*x - 22") # Should return 6*x^1 + 4*x^0 - 0

Если бы кто-то мог помочь мне начать с этим, я был бы очень признателен!

1 Ответ

0 голосов
/ 11 февраля 2020

Python символы c библиотека sympy может позаботиться о преобразовании строки в символьное выражение c и принятии производных . Обратите внимание, что Python использует ** для power, а ^ используется только для логического исключения или. convert_xor заботится о преобразовании ^ в степень.

Вот пример кода, который поможет вам начать и экспериментировать.

from sympy import sympify, Derivative
from sympy.parsing.sympy_parser import parse_expr, standard_transformations, convert_xor

def derivative(str_expr):
    transformations = (standard_transformations + (convert_xor,))
    expr = parse_expr(str_expr, transformations=transformations)
    return str(Derivative(expr).doit())

print(derivative("3*x^2 + 4*x - 22"))
print(derivative("sin(x/cos(x))"))
print(derivative("exp(asin(x^2)/sqrt(x))"))
print(derivative("LambertW(x)"))
print(derivative("erf(x)"))

Вывод:

6*x + 4
(x*sin(x)/cos(x)**2 + 1/cos(x))*cos(x/cos(x))
(2*sqrt(x)/sqrt(1 - x**4) - asin(x**2)/(2*x**(3/2)))*exp(asin(x**2)/sqrt(x))
LambertW(x)/(x*(LambertW(x) + 1))
2*exp(-x**2)/sqrt(pi)
...