Sage(或Maxima)的求解对于diff(p,x)== 0会给出错误答案吗?

3

我正在使用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]明显是[y+1/y-1/x^2==0,x-x/y^2==0]的答案。
这是一个bug吗?已知的bug吗?还是我做错了什么?
更新:重新表述标题,我想知道,在最坏的情况下,我如何将解决方案代回系统,手动检查方程是否验证?
PS:我会将此问题发布在AskSage上,但它目前无法使用。

重新表述标题/问题,而不是假设存在“错误”。只陈述问题和观察/预期行为。 - user2864740
Sage通常如何定义不连续点处的导数?显然,那些函数在x == 0,y == 0处不是导数,因为那里没有导数,所以Sage并没有解决它们,而是解决了它所解释的导数可能在未定义点处被视为零,而不是被视为未定义。(我对Sage一点也不熟悉) - user3125280
1个回答

2

看起来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函数,但我相信这是可能的。

希望这可以帮到你。祝好运并玩得开心。


原则上,solve([y + 1/y - 1/x^2==0,x - x/y^2==0],[x,y],to_poly_solve='force')应该避免使用Maxima的solve命令,只使用to_poly_solve,但我仍然会得到额外的错误输出,因为这只对单个方程成立,而不适用于系统。我已经在http://trac.sagemath.org/ticket/15859中提出了这个问题。 - kcrisman
当然,OP或Robert也可以为此打开一个Maxima错误报告。 - kcrisman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接