我想在Root[]
函数中重现python
个对象 。
是否有适合此过程的特定库?
如果我正确理解Root[]
函数,它只是找到多项式的n次根,所以我采用#1
作为x
文档中的参数numpy
。
我有一些5阶多项式根,由于从一个特别讨厌的逆拉普拉斯变换得到的顺序,不能用ToRadicals
减少。
r = 1/τ;
ct = Cos[θ];
r2 = r^2;
r3 = r^3;
r4 = r2^2;
ct2 = ct^2;
ct3 = ct^3;
ct4 = ct2^2;
ct5 = ct^5;
ct6 = ct2^3;
p2 = ϕ^2;
fn := Root[2*ρ*p2*r^5 + 2*ρ*p2*r^5*ct - 2*ρ^2*p2*r^5*ct - 2*ρ*p2*r^5*ct2 - 2*ρ*p2*r^5*ct3 + 2*ρ^2*p2*r^5*ct3 + (r4 + 4*p2*r4 + 4*ρ*p2*r4 + r4*ct - 2*ρ*r4*ct + 4*p2*r4*ct - 2*ρ*p2*r4*ct - 2*ρ^2*p2*r4*ct - r4*ct2 - 4*p2*r4*ct2 - r4*ct3 + 2*ρ*r4*ct3 - 4*p2*r4*ct3 + 6*ρ*p2*r4*ct3 - 2*ρ^2*p2*r4*ct3)*#1 + (4*r3 + 8*p2*r3 + 2*ρ*p2*r3 + 3*r3*ct - 6*ρ*r3*ct + 4*p2*r3*ct - 4*ρ*p2*r3*ct - 3*r3*ct2 - 4*p2*r3*ct2 + 2*ρ*p2*r3*ct2 - 2*r3*ct3 + 4*ρ*r3*ct3)*#1^2 + (6*r2 + 4*p2*r2 + 3*r2*ct - 6*ρ*r2*ct - 3*r2*ct2 - r2*ct3 + 2*ρ*r2*ct3)*#1^3 + (4*r + r*ct - 2*ρ*r*ct - r*ct2)*#1^4 + #1^5 &, 5]
答案 0 :(得分:2)
如果您对符号计算感兴趣,可以使用SymPy。特别是,SymPy有多项式对象,类RootOf
和CRootOf
代表多项式的根。
例如,
In [103]: from sympy import Symbol, poly
In [104]: x = Symbol('x')
In [105]: p = poly(x**4 - 3*x**2 + x - 1)
In [106]: p
Out[106]: Poly(x**4 - 3*x**2 + x - 1, x, domain='ZZ')
In [107]: p.root(0)
Out[107]: CRootOf(x**4 - 3*x**2 + x - 1, 0)
CRootOf(poly, k)
是多项式第k个根的占位符。要查找其数值,请使用.evalf()
方法:
In [109]: p.root(0).evalf()
Out[109]: -1.94397243715073
以下是所有根的数值:
In [110]: [p.root(k).evalf() for k in range(p.degree())]
Out[110]:
[-1.94397243715073,
1.66143946800762,
0.141266484571554 - 0.538201812325831*I,
0.141266484571554 + 0.538201812325831*I]