solve とともに(nnsolve その3)
solve は非常に強力な関数で
(%i1) solve(x=y,[x,y]); (%o1) [[x = %r1, y = %r1]]
と解いてくれます(笑).
これを抑えるには
(%i2) solve(x=y,[x,y]),linsolve_params:false; (%o2) [[x = y]]
とすればよいのですが,次数が上がると,聞く耳を持たないご様子です.
(%i3) solve(x^2=y^2,[x,y]),linsolve_params:false; (%o3) [[x = %r2, y = - %r2], [x = %r3, y = %r3]]
一方
(%i4) nnsolve(x^2=y^2); (%o4) (y - x = 0) %or (y + x = 0)
なのですが,solve による解のパラメトリック表示を,存在量化の形で残すスイッチ nnsqesolve も付けています.これを false にすると,qepmax と nns による最後の整形を行いません.
(%i5) nnsolve(x^2=y^2),nnsqesolve:false; (%o5) (qe([[E, s1]], (x = - s1) %and (y = s1))) %or (qe([[E, s1]], (x = s1) %and (y = s1))) (%i6) %,eval; (%o6) (y - x = 0) %or (y + x = 0)
(%i7) nnsolve(x^3+y^3+z^3=3*x*y*z); (%o7) ((y - x = 0) %and (z - x = 0)) %or (z + y + x = 0) (%i8) nnsolve(x^3+y^3+z^3=3*x*y*z),nnsqesolve:false; (%o8) (qe([[E, s1]], (x = s1) %and (y = s1) %and (z = s1))) %or (qe([[E, s1], [E, s2]], (x = (- s2) - s1) %and (y = s2) %and (z = s1))) (%i9) %,eval; (%o9) ((y - x = 0) %and (z - x = 0)) %or (z + y + x = 0)