[英]Solving Matrix Differential Equation in Python using Scipy/Numpy- NDSolve equivalent?
[英]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.