読者です 読者をやめる 読者になる 読者になる

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)