我在Maxima中有一个函数,我在求微分,然后试着找出它为0的值。然而,当我使用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]
发布于 2020-03-04 11:00:57
函数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
。由于一般的五次曲线没有根的解,甚至在特殊情况下,它可能非常混乱,也许无论如何,有一个数值解是最有用的。
尝试使用plot2d(df(x), [x, -3, 1])
来可视化上面返回的实际根。
发布于 2020-03-04 19:08:29
你可以试着找到一个数值解。我不知道为什么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]
https://stackoverflow.com/questions/60506007
复制相似问题