如何从多项式方程中获得导数?

时间:2018-03-26 02:40:45

标签: python derivative

我正在做自己的方法来解决多项式问题的导数只是为了好玩。但我想出了一个问题。我无法从'*x**2'删除或删除array_1 = '3*x**3 + 2*x**2 + 3*x + 5'以获取此类数组; array = [3, 2, 3, 5]

array_1 = '3*x**3 + 2*x**2 + 3*x + 5'

def converter(array_1):
    array_1 = array_1.split(' + ')

    return str(array_1)

array = [5, 3, 2] # for testing ( I reversed order of an array.)

def derivative(array):
    new_array = []
    for x, elem in enumerate(array):
        z = x*elem
        new_array.append(z)
    return new_array[1:]



result = derivative(array)
print(result)
print(converter(array_1))

2 个答案:

答案 0 :(得分:2)

你的array只是一个字符串 - 它只是一系列字符。所以每个elem只是一个字符。您需要做的是编写解析器

对于这么简单的事情,您可以使用字符串操作解析所有内容,或者regular expressions如果您知道如何使用它们或想要阅读它们的教程。这是一个只有str类的方法的例子:

s = '3*x**3 + 2*x**2 + 3*x + 5'
for term in s.split('+'):
    coefficient, _, factor = term.partition('*')
    variable, power = factor.partition('**')
    do_something_with(coefficient, variable, power)

(当然您可能希望将coefficientpower转换为do_something_with代码中的数字,但这很简单;只需使用intfloat。)

但这会有些脆弱。它会处理您拥有的确切格式(只要do_something_with可以处理额外的空格,并且variablepower使用空字符串 - 只需调用intfloat可以处理前者,但不能处理后者。但是,如果你尝试使用3 * x**3 + 2 * x**2 + 3 * x + 5,它就会失败。

更好的选择是使用解析或解析器生成库。这有一点学习曲线,但值得做。例如,pyparsing是一个相当容易学习的东西,有一些很棒的教程,它有广泛的examples,其中一个我认为非常接近你的#39}做的。

最后,您的格式恰好是Python语法的一个子集。您可以通过使用Python附带的Python解析器ast来利用它。但是,这并不是一个新手友好的选择。

答案 1 :(得分:0)

这就是我所做的。我知道它不起作用。我会尝试改进它。

array_1 = '3*x**3 + 2*x**2 + 3*x + 5'

def converter(array_1):
    array_1 = array_1.split(' + ')
    print(array_1)

    new_array = []
    for x in array_1:
        new_array.append(x[-0])

    return new_array

array = [5, 3, 2] # for testing

def derivative(array):
    new_array = []
    for x, elem in enumerate(array):
        z = x*elem
        new_array.append(z)
    return new_array[1:]



result = derivative(array)
print(result)
print(converter(array_1))

输出:

[3, 4]
['3*x**3', '2*x**2', '3*x', '5']
['3', '2', '3', '5']