为什么千里马不能给出解决方案?

时间:2020-03-03 11:14:42

标签: maxima wxmaxima

我在Maxima中有一个函数,我要对其进行微分,然后尝试查找该值为零的值。但是,当我使用solve()时,没有得到解决方案。为什么会这样,我该如何解决?

(%i1)   f(x):=(-5*(x^4+5*x^3-3*x))/(x^2+1);
(%o1)   f(x):=((-5)*(x^4+5*x^3+(-3)*x))/(x^2+1)
(%i2)   df(x):=''(diff(f(x), x));
(%o2)   df(x):=(10*x*(x^4+5*x^3-3*x))/(x^2+1)^2-(5*(4*x^3+15*x^2-3))/(x^2+1)
(%i3)   solve(df(x), x);
(%o3)   [0=2*x^5+5*x^4+4*x^3+18*x^2-3]

2 个答案:

答案 0 :(得分:2)

函数$var -is [AutomationNull] # WISHFUL THINKING as of PowerShell 7.0 不太强大;有很多无法解决的问题。一个更强大的版本正在开发中。同时,尝试使用附加软件包solve。这就是我得到的:

to_poly_solve

(%i1) df(x) := (10*x*(x^4+5*x^3-3*x))/(x^2+1)^2-(5*(4*x^3+15*x^2-3))/(x^2+1) $ (%i2) load (to_poly_solve) $ (%i3) to_poly_solve (df(x), x); (%o3) %union([x = - 2.872468527640942], [x = - 0.4194144025323134], [x = 0.3836388367122223], [x = 0.2041221431132173 - 1.789901606296292 %i], [x = 1.789901606296292 %i + 0.2041221431132173]) 返回了数值解而不是精确解或符号解,这也许有点令人惊讶。跟踪to_poly_solve表明allroots构造了一个五次方程,并将其插入to_poly_solve。由于一般的五次方程式都没有根部的解法,即使在特殊情况下它也可能很杂乱,所以无论如何都需要一个数值解法。

尝试allroots可视化上面返回的真实根。

答案 1 :(得分:0)

您可以尝试找到数值解。我不知道为什么solve不尝试这样做。您要么接受aolve的输出,要么执行以下操作:

(%i1) f(x):=(-5*(x^4+5*x^3-3*x))/(x^2+1);

                                      4      3
                              (- 5) (x  + 5 x  + (- 3) x)
(%o1)                 f(x) := ---------------------------
                                         2
                                        x  + 1
(%i2) df(x):=''(diff(f(x), x));

                            4      3                3       2
                     10 x (x  + 5 x  - 3 x)   5 (4 x  + 15 x  - 3)
(%o2)       df(x) := ---------------------- - --------------------
                             2     2                  2
                           (x  + 1)                  x  + 1

将其带到一个公分母并提取分子:

(%i3) xthru(df(x));

                   4      3              2          3       2
            10 x (x  + 5 x  - 3 x) - 5 (x  + 1) (4 x  + 15 x  - 3)
(%o3)       ------------------------------------------------------
                                    2     2
                                  (x  + 1)
(%i4) num(%);

                   4      3              2          3       2
(%o4)       10 x (x  + 5 x  - 3 x) - 5 (x  + 1) (4 x  + 15 x  - 3)

使用allsroots通过数字找到多项式的根

(%i5) allroots(%);

(%o5) [x = 0.3836388391066617, x = - 0.4194143906217701, 
x = 1.789901606296292 %i + 0.2041221431132174, 
x = 0.2041221431132174 - 1.789901606296292 %i, x = - 2.872468734711326]

跳过复杂的解决方案

(%i6) sublist(%,lambda([t],imagpart(rhs(t))=0))
;

(%o6) [x = 0.3836388391066617, x = - 0.4194143906217701, 
                                                       x = - 2.872468734711326]
相关问题