不等式

最初は,不等式を解くのに simplex を使ったり ineq1():1次不等式を解く関数,ineq2():2次不等式を解く関数を作ったりして対応してました。しかしフーリエ級数で遊んでいたところ,ありました。不等式を解くパッケージが。
題して「Maximaで不等式を解く」

--> load(fourier_elim)$

何だろう,フーリエ消去?
下のが mailinglist の例として載ってたやつ。

--> standardize_ineq(e) := ?standardize\-inequality(e)$

(%i3) standardize_ineq(abs(x-6) > 7);
Result

(%i4) standardize_ineq(abs(x-6) < 7);
Result

(%i5) standardize_ineq((x-6) # 0);
Result

(%i6) standardize_ineq(max(x,-x) > 42);
Result

(%i7) args(%);
Result

以上。
この下から関数 fourier_elim の例として載ってたやつ。

(%i10) fourier_elim([x/2+2/x>2],[x]);
Result

(%i11) fourier_elim([x/2+2/x<=2],[x]);
Result

(%i12) fourier_elim([x + 1/y < 1, x - y > 3],[x,y]);
Result

(%i13) fourier_elim([abs(1 + abs(1 - abs(1 - x))) > 7],[x]);
Result

(%i14) fourier_elim([max(x,y) > 6, min(x,6) < 5 - y],[x,y]);
Result

さあ,ここから高校数学ではどの程度いけるかの,実験。

(%i16) fourier_elim([2*x-1>0],[x]);
Result

(%i17) fourier_elim([x^2-x-2<0],[x]);
Result

(%i18) standardize_ineq(x^2-x-2<0);
Result

(%i19) ratsimp(%);
Result

(%i22) fourier_elim([3*x+2*(7-2*x)くx+2],[x]);
Result

どうも standardlize_ineq() より fourier_elim の方がよさそうだ,これで不等式を解く関数を作ろう。

(%i23) ineq(f):=fourier_elim([f],[x])$

1次不等式は解けそう。文字係数は駄目だった。

(%i24) ineq((2*x+1)/3-(5*x-2)/4<=-x);
Result

(%i25) fourier_elim([5*x+4>2*x+7,7*x-6<=4*x+9],[x]);
Result

連立1次不等式もOK。

(%i26) ineq(abs(x-3)<2);
Result

(%i27) ineq(abs(x-3)>2);
Result

(%i28) ineq(abs(x-3)=2);
Result

絶対値(中が1次)が入った不等式も解ける(すごい!)。 さあ2次不等式の実験だ。

(%i29) ineq(2*x-1=0);
Result

(%i30) ineq(abs(2*x-4)くx+1);
Result

(%i33) ineq(x^2+5*abs(x)-6=0);
Result

なんと方程式も不等式として解ける。同値変形してるのかな?

(%i34) ineq(x^2-9*x+20>0);
Result

(%i35) ineq(2*x^2-7*x+6<=0);
Result

(%i36) ineq(x^2-2*x-1<0);
Result

(%i37) standardize_ineq(x^2-2*x-1<0);
Result

(%i38) ineq(-x^2+x+2>0);
Result

(%i39) ineq(x^2+4*x+4>0);
Result

(%i40) ineq(4*x^2-4*x+1<0);
Result

(%i41) ineq(-x^2+10*x-25>=0);
Result

(%i42) ineq(9*x^2+6*x+1>=0);
Result

(%i44) ineq(x^2-3*x+5>0);
Result

(%i45) ineq(x^2-2*sqrt(5)*x+5>=0);
Result

(%i47) solve(x^2-2*sqrt(5)*x+5);
Result

結論 不等式は整係数に因数分解されるときだけOKということらしい。
前に作った ineq2() はまだ有用だ。
絶対値の中が2次式は駄目そう。

(%i48) ineq(x^3-1>0);
Result

(%i52) ineq(abs(x^2-x)<2);
Result

絶対記号が2つでも

(%i54) ineq(abs(x-1)+abs(x-2)<4);
Result

グラフをかいて確認してみると冗長な答だがまちがってはいない。

(%i58) wxplot2d([abs(x-1)+abs(x-2),4], [x,-5,5])$
Result

inserted by FC2 system