在Python中求多项式的导数

2024-09-28 17:27:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我对这个任务有意见。我必须打印一个多项式,这是一个用户的输入。(我也有这个问题,因为它可以是任何程度的多项式,我不知道如何打印它)。 任务的第二部分是求这个多项式的导数。我试着问一个用户这个多项式的次数和系数,然后创建一个列表,但我不认为这是一个好办法,所以请帮助我!你知道吗

我有这样的想法:

n = int(input("What is a degree of poly: "))
lista = []
for i in range (n+1):
    a = int(input("What are the coefficients "))
    lista.append(a)

lista1 = []
b = n
d = 0
for k in range (n+1):
    c = int(lista[d])*int(b)
    lista1.append(c)
    b = b - 1
    d = d + 1

print(lista1)

Tags: 用户inforinputrange次数whatint
3条回答

您需要使用一个名为sympy的模块。你要做的第一件事就是 pip install sympy。如果这不起作用,评论一下你正在使用的编辑器,我也许能帮上忙。你知道吗

然后你可以运行这个代码,它通过注释来解释自己,我测试了这个代码。你知道吗

import sympy as sp  # Import sympy

x = sp.Symbol('x')  # Makes a new symbol: x

degree = int(input("Degree of Polynomial"))  # get the degree of the polynomial

polynomial = 0  # Start with nothing in the polynomial and slowly add to it

for power in range(degree+1):  # degree + 1 is so that we loop it once more that number of degrees to get x^0 term
    coefficient = int(input(("What is the coefficient of the x^" + str(power) + " term")))
    # Get the coefficient of the term
    if coefficient != 0:  # we do not want to print 0*x^4 or something like that hence only add to the poly if not 0
        polynomial += coefficient*x**power  # coefficient*x^power: Pretty self explanatory

polynomialString = str(polynomial).replace('**', '^')  # Replace pythons symbol for power: ** with ^

print("Your Polynomial is", polynomialString)  # Print the polynomial

derivative = sp.diff(polynomial, x)  # Differentiate the polynomial
derivativeStr = str(derivative).replace('**', '^')  # derivative after replacing ** with ^ 

print("The derivative of ", polynomialString, " is ", derivativeStr)  # Prints the derivative

正如您之前提到的,您不能使用任何模块,因为它是用于类的,所以这里有一些不使用模块的代码,尽管我没有费心去评论,但是有一些疯狂的(在某些情况下是不必要的)替换lol

但不管怎样,这就是:

class Polynomial:

    def __init__(self, input_str):
        self.polynomial_display_string = input_str.replace('**', '^').replace('*', '').replace("x^1+", "x+")\
            .replace("x^1-", "x-").replace('+0', '').replace('-0', '')\
            .replace('+-', '-').replace('-+', '-').replace(' ', '+').replace(' ', '+')
        self.expression_str = self.polynomial_display_string.replace('^', '**').replace('x', '*x')\
            .replace("x+", "x^1+").replace("x-", "x^1-").replace(' ', '').replace('-+', '-').replace('-', '+-')

    def derivative(self):
        if '+' not in self.expression_str:
            if "x" in self.expression_str:
                constant_multiplier = int(self.expression_str.split('*x**')[0])
                power = int(self.expression_str.split('*x**')[1])
                derivative = (str(constant_multiplier*power) + "*x^" + str(power-1))
                return Polynomial(derivative)
            else:
                return Polynomial('0')
        elif self.expression_str[0] == '+' and not self.expression_str.count('+') > 1:
            constant_multiplier = int(self.expression_str[1:].split('*x**')[0])
            power = int(self.expression_str[1:].split('*x**')[1])
            derivative = (str(constant_multiplier * power) + "*x^" + str(power - 1))
            return Polynomial(derivative)
        else:
            terms = list(filter(None, self.expression_str.split('+')))
            final_str = ""
            for term in terms:
                poly_object = Polynomial(term)
                final_str += "+" + str(poly_object.derivative().expression_str)
            final_str = final_str[1:] if final_str[0] in ['+', '-', ' '] else final_str
            return Polynomial(final_str.replace('++', '+').replace('+-', '-').replace('-+', '-').replace(' ', '-')
                              .replace('+', ' + ').replace('-', ' - '))


poly = Polynomial(input('Enter a polynomial'))
print(poly.polynomial_display_string)
print(poly.derivative().polynomial_display_string)

如果你这样做是为了一门课,或者只是为了学习,并且你想避免使用sympy来写你自己的,那么你就有了一个好的开始。我唯一能建议的是,您可能希望以更整洁的格式打印输出。像这样的方法可能有用:

deriv = ''
poly = ''
for k in range(n):
    poly += str(lista[k]) + "x^" + str(n-k) + " + "
    deriv += str(lista1[k]) + "x^" + str(n-k-1) + " + "
poly += str(lista[-1])
deriv = deriv.rstrip('x^0 +')

print("Input Polynomial: " + poly)
print("Derivative: " + deriv)

相关问题 更多 >