我正在尝试解决以下系统:
gx:=2*x*exp(x^2+y^2)-4*y
gy:=2*y*exp(x^2+y^2)-4*x
sys:={gx=0,gy=0}:
solve(sys,{x,y})
然后显示以下输出:
{x = 0, y = 0}, {x = RootOf(2*_Z^2-ln(2)), y = RootOf(2*_Z^2-ln(2))}, {x = -RootOf(2*_Z^2-ln(2)-I*Pi), y = RootOf(2*_Z^2-ln(2)-I*Pi)}
第一个“root”(0,0)是正确的,但是我如何删除那个根和Z是什么?是否有可能从中得到正确的答案?
答案 0 :(得分:1)
这是函数allvalues
的一个很好的场景。
从帮助页面:
计算涉及RootOfs的表达式的所有可能值
gx:=2*x*exp(x^2+y^2)-4*y;
gy:=2*y*exp(x^2+y^2)-4*x;
sys:={gx=0,gy=0}:
sol := solve(sys,{x,y}):
seq(allvalues(sol[i]), i= 1..numelems([sol])):
print~([%])[];
但请注意,您没有以这种方式获得所有解决方案。解决问题的方法有很多种;要获得所有解决方案,请在solve命令中使用可选参数allsolutions = true
:
sol2 := solve(sys,{x,y},allsolutions = true):
seq(allvalues(sol2[i]), i= 1..numelems([sol2])):
print~([%])[];
如果你运行它,你会看到一个新的变量_Z1
,它有一个尾随波浪号(~
) - 这个代号表示对变量有假设。要查看这些假设,请使用
about(_Z1);
Originally _Z1, renamed _Z1~: is assumed to be: integer
这意味着上述解决方案适用于任何整数_Z1
。这些都是您的解决方案,并以预期的方式编写。
答案 1 :(得分:0)
您可以使用fsolve
来确定最终的数值解决方案,
restart;
gx:=2*x*exp(x^2+y^2)-4*y;
gy:=2*y*exp(x^2+y^2)-4*x;
sys:={gx=0,gy=0}:
fsolve(sys,{x,y})
{x = .5887050113,y = .5887050113}
sys:={gx=0.,gy=0.}:
solve(sys,{x,y})
{x = 0.,y = 0.},{x = .5887050112,y = .5887050112},{x = -.5887050112,y = -.5887050112},{x = -.9887236333-.7943556085 * I,y = .9887236333 + .7943556085 * I},{x = .9887236333 + .7943556085 * I,y = -.9887236333-.7943556085 * I}