Sage(或Maxima's)求解得到差异(p,x)== 0的错误答案?

时间:2014-02-23 05:49:20

标签: sage maxima

我正在使用Sage(在一个脚本中)解决两个变量中的简单等式:

sage: x, y = var("x y")
sage: p = x*y + x/y + 1/x
sage: diff(p, x)
y + 1/y - 1/x^2
sage: diff(p, y)
x - x/y^2
sage: solve([diff(p,x)==0, diff(p,y)==0], [x,y])
[[x == 0, y == 0], [x == -1/2*sqrt(2), y == 1],
 [x == 1/2*sqrt(2), y == 1], [x == -1/2*I*sqrt(2), y == -1],
 [x == 1/2*I*sqrt(2), y == -1]]

出于某种原因,Sage返回一个根本不是解决方案的解决方案,这里[x == 0,y == 0]可以很容易地看到 NOT 作为[的答案] y + 1 / y - 1 / x ^ 2 == 0,x - x / y ^ 2 == 0]。

这是一个错误吗?一个已知的bug?或者我做错了什么?

更新:改写标题,我想知道,最糟糕的情况是,如何在系统中替换解决方案以手动检查方程式是否经过验证?

PS:我会将此发布在AskSage上,但目前已经失效。

1 个答案:

答案 0 :(得分:1)

好吧,看起来Maxima的solve函数正在返回虚假解[x = 0,y = 0]。我看到Maxima的to_poly_solve在这里表现得更好。

p : x*y + x/y + 1/x;
load (to_poly_solve);
[dpx, dpy] : [diff (p, x), diff (p, y)];
to_poly_solve ([dpx, dpy], [x, y]);
  => %union([x = -1/sqrt(2),y = 1],[x = 1/sqrt(2),y = 1],
         [x = -%i/sqrt(2),y = -1],[x = %i/sqrt(2),y = -1])

for xy in args (%) do print (subst (xy, [dpx, dpy]));
  =>
   [0,0] 
   [0,0] 
   [0,0] 
   [0,0] 

我不知道如何从Sage打电话给to_poly_solve,虽然我很确定这是可能的。

希望这会有所帮助。祝你好运玩得开心。