我正在尝试用 Maxima 求解方程,这样我只能得到真实的解(如果存在);如果没有真正的解决方案,或者甚至没有复杂的解决方案,我希望 Maxima 返回一个空列表。
例如,我希望当使用
x^2+100-x=0
求解 solve(x^2+100-x,x)
(只有复杂的解)时,Maxima 将返回一个空列表。或者,当使用 log(x)-x=0
求解 solve(log(x)-x,x)
时(也没有真正的解),Maxima 将返回一个空列表。在第二个示例中,我得到的是 [x=log(x)]
。
Maxima 如何实现这一目标?
抑制隐式解:
(%i1) solve(log(x)-x);
(%o1) [x = log(x)]
(%i2) solve(log(x)-x), solveexplicit: true;
(%o2) []
仅保留没有虚部的解:
(%i1) s: solve(x^2+100-x);
sqrt(399) %i - 1 sqrt(399) %i + 1
(%o1) [x = - ----------------, x = ----------------]
2 2
(%i2) sublist(s, imagpart);
(%o2) []
(%i3) s: solve(x^2+2 * x + 1);
(%o3) [x = - 1]
(%i4) sublist(s, imagpart);
(%o4) [x = - 1]
也许这也可以帮助你回答:
(%i80) 实根(x^2+100-x=0);
(%o80) []
当解为[]时,无实根。另一方面,当至少有一个真正的解决方案时:
(%i7) 实根 (x^3-3x^2+4x-2 = 0);
(%o7) [x=1]
x^3-3x^2+4x-2 = 0 有三种解,只有一种是实数。对于所有解决方案:
(%i9) 求解(x^3-3x^2+4x-2 = 0,x);
(%o9) [x=1-%i,x=%i+1,x=1]