用开源语言数字表示Mathematica的根对象

时间:2016-07-26 15:15:48

标签: python numpy scipy wolfram-mathematica solver

问题

我想在Root[]函数中重现python个对象

是否有适合此过程的特定库?

尝试

如果我正确理解Root[]函数,它只是找到多项式的n次根,所以我采用#1作为x文档中的参数numpy

背景

我有一些5阶多项式根,由于从一个特别讨厌的逆拉普拉斯变换得到的顺序,不能用ToRadicals减少。

Minimal Mathematica示例

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]

1 个答案:

答案 0 :(得分:2)

如果您对符号计算感兴趣,可以使用SymPy。特别是,SymPy有多项式对象,类RootOfCRootOf代表多项式的根。

例如,

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]