找到多项式的导数

Rob*_*ard 9 python math

我象征性地想知道如何将多项式解析成函数并返回导数.我将使用什么数据结构或解析多项式的方法?最好不要使用任何库,因为这个问题可能会在技术面试中出现.

polynomial-> of nth degree

def derivative(polynomial):
    return derivative

Example:

f(x)  = 2x^2+3x+1
f'(x) = 4x+3
Run Code Online (Sandbox Code Playgroud)

我不想要一个解决方案,这不是作业,而是一个我要从哪里开始的暗示.

Jam*_*olk 13

单个变量中的多项式可以简单地表示为包含系数的数组.因此,例如1 + 5x 3 - 29x 5可以表示为[1, 0, 0, 5, 0, -29].以这种形式表示,导数很容易计算.

假设poly是一个如上所示的python列表.然后

deriv_poly = [poly[i] * i for i in range(1, len(poly))]
Run Code Online (Sandbox Code Playgroud)

对于稀疏多项式,其他表示相对容易,例如对列表(coefficient, exponent)或字典映射到系数的指数.

解析表达式更复杂,但使用各种解析框架应该很容易,因为语法相对简单.

  • @Thrustmaster不,这就是为什么`range`从'1'开始.一个也许太聪明的技巧:)我会用切片和`enumerate`来写它:`[i*term for i,term in enumerate(poly [1:])]`. (2认同)

Con*_*Del 5

根据我的经验,矩阵在表示多项式时通常非常有用

  • 将它表示为[1,3,2]更有用,所以列表的第i个元素将是x ^ i的系数 (6认同)

jad*_*k94 5

我现在想出来了.你想要的是这个:

  1. 解析多项式:您需要具有预定义的模式.输入越"不可信"或"狂野",您就越需要解析它.您可以使用正则表达式.

  2. 有等式的基本组成部分(coeff,power_of_x)列表.

  3. 做数学(衍生公式)

  4. 以输入的方式返回方程式.

这给你:

import re

def read(eq):
    terms = eq.split('+')
    equation = [re.split('x\^?', t) for t in terms]
    eq_map = []
    for e in equation:
        try:
            coeff = int(e[0])
        except ValueError:
            coeff = 1
        try:
            power = int(e[1])
        except ValueError:
            power = 1
        except IndexError:
            power = 0
        eq_map.append((coeff, power))
    return eq_map

def write(eq_map):
    def str_power(p):
        if p == 0:
            return ''
        elif p == 1:
            return 'x'
        else:
            return 'x^%d' % (p,)

    def str_coeff(c):
        return '' if c == 1 else str(c)
    str_terms = [(str_coeff(c) + str_power(p)) for c, p in eq_map]
    return "+".join(str_terms)

def derivative(eq):
    eq_map = read(eq)
    der_map = [(p*c, p-1) for c, p in eq_map[:-1]]
    return write(der_map)

def run(eq):
    print eq, '->', derivative(eq)

run("2x^2+3x+1")
run("x^3+2x^2+1")
Run Code Online (Sandbox Code Playgroud)

这是非常基本的.例如:2*x^3由于"*"将无法工作.当然,有很多情况下它不起作用,但这是基本的想法.