Sage 圣人';s(或极大值';s)solve对于diff(p,x)==0给出了错误的答案?

Sage 圣人';s(或极大值';s)solve对于diff(p,x)==0给出了错误的答案?,sage,maxima,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*sqr

我使用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]

这是虫子吗?一只已知的虫子?还是我做错了什么

更新:重新表述标题,我想知道,在最坏的情况下,我如何替换系统中的解决方案,以手动检查方程式是否得到验证


PS:我想在AskSage上发布这个,但它现在已经关闭了。

好吧,看起来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调用
来求解poly\u
,尽管我很确定这是可能的


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

重新表述标题/问题,不要假设有“bug”。简单说明问题和观察到的/预期的行为。sage通常如何定义不连续点的导数?显然,这些函数不是x==0,y==0处的导数,因为那里没有导数,所以sage没有求解它们,而是求解它解释的导数——可能在未定义点被认为是零,而不是未定义。(我对sage一点也不熟悉)原则上,
solve([y+1/y-1/x^2==0,x-x/y^2==0],[x,y],to_poly_solve='force')
应该避免使用Maxima
solve
命令,并且只使用
to_poly__solve
,但我仍然会得到虚假的额外输出,因为这只适用于单个方程,而不是系统。我已经为此打开了。当然,OP或Robert也可以为此打开Maxima bug报告。