簡體   English   中英

如何從多項式方程獲得導數?

[英]How to obtain derivative from a polynomial equation?

我只是在做自己的方法來解決多項式問題的導數。 但是我提出了一個問題。 我無法從array_1 = '3*x**3 + 2*x**2 + 3*x + 5'刪除或刪除'*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))

您的array只是一個字符串-只是一個字符序列而已。 因此,每個elem都只是一個字符。 您需要做的是編寫一個解析器


對於這么簡單的事情,您可以僅使用字符串操作或正則表達式來解析所有內容,如果您知道如何使用它們或想閱讀有關它們的教程。 這是一個僅包含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)

(當然,您可能希望在do_something_with代碼中將coefficientpower轉換為數字,但這很容易;只需使用intfloat 。)

但這會有些脆弱。 它會處理您擁有的確切格式(只要do_something_with可以處理額外的空格,並使用空字符串作為variablepower僅調用intfloat可以處理前者,但不能處理后者)。 但是,如果嘗試使用3 * x**3 + 2 * x**2 + 3 * x + 5嘗試,它將失敗。


更好的選擇是使用解析或解析器生成庫。 有一些學習曲線,但這是值得做的。 例如, pyparsing是一種相當容易學習的方法,那里有一些很棒的教程,並且附帶了大量示例 ,我認為其中之一與您正在做的非常接近。


最后,您的格式碰巧是Python語法的子集。 您可以通過使用ast (Python附帶的Python解析器)來利用它。 但是,這並不是一個適合新手的選項。

這是我所做的。 我知道它不起作用。 我會嘗試改善它。

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM