簡體   English   中英

使用純 python NO NUMPY 或 SCIPY 求解三次方程

[英]Solving a cubic equation using pure python NO NUMPY or SCIPY

我想知道我是否可以得到幫助來求解具有系數 a、b、c 和 d 的一般三次多項式。 我不想使用 scipy 或 numpy。

對於任何復值參數,我想找到方程的所有 3 個根。

這是我到目前為止所嘗試的,

def cubic_formula(a,b,c,d):
if not a==0:
    x=-(b**3)/(27*(a**3))+(b*c)/(6*(a**2))-d/(2*a)
    y=x**2+(c/(3*a)-b/(9*(a**2)))**3
    return ((x-(y**(1/2)))**(1/3))+((x+(y**(1/2)))-b/(3*a)**(1/3)
elif not b==0:
    br=c**2-4*b*d
    rt=(-c+(br**(1/2)))/(2*b),(-c-(br**(1/2)))/(2*b)
    return rt if not br==0 else -c/(2*b)
elif not c==0:
    return -d/c
else:
        if d==0:

如果 d = 0,我如何簡化我的解決方案? 以及如何將所有結果檢索為長度為 3(如果解決方案更少,則更少)的數字元組?

我知道 x = 0 是可以取出 x(a^2 + bx + c) = 0 的解決方案,它使用正常的二次方 function 和 x = 0 處的另一個根,但是,我不知道如何編碼它在 python 中並打印出答案。

提前致謝!

編輯:

我的代碼唯一的問題是

if not a==0:
    x=-(b**3)/(27*(a**3))+(b*c)/(6*(a**2))-d/(2*a)
    y=x**2+c/(3*a)-b/(9*(a**2)))**3
    return ((x-(y**(1/2)))**(1/3))++(x+(y**(1/2)))-b/(3*a)**(1/3)

只返回 1 個值而不是 3 個 :) 與

else
   if d=0

d = 0時, ax³ + b x² + c x + d = 0退化為x = 0和二次ax² + bx + c = 0

在所有情況下,您都可以將結果作為列表或元組(可能為空)返回。 例如return (a+b, ab)

暫無
暫無

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

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