我正在使用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上,但目前已经失效。
答案 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
,虽然我很确定这是可能的。
希望这会有所帮助。祝你好运玩得开心。