言語エンジンeng_langの環境設定

HOME <- system("echo ${HOME}", intern=T)
setup_file <- paste(HOME,"/bin/eng_lang_setup.R",sep="")  
source(setup_file)
## === knitr, reticulate, eng_lang are go. ===

1. maxima の実行例

(linel:70)$                  /* 行長を指定(コメント例) */
exp1 : (x+y)^2;              /* 式の定義 */
exp2 : expand(exp1);         /* 式exp1を展開 */
(display2d:false)$           /* 表示形式の変更 */
factor(exp2);                /* 式exp2を因数分解 */
solve(x^2-2*x-1=0,x);        /* 2次方程式の求解 */
solve([a*x+b*y=e,c*x+d*y=f],[x,y]);  /* 連立方程式の求解 */
/* 作図例 */
draw2d(   terminal='png, file_name="test1_files/fig1",
          title="Two simple plots",
          xlabel="x",ylabel="y",grid=true,

          color=red,key="A sinus",
          explicit(sin(x),x,1,10),
          color=blue,line_type=dots,key="A cosinus",
          explicit(cos(x),x,1,10)
)$
## ~/bin/go TMP/tmp_lang/chunk-1.mx  > TMP/tmp_lang/chunk-1.out 2>&1
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-1.mx")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-1.mx
## linel:70
## exp1:(x+y)^2
##                                       2
##                                (y + x)
## exp2:expand(exp1)
##                             2            2
##                            y  + 2 x y + x
## display2d:false
## factor(exp2)
## (y+x)^2
## solve(x^2-2*x-1 = 0,x)
## [x = 1-sqrt(2),x = sqrt(2)+1]
## solve([a*x+b*y = e,c*x+d*y = f],[x,y])
## [[x = -(d*e-b*f)/(b*c-a*d),y = (c*e-a*f)/(b*c-a*d)]]
## draw2d(terminal = 'png,file_name = "test1_files/fig1",
##        title = "Two simple plots",xlabel = "x",ylabel = "y",
##        grid = true,color = red,key = "A sinus",
##        explicit(sin(x),x,1,10),color = blue,line_type = dots,
##        key = "A cosinus",explicit(cos(x),x,1,10))
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-1.mx"
test1_files/fig.pngのグラフ

test1_files/fig.pngのグラフ

on3ライブラリー

2. ライブラリ on3lib の呼び出しとヘルプ-1

batchload("/home/inoue/.maxima/max-init.mac")$
on3lib(21);   /* on3ライブライリーの呼び出し */
on3help();  /* ヘルプ */
if false then (
  functions  /* on3ライブラリの関数一覧 */
  )$
if false then (
  print("--- 1. on3simp_ex ---------"), on3simp_ex(),
  print("--- 2. on3std_ex ----------"), on3std_ex(),
  print("--- 3. on3decomp_ex -------"), on3decomp_ex(),
  print("--- 4. on3ev_ex -----------"), on3ev_ex(),
  print("--- 5. on3diff_ex ---------"), on3diff_ex(),
  print("--- 6. on3integ_ex --------"), on3integ_ex(),
  print("--- 7. on3solve_ex --------"), on3solve_ex(),
  print("--- 8. on3dim2_uni2 -------"), on3dim2_uni2('noplot,'noview),
  print("--- 9. on3dim2_exp2 -------"), on3dim2_exp2('noplot,'noview),
  print("---10. on3pw_ex -----------"), on3pw_ex()
)$
## ~/bin/go TMP/tmp_lang/chunk-2.mx  > TMP/tmp_lang/chunk-2.out 2>&1
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-2.mx")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-2.mx
## batchload("/home/inoue/.maxima/max-init.mac")
## *** INOUE's Personal Init File : ~/.maxima/max-init.mac *** 
## on3lib(21)
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## "-- batchload: ~/Maxlib-20/on3lib21.mx & on3env() ---"
## on3help()
##   === on3lib.mx (定義域を伴った関数の数式操作) 一覧 ===
##   0. on3help()          : on3関数の機能一覧 
##   1. on3(z,z0,z1,arg)   : on3関数(関数定義域)の定義[変数,下限,上限,開閉]
##   2. f2l(on3funcs)  : on3関数式をon3リスト形式に変換する[多変数対応版]
##   3. l2f(on3list)   : on3リスト形式をon3関数形式に変換する[多変数対応版]
##   4. on3simp(on3funcs)  : on3関数式の積に関する簡約化(on3decompに組み込み) 
##   5. on3decomp(funcs,[args])    : [多変数対応版]
##        on3関数式の和(差)において素な区間(領域)への分解表現を与える
##   6. on3std(on3func)            : on3一般式の標準化 
##   7. on3ev(on3func,arg)         : 関数部に{factor,ratsimp,expand}を作用する
##   8. on3solve(funcs,vars)       : on3関数式の求解[多変数対応版]
##   9. on3diff(func,var,p)        : on3関数式の微分[多変数対応版]
##  10. on3integ(func,var,[args])  : on3関数式の積分[多変数対応版] 
##        on3integ(func,var)       :   不定積分関数(分布関数に対応) 
##        on3integ(func,var,x0,x1) :   定積分値 
##  11. on3chgvar2(funcs) : on3関数式f(x,y)を変換(t=x+y,u=y)した関数g(t,u)を返す
##  12. on3show(funcs)    : on3関数式の表示[多変数対応版] 
##  
##  13. on3pw(funcs)      : on3関数式のカプセル化 
##  ex. on3_ex(),         on3simp_ex(),      on3std_ex(),
##      on3decomp_ex(),   on3show_ex(),      on3ev_ex(),
##      on3diff_ex(),     on3integ_ex(),     on3solve_ex(),     
##      on3chgvar2_ex()   on3pw_ex(), 
##  ex. on3dim2_uni2()    : 一様分布に従う独立確率変数の和の分布
##      on3dim2_exp2()    : 指数分布に従う独立確率変数の和の分布
##  ex. on3test()     : on3_ex, on3list_ex, on3simp_ex, on3decomp_ex の連続実行
##      ---> 関数表示 dispfun(on3,on3simp,...) または grind(on3) 
##   
## "--- end of on3help ---"
## if false then functions
## if false
##     then (print("--- 1. on3simp_ex ---------"),on3simp_ex(),
##           print("--- 2. on3std_ex ----------"),on3std_ex(),
##           print("--- 3. on3decomp_ex -------"),on3decomp_ex(),
##           print("--- 4. on3ev_ex -----------"),on3ev_ex(),
##           print("--- 5. on3diff_ex ---------"),on3diff_ex(),
##           print("--- 6. on3integ_ex --------"),on3integ_ex(),
##           print("--- 7. on3solve_ex --------"),on3solve_ex(),
##           print("--- 8. on3dim2_uni2 -------"),on3dim2_uni2('noplot,'noview),
##           print("--- 9. on3dim2_exp2 -------"),on3dim2_exp2('noplot,'noview),
##           print("---10. on3pw_ex -----------"),on3pw_ex())
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-2.mx"

3. on3env() : on3ライブラリーのロードとlispファイルの書き出し

batchload("/home/inoue/Maxlib-20/on3lib21.mx")$   
on3env()$
on3('ex)$
max_save()$ /* lisp ファイル /tmp/max_save.lisp に書き出す */
## ~/bin/go TMP/tmp_lang/chunk-3.mx  > TMP/tmp_lang/chunk-3.out 2>&1
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-3.mx")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-3.mx
## batchload("/home/inoue/Maxlib-20/on3lib21.mx")
## on3env()
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## on3('ex)
##  === on3('ex) : on3 関数の使用例 === 
## ▼ 基本動作 
## ★ ◎  on3(0,1,3,co) = 0  
## ★ ◎  on3(1,1,3,co) = 1  
## ★ ◎  on3(3,1,3,co) = 0  
## ★ ◎  on3(x,1,3,co) = on3(x,1,3,co)  
## ★ ◎  on3(3,1,b,co) = on3(3,1,b,co)  
## ★ ◎  on3(x,minf,inf,oo) = on3(x,minf,inf,oo) 
##      <- ( = 1 であるが,on3decomp()の仕様のため無処理とする) 
## ▼ inf/minf の取扱 
## ★ ◆ 不一致 ◆ on3(inf,1,inf,co) 
##     = 0 
##  <- ans = 1 
## ★ ◎  on3(inf+1,1,inf,co) = 0  
## ▼ 変数式の取扱 
## ★ ◎  on3(a,a-1,a+3,co) = 1  
## ★ ◎  on3(a+3,a-1,a+3,co) = 0  
## ★ ◎  on3(t-u,t-u,(-u)+t+3,co) = 1  
## ★ ◎  on3((-u)+t+3,t-u,(-u)+t+3,co) = 0  
## ▼ on3()関数のリスト変換,eval評価 
## ★ ◎  on3(x^2,1,4,co,list) = [on3,x^2,1,4,co]  
## ★ ◎  on3(x^2,1,4,co,eval) = on3(x,1,2,co)+on3(x,-2,-1,oc)  
## ★ ◎  on3(log(x),1,2,cc,eval) = on3(x,%e,%e^2,cc)  
## ★ ◎  on3(sin(x),1/2,1,cc,eval) = on3(x,%pi/6,%pi/2,cc)  
## ★ ◎  on3(sin(2*x+%pi/4),1/2,1,oo,eval) = on3(x,-%pi/24,%pi/8,oo)  
## max_save()
## save("/tmp/max_save.lisp", all) 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-3.mx"
  • 注:上記の実行結果の前に◎印があるものは,実行結果が作成者の意図した結果に一致することを示す。一致しない場合は,作成者の意図した結果を ans = … で示す。

4. 関数 on3() : 区間の定義と判定

on3()$
on3('ex)$
## ~/bin/go TMP/tmp_lang/chunk-4.mxl  > TMP/tmp_lang/chunk-4.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-4.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-4.mxl
## on3()
##      --on3('help)--
##      機能: 変数zが不等式 zl <= z < zr (lc=co) のとき1を返しそのたのとき0を返す
##      文法: on3(z,zl,zr,lr,...)  lrは開(o)閉(c)を表す. 追加引数としてlist,evalが可能
##      例示: 
##      on3(z,zl,zr,co);  変数zが不等式 zl <= z < zr のとき1を返しそのたのとき0を返す
##      on3(0,1,3,co);           -> 0    on3(1,1,3co) -> 1  on3(3,1,3,co) -> 0
##      on3(2,1,3,co);           -> 1
##      on3(x,1,3,co);           -> on3(x,1,3,co)  判定不能の場合は定義式を返す
##      on3(a,a-1,a+3,co);       -> 1
##      on3(x^2,1,4,co,list);    -> [on3,x^2,1,4,co]      (リスト形式に変換)
##      on3(log(x),1,2,cc,eval); -> on3(x,%e,%e^2,cc)     (evalによる評価変換)
##      メモ: findstr('on3) -> on3 を含む関数名一覧を標示する 
##      --end of on3('help)--
##       
## on3('ex)
##  === on3('ex) : on3 関数の使用例 === 
## ▼ 基本動作 
## ★ ◎  on3(0,1,3,co) = 0  
## ★ ◎  on3(1,1,3,co) = 1  
## ★ ◎  on3(3,1,3,co) = 0  
## ★ ◎  on3(x,1,3,co) = on3(x,1,3,co)  
## ★ ◎  on3(3,1,b,co) = on3(3,1,b,co)  
## ★ ◎  on3(x,minf,inf,oo) = on3(x,minf,inf,oo) 
##      <- ( = 1 であるが,on3decomp()の仕様のため無処理とする) 
## ▼ inf/minf の取扱 
## ★ ◆ 不一致 ◆ on3(inf,1,inf,co) 
##     = 0 
##  <- ans = 1 
## ★ ◎  on3(inf+1,1,inf,co) = 0  
## ▼ 変数式の取扱 
## ★ ◎  on3(a,a-1,a+3,co) = 1  
## ★ ◎  on3(a+3,a-1,a+3,co) = 0  
## ★ ◎  on3(t-u,t-u,(-u)+t+3,co) = 1  
## ★ ◎  on3((-u)+t+3,t-u,(-u)+t+3,co) = 0  
## ▼ on3()関数のリスト変換,eval評価 
## ★ ◎  on3(x^2,1,4,co,list) = [on3,x^2,1,4,co]  
## ★ ◎  on3(x^2,1,4,co,eval) = on3(x,1,2,co)+on3(x,-2,-1,oc)  
## ★ ◎  on3(log(x),1,2,cc,eval) = on3(x,%e,%e^2,cc)  
## ★ ◎  on3(sin(x),1/2,1,cc,eval) = on3(x,%pi/6,%pi/2,cc)  
## ★ ◎  on3(sin(2*x+%pi/4),1/2,1,oo,eval) = on3(x,-%pi/24,%pi/8,oo)  
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-4.mxl"

5. 関数 on3simp() : on3()関数の積の簡約化

on3simp()$
on3simp('ex)$
## ~/bin/go TMP/tmp_lang/chunk-5.mxl  > TMP/tmp_lang/chunk-5.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-5.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-5.mxl
## on3simp()
##    --begin of on3simp('help)--
##    機能: on3(z,zl,zr,lr) 関数の積に関する簡約化(簡約化規則 on3rule2 を使用する)
##    文法: on3simp(on3()の積)
##    例示: on3simp(x * on3(x,0,3,co) * on3(x,0,3,co))          -> x*on3(x,0,3,co)
##          on3simp(x* on3(x,minf,3,co) * x^2 * on3(x,2,4,co)) ->  x^3*on3(x,2,3,co)
##          on3simp(x^3 * on3(x,0,3,co) / (x*on3(x,1,5,co)))   ->  x^2*on3(x,1,3,co) 
##          on3simp(1/(f1*on3(x,1,5,co) + f2*on3(x,2,8,co)) * on3(x,3,10,co)) 
##           -> on3(x,3,10,co)/(f2*on3(x,2,8,co)+f1*on3(x,1,5,co))
##    --end of on3simp('help')--
##    
## on3simp('ex)
## --begin of on3simp('ex)-- 
##  例.on3関数の積/商の簡約化 
## ★ ◎  on3simp(x * on3(x,0,3,co) * on3(x,0,3,co)) = x*on3(x,0,3,co)  
## ★ ◎  on3simp(x^3 * on3(x,0,3,co) / (x * on3(x,0,3,co))) 
##      = x^2*on3(x,0,3,co)  
## ★ ◎  on3simp(x* on3(x,minf,3,co) * x^2 * on3(x,2,4,co)) 
##      = x^3*on3(x,2,3,co)  
## ★ ◎  on3simp(x^3 * on3(x,0,3,co) / (x*on3(x,1,5,co))) 
##      = x^2*on3(x,1,3,co)  
## ★ ◎  on3simp(x* on3(x,1,3,co) * x^3 * on3(x,2,4,co) * x * on3(x,2,5,co)) 
##      = x^5*on3(x,2,3,co)  
## ★ ◎  on3simp((f1*on3(x,1,5,co) + f2*on3(x,2,8,co)) * on3(x,3,10,co)) 
##      = f2*on3(x,3,8,co)+f1*on3(x,3,5,co)  
## ★ ◎  on3simp(1/(f1*on3(x,1,5,co) + f2*on3(x,2,8,co)) * on3(x,3,10,co)) 
##      = on3(x,3,10,co)/(f2*on3(x,2,8,co)+f1*on3(x,1,5,co))  
##                    on3(x, 3, 10, co)
##  out = ----------------------------------------- 
##        f2 on3(x, 2, 8, co) + f1 on3(x, 1, 5, co)
## ★ ◎  on3simp((f1*on3(x,1,5,co) + f2*on3(x,2,8,co))*on3(x,minf,inf,oo)) 
##      = f2*on3(x,2,8,co)+f1*on3(x,1,5,co)  
##  例0.on3関数の積(評価不能の場合と置数後の評価) 
## CS: a = a , ex0 = x^3 * on3(x,0,3,co) / (x*on3(x,a,3,co)) , ex0f = 
##    on3simp(x^3 * on3(x,0,3,co) / (x*on3(x,a,3,co))) 
##  ++ 仮定: assume :  a  <=  3  を追加し,処理を続行する ++ 
## (%t3) out = x^2*on3(x,0,3,co)*on3(x,a,3,co)
## CS: a = 2 
## (%t4) a = 2
## (%t5) out2 = x^2*on3(x,2,3,co)
## --end of on3simp('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-5.mxl"

6. 関数 on3std() : on3()関数の標準化

on3std()$
on3std('ex)$
## ~/bin/go TMP/tmp_lang/chunk-6.mxl  > TMP/tmp_lang/chunk-6.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-6.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-6.mxl
## on3std()
##    --begin of on3std('help)--
##    機能: 式から指定変数に関するon3標準型(微分・積分可能な多項式)表現を返す
##          R1: 非on3式(on3none) → 無処理
##          R2: on3単項式(on3monoone,on3mono) → 無処理
##          R3: on3多項式(on3poly) → 定数項 f0 があれば f0*on3(x,minf,inf,oo) とする
##          R4: on3有理式(on3inv,on3polyinv) → on3排他的区分分解形(on3多項式になる)を返す
##    文法: on3std(expr,var,...)
##    例示: on3std(expr) (1変数の場合) on3std(expr,var) (2変数以上の場合)
##    --end of on3std('help')--
##    
## on3std('ex)
## --begin of on3std('ex)-- 
## == on3std_ex : 標準型(変数毎,on3有理式はon3decomp21()が必要) === 
## ◆ 例1 
##     ex = f0 
##     on3vars(ex) -> []  var -> var  on3typep(ex) -> on3none 
## ◎   out = f0 
## ◆ 例2 
##     ex = on3(x,1,2,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3monoone 
## ◎   out = on3(x,1,2,co) 
## ◆ 例3 
##     ex = -on3(x,1,2,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3mono 
## ◎   out = -on3(x,1,2,co) 
## ◆ 例4 
##     ex = on3(x,1,2,co)+f0 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f0*on3(x,minf,inf,oo)+on3(x,1,2,co) 
## ◆ 例5 
##     ex = f1*f2*on3(x,1,2,co)+f0 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f0*on3(x,minf,inf,oo)+f1*f2*on3(x,1,2,co) 
## ◆ 例6 
##     ex = f1*log(x)*on3(x,1,2,co)+f0 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co) 
## ◆ 例7 
##     ex = f1*on3(x,5,7,co)+f1*on3(x,3,5,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f1*on3(x,5,7,co)+f1*on3(x,3,5,co) 
## ◆ 例8 
##     ex = f2*on3(x,2,5,co)+f1*on3(x,1,3,co)+f3*on3(x,0,inf,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f2*on3(x,2,5,co)+f1*on3(x,1,3,co)+f3*on3(x,0,inf,co) 
## ◆ 例9 
##     ex = 1/(f2*on3(x,3,7,co)+f1*on3(x,1,5,co))+f0*on3(x,3,5,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3polyinv 
## ◎   out = on3(x,5,7,co)/f2+((f0*(f2+f1)+1)*on3(x,3,5,co))/(f2+f1)+on3(x,1,3,co)/f1 
## ◆ 例10 
##     ex = 1/((f2*on3(x,3,7,co))/(f22*on3(x,3,5,co)+f21*on3(x,1,3,co))+f1*on3(x,1,5,co))+f0
##     
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3polyinv 
## ◎   out = 
##      f0*on3(x,5,7,co)+(((f0*f1+1)*f22+f0*f2)*on3(x,3,5,co))/(f1*f22+f2)
##                      +((f0*f1+1)*on3(x,1,3,co))/f1 
## ◆ 例11 
##     ex = x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)+((1-x^2)*on3(x,0,1,oo))/2+sin(x) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = 
##      sin(x)*on3(x,minf,inf,oo)+x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)
##                               -((x^2-1)*on3(x,0,1,oo))/2 
## ◆ 例12 
##     ex = x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)+((1-x^2)*on3(x,0,1,oo))/2+myfunc(x) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = 
##      myfunc(x)*on3(x,minf,inf,oo)+x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)
##                                  -((x^2-1)*on3(x,0,1,oo))/2 
## ◆ 例13 
##     ex = %e^(1-x)*on3(x,1,inf,co)+x^2*on3(x,0,1,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = %e^(1-x)*on3(x,1,inf,co)+x^2*on3(x,0,1,co) 
## ◆ 例14 
##     ex = f2*on3(x,c,d,co)+f1*on3(x,a,b,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f2*on3(x,c,d,co)+f1*on3(x,a,b,co) 
## ◆ 例15 
##     ex = f2(x)*on3(x,2,4,co)+f1(x)*on3(x,1,3,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f2(x)*on3(x,2,4,co)+f1(x)*on3(x,1,3,co) 
## ◆ 例16 
##     ex = f2(x)*on3(x,c,d,co)+f1(x)*on3(x,a,b,co) 
##     on3vars(ex) -> [x]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f2(x)*on3(x,c,d,co)+f1(x)*on3(x,a,b,co) 
## ◆ 例17 
##     ex = f1*log(x)*on3(x,1,2,co)*on3(y,3,4,co)+f0 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f1*log(x)*on3(x,1,2,co)*on3(y,3,4,co)+f0*on3(x,minf,inf,oo) 
## ◆ 例18 
##     ex = f1*on3(x,1,2,co)*on3(y,3,4,co)+f2+f0 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f1*on3(x,1,2,co)*on3(y,3,4,co)+(f2+f0)*on3(x,minf,inf,oo) 
## ◆ 例19 
##     ex = f0*on3(y,5,6,co)+f1*on3(x,1,2,co)*on3(y,3,4,co) 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f0*on3(x,minf,inf,oo)*on3(y,5,6,co)+f1*on3(x,1,2,co)*on3(y,3,4,co) 
## ◆ 例20 
##     ex = f1*on3(x,3,7,co)*on3(y,4,8,co)+f2*on3(x,1,5,co)*on3(y,2,6,co) 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = f1*on3(x,3,7,co)*on3(y,4,8,co)+f2*on3(x,1,5,co)*on3(y,2,6,co) 
## ◆ 例21 
##     ex = 
##    (y+x+5)*(on3(x,2,3,co)*on3(y,-sqrt(9-x^2),sqrt(9-x^2),cc)
##            +on3(x,-3,-2,co)*on3(y,-sqrt(9-x^2),sqrt(9-x^2),cc)
##            +on3(x,-2,2,co)*on3(y,-sqrt(9-x^2),-sqrt(4-x^2),cc)
##            +on3(x,-2,2,co)*on3(y,sqrt(4-x^2),sqrt(9-x^2),cc)) 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = 
##      on3(x,2,3,co)*(y+x+5)*on3(y,-sqrt(9-x^2),sqrt(9-x^2),cc)
##       +on3(x,-3,-2,co)*(y+x+5)*on3(y,-sqrt(9-x^2),sqrt(9-x^2),cc)
##       +on3(x,-2,2,co)*((y+x+5)*on3(y,-sqrt(9-x^2),-sqrt(4-x^2),cc)
##                       +(y+x+5)*on3(y,sqrt(4-x^2),sqrt(9-x^2),cc)) 
## ◆ 例22 
##     ex = r*on3(r,2,3,cc)*(r*sin(t)+r*cos(t)+5)*on3(t,0,2*%pi,cc) 
##     on3vars(ex) -> [r,t]  var -> r  on3typep(ex) -> on3poly 
## ◎   out = on3(r,2,3,cc)*(r^2*sin(t)+r^2*cos(t)+5*r)*on3(t,0,2*%pi,cc) 
## ◆ 例23 
##     ex = f2*on3(x,1,2,co)*on3(y,3,4,co)+f1*on3(x,1,2,co)*on3(y,3,4,co) 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = (f2+f1)*on3(x,1,2,co)*on3(y,3,4,co) 
## ◆ 例24 
##     ex = f2*on3(x,1,2,co)*on3(y,4,6,co)+f1*on3(x,1,2,co)*on3(y,3,5,co) 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = on3(x,1,2,co)*(f2*on3(y,4,6,co)+f1*on3(y,3,5,co)) 
## ◆ 例25 
##     ex = 1/(f2*on3(x,1,2,co)*on3(y,4,6,co)+f1*on3(x,1,2,co)*on3(y,3,5,co)) 
##     on3vars(ex) -> [x,y]  var -> x  on3typep(ex) -> on3inv 
## ◎   out = on3(x,1,2,co)/(f2*on3(y,4,6,co)+f1*on3(y,3,5,co)) 
## ◆ 例26 
##     ex = on3(x,1,2,co)*on3(y,3,4,co)*on3(z,5,6,co) 
##     on3vars(ex) -> [x,y,z]  var -> x  on3typep(ex) -> on3mono 
## ◎   out = on3(x,1,2,co)*on3(y,3,4,co)*on3(z,5,6,co) 
## ◆ 例27 
##     ex = f1*on3(x,1,2,co)*on3(y,3,4,co)*on3(z,5,6,co)+f2*on3(y,3,4,co)*on3(z,5,6,co) 
##     on3vars(ex) -> [x,y,z]  var -> x  on3typep(ex) -> on3poly 
## ◎   out = 
##      f2*on3(x,minf,inf,oo)*on3(y,3,4,co)*on3(z,5,6,co)
##       +f1*on3(x,1,2,co)*on3(y,3,4,co)*on3(z,5,6,co) 
## --end of on3std('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-6.mxl"

7. 関数 on3typep() : 式からon3式タイプを調べ結果を返す

on3typep()$
on3typep('ex)$
## ~/bin/go TMP/tmp_lang/chunk-7.mxl  > TMP/tmp_lang/chunk-7.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-7.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-7.mxl
## on3typep()
##    --begin of on3typep('help)--
##    機能: 式からon3式タイプを調べ結果を返す 
##         on3noe(非on3式), on3monoone(on3単項式,関数部1), on3mono(on3単項式),
##         on3inv(on3分数式), on3poly(on3多項式), on3polyinv(on3有理式),
##         on3unknown(その他のon3式),
##    文法: on3typep(expr,...)
##    例示: 
##    --end of on3typep('help')--
##    
## on3typep('ex)
## --begin of on3typep('ex)-- 
## ---<on3タイプ情報>--- 
##     ex = f0 
##     out:on3typep(ex) = on3none 
## ---<on3タイプ情報>--- 
##     ex = on3(x,1,2,co) 
##     out:on3typep(ex) = on3monoone 
## ---<on3タイプ情報>--- 
##     ex = -on3(x,1,2,co) 
##     out:on3typep(ex) = on3mono 
## ---<on3タイプ情報>--- 
##     ex = on3(x,1,2,co)+f0 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f0-f1*on3(x,1,2,co) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f1*f2*on3(x,1,2,co)+f0 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f1*log(x)*on3(x,1,2,co)+f0 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f1*on3(x,5,7,co)+f1*on3(x,3,5,co) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f2*on3(x,2,5,co)+f1*on3(x,1,3,co)+f3*on3(x,0,inf,co) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = 1/(f2*on3(x,3,7,co)+f1*on3(x,1,5,co))+f0*on3(x,3,5,co) 
##     out:on3typep(ex) = on3polyinv 
## ---<on3タイプ情報>--- 
##     ex = 1/((f2*on3(x,3,7,co))/(f22*on3(x,3,5,co)+f21*on3(x,1,3,co))+f1*on3(x,1,5,co))+f0
##     
##     out:on3typep(ex) = on3polyinv 
## ---<on3タイプ情報>--- 
##     ex = x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)+((1-x^2)*on3(x,0,1,oo))/2+sin(x) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)+((1-x^2)*on3(x,0,1,oo))/2+myfunc(x) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = %e^(1-x)*on3(x,1,inf,co)+x^2*on3(x,0,1,co) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f1*on3(x,a,b,co) 
##     out:on3typep(ex) = on3mono 
## ---<on3タイプ情報>--- 
##     ex = f2*on3(x,c,d,co)+f1*on3(x,a,b,co) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f1(x)*on3(x,1,2,co) 
##     out:on3typep(ex) = on3mono 
## ---<on3タイプ情報>--- 
##     ex = f2(x)*on3(x,2,4,co)+f1(x)*on3(x,1,3,co) 
##     out:on3typep(ex) = on3poly 
## ---<on3タイプ情報>--- 
##     ex = f1(x)*on3(x,a,b,co) 
##     out:on3typep(ex) = on3mono 
## ---<on3タイプ情報>--- 
##     ex = f2(x)*on3(x,c,d,co)+f1(x)*on3(x,a,b,co) 
##     out:on3typep(ex) = on3poly 
## --end of on3typep('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-7.mxl"

8. 関数 on3info() : expr に含まれる変数varの関数on3(var…)の情報をリストで返す

on3info()$
on3info('ex)$
## ~/bin/go TMP/tmp_lang/chunk-8.mxl  > TMP/tmp_lang/chunk-8.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-8.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-8.mxl
## on3info()
##    --begin of on3info('help)--
##    機能: expr に含まれる変数varの関数on3(var...)の情報をリストで返す
##         結果のリストはoutLev()で取り出せる.
##         on3多項式を前提とするため,定数項が存在する合も考慮されている(変数毎のon3stdの機能を有する)
##         引数に'std がある場合は指定された変数に関する標準化の結果を返す
##         expr が on3有理式の場合は on3decomp21(expr,x,[仮定1,...]) によりon3多項式化を得る.
##    文法: on3info(expr,x,...) or on3info(expr)
##         on3info(expr,x,'factor), on3info(expr,x,'std)
##    例示: on3info(f1*log(x)*on3(x,1,2,co)+f0, x,'std)
##         -> f0*on3(x,minf,1,oo) + (f0+f1)*on3(x,1,2,co) + f0*on3(x,2,inf,co) (標準化)
##    --end of on3info('help')--
##    
## on3info('ex)
## --begin of on3info('ex)-- 
## ---begin of on3info_ex--- 
##     ◆ 例0 ex0 = f1*log(x)*on3(x,1,2,co)+f0   <- on3std未処理の場合 
##     on3info(ex0,x) = 
##    [expr = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co),var = x,
##     Lon3 = [[on3,x,1,2,co],[on3,x,minf,inf,oo]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,1,2,co),on3(x,minf,inf,oo)],Lon3coef = [f1*log(x),f0],
##     Lon3lr0 = [minf,1,2,inf],Lon3lr = [1,2],undefpnts = [],
##     outf = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)] 
##     ◆  on3info(ex0,x,'std) = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)  
##     <- 'std 指定の場合 
##     ◆ 例1 ex1 = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)  
##     <- on3std処理済みの場合 
##     on3info(ex1,x) = 
##    [expr = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co),var = x,
##     Lon3 = [[on3,x,1,2,co],[on3,x,minf,inf,oo]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,1,2,co),on3(x,minf,inf,oo)],Lon3coef = [f1*log(x),f0],
##     Lon3lr0 = [minf,1,2,inf],Lon3lr = [1,2],undefpnts = [],
##     outf = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)] 
##     ◆ 例1-2 ex1 = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)  
##     <- 結果リストの一括取り込みと一括削除の例 
## ★  (outLev(on3info(ex1,x),"test_"), /* 結果リストをtest_*で取り込む */  
##     c0show(test_Lon3f), c0show(test_Lon3coef), /* 取り込みリストの表示 */  
##     killvars(["test_"]) /* 取り込みリストの一括削除 */ , values) 
##     test_Lon3f = [on3(x,1,2,co),on3(x,minf,inf,oo)] 
##     test_Lon3coef = [f1*log(x),f0] 
##     out =  
##           [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##            tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,std,expr,
##            var,wL,ic,Lon3,Lon3lr0,Lon3lr,on3v,on3f,on3coef,Lon3v,Lon3f,Lon3coef,
##            undefpnts,outL,outf,ex0,ex1,ex2,ex22,ex3,ex4,ex,cmds,L,out,chk,ans,hlp,hlpL,
##            cmdsansL,cmdsL,w_out,chkm,k] 
##     ◆ 例2-1 ex2 = (f*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co))  
##     <- 有理式の分母に適用した場合 
##     ratdenom(ex2) = on3(x,a,b,co)*f1+f2*on3(x,c,d,co) 
##     on3info(ratdenom(ex2),x) = 
##    [expr = f2*on3(x,c,d,co)+f1*on3(x,a,b,co),var = x,
##     Lon3 = [[on3,x,a,b,co],[on3,x,c,d,co]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,a,b,co),on3(x,c,d,co)],Lon3coef = [f1,f2],Lon3lr0 = [a,b,c,d],
##     Lon3lr = [a,b,c,d],undefpnts = [false,false,false,false],
##     outf = f2*on3(x,c,d,co)+f1*on3(x,a,b,co)] 
##     ◆ 例2-2 ex22 = 
##    (f4*on3(x,2,4,co)+f3*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co))  
##     <- 有理式に適用した場合 
##     ex22 = (f4*on3(x,2,4,co)+f3*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co)) 
##     on3info(ex22,x,'std) = 
##    (f4*on3(x,2,4,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co))
##     +(f3*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co)) 
##     
##    ■ on3decomp21(ex22,x,[1<a,a<2,2<c,c<3,3<b,b<4,4<d]) を実行しon3多項式(排他的分解済)を得る
##     
##     on3decomp21(ex22,x,[1 < a,a < 2,2 < c,c < 3,3 < b,b < 4,4 < d]) = 
##    ((f4+f3)*on3(x,c,3,co))/(f2+f1)+(f4*on3(x,b,4,co))/f2+(f3*on3(x,a,2,co))/f1
##                                   +(f4*on3(x,3,b,co))/(f2+f1)+((f4+f3)*on3(x,2,c,co))/f1 
##     ◆ 例3 ex3 = ex3   第1引数が単変数でない場合 
##     ex3 = f2*on3(t-u,u,inf,co)+f1*on3(t-u,1,3,co) 
##     on3info(ex3,t) = 
##    [expr = f2*on3(t-u,u,inf,co)+f1*on3(t-u,1,3,co),var = t,
##     Lon3 = [[on3,t-u,1,3,co],[on3,t-u,u,inf,co]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(t-u,1,3,co),on3(t-u,u,inf,co)],Lon3coef = [f1,f2],Lon3lr0 = [1,3,inf,u],
##     Lon3lr = [1,3,u],undefpnts = [false],outf = f2*on3(t-u,u,inf,co)+f1*on3(t-u,1,3,co)] 
##     ◆ 例4 ex4 = on3(x,1,8,co)*f1(x,y)*on3(y,minf,3,oo)+f2(x,y)*on3(y,2,5,cc)  
##     2変数関数の場合 
##     on3info(ex4,y) = 
##    [expr = on3(x,1,8,co)*f1(x,y)*on3(y,minf,3,oo)+f2(x,y)*on3(y,2,5,cc),var = y,
##     Lon3 = [[on3,y,2,5,cc],[on3,y,minf,3,oo]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(y,2,5,cc),on3(y,minf,3,oo)],Lon3coef = [f2(x,y),on3(x,1,8,co)*f1(x,y)],
##     Lon3lr0 = [minf,2,3,5],Lon3lr = [2,3,5],undefpnts = [],
##     outf = on3(x,1,8,co)*f1(x,y)*on3(y,minf,3,oo)+f2(x,y)*on3(y,2,5,cc)] 
## --end of on3info('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-8.mxl"

9. 関数 on3decomp() : on3一般式の排他的分解処理(端点は数値のみ, 多変数対応)

on3decomp()$
on3decomp('ex)$
## ~/bin/go TMP/tmp_lang/chunk-9.mxl  > TMP/tmp_lang/chunk-9.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-9.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-9.mxl
## on3decomp()
##    --begin of on3decomp('help)--
##    機能: on3一般式の排他的分解処理全般
##    文法: on3decomp(expr,...)
##    例示: on3decomp(on3(x,1,2,co)+f0) = 
##           f0*on3(x,minf,1,oo)+f0*on3(x,2,inf,co)+(f0+1)*on3(x,1,2,co) 
##         on3decomp(1/(on3(x,1,2,co)+f0)) = 
##           on3(x,minf,1,oo)/f0+on3(x,2,inf,co)/f0+on3(x,1,2,co)/(f0+1)  
##    --end of on3decomp('help')--
##    
## on3decomp('ex)
## --begin of on3decomp('ex)-- 
## == on3decomp_ex : 排他的領域分解 == 
## ★ ◎  on3decomp(on3(x,1,2,co)+f0) = 
##    f0*on3(x,minf,1,oo)+f0*on3(x,2,inf,co)+(f0+1)*on3(x,1,2,co)  
## ★ ◎  on3decomp(1/(on3(x,1,2,co)+f0)) = 
##    on3(x,minf,1,oo)/f0+on3(x,2,inf,co)/f0+on3(x,1,2,co)/(f0+1)  
##        [   1                      ]
##        [ ------    (1 <= x < 2)   ]
##        [ f0 + 1                   ]
##        [                          ]
##        [   1                      ]
##        [   --     (2 <= x < inf)  ]
##  out = [   f0                     ] 
##        [                          ]
##        [   1                      ]
##        [   --    (minf <  x <  1) ]
##        [   f0                     ]
##        [                          ]
##        [   0      ( otherwise )   ]
## ★ ◎  on3decomp(f1*on3(x,5,7,co)+f1*on3(x,3,5,co)) = f1*on3(x,3,7,co) 領域結合 
## ★ ◎  on3decomp(f2*on3(x,2,5,co)+f1*on3(x,1,3,co)+f3*on3(x,0,inf,co)) 
##      = 
##       f3*on3(x,5,inf,co)+(f3+f2)*on3(x,3,5,co)+(f3+f2+f1)*on3(x,2,3,co)
##                         +(f3+f1)*on3(x,1,2,co)+f3*on3(x,0,1,co)  
## ★ ◎  on3decomp(on3(x,3,10,co)/(f2*on3(x,2,8,co)+f1*on3(x,1,5,co))) 
##      = on3(x,5,8,co)/f2+on3(x,3,5,co)/(f2+f1)  
##        [    1                   ]
##        [ -------  (3 <= x < 5)  ]
##        [ f2 + f1                ]
##        [                        ]
##  out = [   1                    ] 
##        [   --     (5 <= x < 8)  ]
##        [   f2                   ]
##        [                        ]
##        [    0     ( otherwise ) ]
## ★ ◎  on3decomp(f2*on3(x,2,8,co)+f1*on3(x,1,5,co)) = 
##    f2*on3(x,5,8,co)+(f2+f1)*on3(x,2,5,co)+f1*on3(x,1,2,co)  
##        [   f1     (1 <= x < 2)  ]
##        [                        ]
##        [ f2 + f1  (2 <= x < 5)  ]
##  out = [                        ] 
##        [   f2     (5 <= x < 8)  ]
##        [                        ]
##        [    0     ( otherwise ) ]
## ★ ◎  on3decomp(1/(f2*on3(x,3,7,co)+f1*on3(x,1,5,co))+f0*on3(x,3,5,co)) 
##      = on3(x,5,7,co)/f2+((f0*f2+f0*f1+1)*on3(x,3,5,co))/(f2+f1)+on3(x,1,3,co)/f1  
##        [        1                         ]
##        [        --          (1 <= x < 3)  ]
##        [        f1                        ]
##        [                                  ]
##        [ f0 f2 + f0 f1 + 1                ]
##        [ -----------------  (3 <= x < 5)  ]
##  out = [      f2 + f1                     ] 
##        [                                  ]
##        [        1                         ]
##        [        --          (5 <= x < 7)  ]
##        [        f2                        ]
##        [                                  ]
##        [         0          ( otherwise ) ]
## ★ ◎  
##    on3decomp(1/((f2*on3(x,3,7,co))/(f22*on3(x,3,5,co)+f21*on3(x,1,3,co))+f1*on3(x,1,5,co))+f0)
##     
##      = 
##       f0*on3(x,minf,1,oo)+f0*on3(x,5,inf,co)
##                          +((f0*f1*f22+f22+f0*f2)*on3(x,3,5,co))/(f1*f22+f2)
##                          +((f0*f1+1)*on3(x,1,3,co))/f1  
##        [        f0 f1 + 1                          ]
##        [        ---------           (1 <= x < 3)   ]
##        [           f1                              ]
##        [                                           ]
##        [ f0 f1 f22 + f22 + f0 f2                   ]
##        [ -----------------------    (3 <= x < 5)   ]
##  out = [       f1 f22 + f2                         ] 
##        [                                           ]
##        [           f0              (5 <= x < inf)  ]
##        [                                           ]
##        [           f0             (minf <  x <  1) ]
##        [                                           ]
##        [            0              ( otherwise )   ]
## ★ ◎  on3decomp(f0*on3(y,5,6,co)+f1*on3(x,1,2,co)*on3(y,3,4,co)) 
##      = 
##       f0*on3(x,minf,1,oo)*on3(y,5,6,co)+f0*on3(x,1,inf,co)*on3(y,5,6,co)
##                                        +f1*on3(x,1,2,co)*on3(y,3,4,co)  
##        [ f1    (1 <= x < 2) & (3 <= y < 4)   ]
##        [                                     ]
##        [ f0   (1 <= x < inf) & (5 <= y < 6)  ]
##  out = [                                     ] 
##        [ f0  (minf <  x <  1) & (5 <= y < 6) ]
##        [                                     ]
##        [ 0            ( otherwise )          ]
## --end of on3decomp('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-9.mxl"

10. 関数 on3decomp_one() : 端点は数値のみ, 1変数毎 → on3decompm に吸収予定

on3decomp_one()$
on3decomp_one('ex)$
## ~/bin/go TMP/tmp_lang/chunk-10.mxl  > TMP/tmp_lang/chunk-10.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-10.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-10.mxl
## on3decomp_one()
##    --begin of on3decomp_one('help)--
##    機能: 変数毎の逐次排他的領域分解:特定変数に着目したon3()関数の排他的領域分解を行う.
##         引数に'invが指定されると結果の逆数が返される.
##    条件: 指定した特定変数に関する端点はすべて数値で大小関係は既知とする.
##          on3info(expr,var,'std)処理済み
##    文法: on3decomp_one(on3func,var,...)
##    例示: 
##         ex : f1(x)*on3(x,1,3,co) + f2(x)*on3(x,2,5,co)
##         -> f(x,xf) : f1(x)*on3(xf,1,3,co) + f2(x)*on3(xf,2,5,co)
##         端点 minf---1---2---3---5---inf
##         -> f1(x)*on3(xf,1,2,co) + (f1(x)+f2(x))*on3(xf,2,3,co) + f2(x)*on3(xf,3,5,co)
##         -> 1/f1(x)*on3(xf,1,2,co) + 1/(f1(x)+f2(x))*on3(xf,2,3,co) + 1/f2(x)*on3(xf,3,5,co)
##             ('inv が指定された場合)
##         端点の開閉
##         ev(f(x,xf),xf=1)=f1(x), ev(f(x,xf,xf=1.5)=f1(x), ev(f(x,xf),xf=2)=f1(x)+f2(x) 
##         -> on3(xf,1,2,co)
##         ev(f(x,xf),xf=2)=f1(x)+f2(x), ev(f(x,xf,xf=2.5)=f1(x)+f2(x), ev(f(x,xf),xf=3)=f2(x) 
##         -> on3(xf,2,3,co)
##         ev(f(x,xf),xf=3)=f2(x), ev(f(x,xf,xf=4)=f2(x), ev(f(x,xf),xf=5)=0 
##         -> on3(xf,3,5,co)
##    --end of on3decomp_one('help')--
##    
## on3decomp_one('ex)
## --begin of on3decomp_one('ex)-- 
## ★  (/* 例1. 排他的区分分解 */  
##     ex : f1(x)*on3(x,minf,3,co) + f2(x)*on3(x,2,5,cc),  
##     f : on3decomp_one(ex,x)  
##     ) 
## ◎   out = f1(x)*on3(x,minf,2,oo)+f2(x)*on3(x,3,5,cc)+(f2(x)+f1(x))*on3(x,2,3,co) 
## ★  (/* 例2-1. 2変量関数を変数yで分解 */  
##     f20 : f1(x,y)*on3(x,1,8,co)*on3(y,minf,3,oo) + f2(x,y)*on3(y,2,5,cc),  
##     fy : on3decomp_one(f20,y)  
##     ) 
## ◎   out = 
##      on3(x,1,8,co)*f1(x,y)*on3(y,minf,2,oo)+f2(x,y)*on3(y,3,5,cc)
##                                            +(f2(x,y)+on3(x,1,8,co)*f1(x,y))*on3(y,2,3,co)
##       
## ★  (/* 例2-2. fy を変数xで分解 */  
##     fy : ratexpand(fy), fyx : on3decomp_one(fy,x)  
##     ) 
## ◎   out = 
##      on3(x,1,8,co)*(f1(x,y)*on3(y,minf,2,oo)+f2(x,y)*on3(y,3,5,cc)+f2(x,y)*on3(y,2,3,co)
##                                             +f1(x,y)*on3(y,2,3,co))
##       +on3(x,minf,1,oo)*(f2(x,y)*on3(y,3,5,cc)+f2(x,y)*on3(y,2,3,co))
##       +on3(x,8,inf,co)*(f2(x,y)*on3(y,3,5,cc)+f2(x,y)*on3(y,2,3,co)) 
##     ● ev(fy,y = 2) = f2(x,2)+on3(x,1,8,co)*f1(x,2) 
## --end of on3decomp_one('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-10.mxl"

12. 関数 on3decomp21() : 変数毎の排他的区間分解(未定端点:仮定の設定,on3有理式まで対応)

on3decomp21()$
on3decomp21('ex)$
## ~/bin/go TMP/tmp_lang/chunk-12.mxl  > TMP/tmp_lang/chunk-12.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-12.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-12.mxl
## on3decomp21()
##    --begin of on3decomp21('help)--
##    機能: 指定変数varに関するon3(var,,,,)関数式の排他的区分分解を変数var毎に試みる
##          on3有理式,未定端点に対応する, 特異点(分母が零になる点), 特異区間に対応
##          比較 : on3decomp()は未定端点無しの場合に多変数領域の排他的領域分解を与える
##    文法: on3decomp21(on3func,var,...)
##    例示: 
##       on3decomp21(1/(x-3),x) -> 1/(x-3)*on3(x,minf,3,oo) + 1/(x-3)*on3(x,3,inf,oo) (特異点) 
##       ex : f0 + f1*on3(x,a,b,co), 
##       on3decomp21(ex,x),
##        -> f0*on3(x,minf,a,oo) + (f0+f1)*on3(x,a,b,co) + f0*on3(x,b,inf,co)
##       on3decomp21(1/(f0 + f1*on3(x,1,3,co)), x),
##        -> 1/f0*on3(x,minf,1,oo) + 1/(f0+f1)*on3(x,1,3,co) + 1/f0*on3(x,3,inf,co)
##       on3decomp21(1/(f0 + f1*on3(x,a,b,co)), x),
##        -> 1/f0*on3(x,minf,a,oo) + 1/(f0+f1)*on3(x,a,b,co) + 1/f0*on3(x,b,inf,co)
##    --end of on3decomp21('help')--
##    
## on3decomp21('ex)
## --begin of on3decomp21('ex)-- 
## ★  (/* 例1, on3多項式(未定端点を含む) 明示仮定 */  
##      ex : f0 + f1*on3(x,a,b,co),  
##      out : on3decomp21(ex,x,[a<b],debug0)) 
## ◎   out = f0*on3(x,b,inf,co)+(f1+f0)*on3(x,a,b,co)+f0*on3(x,minf,a,oo) 
## ★  
##     (/* 例2 on3多項式(係数部にxの関数), 未定端点, 明示仮定 ---a---c---b---d---  */ 
##      
##     ex3 : f0(x) + f1(x)*on3(x,a,b,co) + f2(x)*on3(x,c,d,co), 
##     out : on3decomp21(1/ex3,x,[a<c,c<b,b<d],debug0)) 
## ◎   out = 
##      on3(x,d,inf,co)/f0(x)+on3(x,c,b,co)/(f2(x)+f1(x)+f0(x))+on3(x,b,d,co)/(f2(x)+f0(x))
##                           +on3(x,a,c,co)/(f1(x)+f0(x))+on3(x,minf,a,oo)/f0(x) 
## ★  
##     (/* 例3 on3多項式,未定端点を含む, 明示仮定 ---1---a---2---b---3---4--- */ 
##      
##     ex : f1*on3(x,1,3,co) + f2*on3(x,2,4,co) + f3*on3(x,a,b,co),  
##     out : on3decomp21(ex,x,[1<a, a<2, 2<b, b<3],debug0)) 
## ◎   out = 
##      (f2+f1)*on3(x,b,3,co)+(f3+f1)*on3(x,a,2,co)+f2*on3(x,3,4,co)
##                           +(f3+f2+f1)*on3(x,2,b,co)+f1*on3(x,1,a,co) 
## ★  
##     (/* 例4-1. on3有理式:分母が0となる区間が存在しない場合, 未定端点なし */ 
##      
##      ex : f0*on3(x,2,6,co)/(f1*on3(x,1,5,co) + f2*on3(x,3,7,co)),  
##      out : on3decomp21(ex,x,debug0)) 
## ◎   out = (f0*on3(x,5,6,co))/f2+(f0*on3(x,3,5,co))/(f2+f1)+(f0*on3(x,2,3,co))/f1 
##     注:特異区間を明示した解 ansd -> 
##    None*on3(x,7,8,oo)+(f0*on3(x,5,7,co))/f2+(f0*on3(x,3,5,co))/(f2+f1)
##                      +(f0*on3(x,1,3,co))/f1+None*on3(x,0,1,oo) 
##     
##     --> ev(ansd,None=0) で特異区間項(None*で始まる項)を除いた表現を得る
##     
## ★  
##     (/* 例4-2. on3有理式:分母が0となる区間が存在する場合の対応, 未定端点なし */ 
##      
##      ex : f0*on3(x,0,8,co)/(f1*on3(x,1,5,co) + f2*on3(x,3,7,co)),  
##      out : on3decomp21(ex,x,debug0)) 
## ◎   out = (f0*on3(x,5,7,co))/f2+(f0*on3(x,3,5,co))/(f2+f1)+(f0*on3(x,1,3,co))/f1 
## ★  (/* 例5-1 on3有理式:分母が0となる区間が存在しない場合 */  
##     /* 未定端点を含む, 明示仮定 ---a---1---c---b---5---d---  */  
##     ex : (f2*on3(x,1,5,co)+f3*on3(x,c,d,co))/(f0 + f1*on3(x,a,b,co)),  
##     out : on3decomp21(ex,x,[a<1,1<c,c<b,b<5,5<d],debug0)) 
## ◎   out = 
##      ((f3+f2)*on3(x,c,b,co))/(f1+f0)+((f3+f2)*on3(x,b,5,co))/f0+(f3*on3(x,5,d,co))/f0
##                                     +(f2*on3(x,1,c,co))/(f1+f0) 
## ★  (/* 例5-2 on3有理式:分母が0となる区間が存在する場合の対応, */ 
##      
##     /*         未定端点を含む, 明示仮定 ---a---c---b---d---  */  
##     ex : f0/(f1*on3(x,a,b,co) + f2*on3(x,c,d,co)),  
##     out : on3decomp21(ex,x,[a<c,c<b,b<d],debug0)) 
## ◎   out = (f0*on3(x,c,b,co))/(f2+f1)+(f0*on3(x,b,d,co))/f2+(f0*on3(x,a,c,co))/f1 
##     特異区間項(None*で始まる項)を含めた結果 ansd -> 
##    None*on3(x,d,inf,oo)+(f0*on3(x,c,b,co))/(f2+f1)+(f0*on3(x,b,d,co))/f2
##                        +(f0*on3(x,a,c,co))/f1+None*on3(x,minf,a,oo) 
##     
##     --> ev(ansd,None=0) で特異区間項(None*で始まる項)を除いた表現を得る
##     
## ★  (/* 例5-3 on3有理式:分母が0となる区間が存在する場合の対応, */ 
##      
##     
##    /*       未定端点を含む, 特異点[e,c], 明示仮定 ---a--(e)--(c)---b---d---  */ 
##     
##     f0 : 1/((x-e)*(x-c)),  
##     ex : f0/(on3(x,a,b,co) + on3(x,c,d,co)),  
##     out : on3decomp21(ex,x,[a<e,e<c,c<b,b<d],debug0)) 
## ◎   out = 
##      on3(x,e,c,oo)/((x-c)*(x-e))+on3(x,c,b,oo)/(2*(x-c)*(x-e))
##                                 +on3(x,b,d,co)/((x-c)*(x-e))+on3(x,a,e,co)/((x-c)*(x-e)) 
## ★  (/* 例6-1. 2変量関数を変数 y で分解 */  
##     f20 : f1(x,y)*on3(x,1,8,co)*on3(y,minf,3,oo) + f2(x,y)*on3(y,2,5,cc),  
##     fy : on3decomp21(f20,y,debug0)) 
## ◎   out = 
##      on3(x,1,8,co)*f1(x,y)*on3(y,minf,2,oo)+f2(x,y)*on3(y,3,5,cc)
##                                            +(f2(x,y)+on3(x,1,8,co)*f1(x,y))*on3(y,2,3,co)
##       
## ★  (/* 例6-2. 2変量関数を変数 x で分解 */  
##      fy : ratexpand(fy), fyx : on3decomp21(fy,x,debug0), c0show(ev(fy,y = 2)), fyx) 
##     ev(fy,y = 2) = f2(x,2)+on3(x,1,8,co)*f1(x,2) 
## ◎   out = 
##      on3(x,1,8,co)*(f1(x,y)*(on3(y,minf,2,oo)+on3(y,2,3,co))
##                    +f2(x,y)*(on3(y,3,5,cc)+on3(y,2,3,co)))
##       +on3(x,minf,1,oo)*f2(x,y)*(on3(y,3,5,cc)+on3(y,2,3,co))
##       +on3(x,8,inf,co)*f2(x,y)*(on3(y,3,5,cc)+on3(y,2,3,co)) 
## ★  (/* 例7-1 on3多項式 + on3有理式 の排他的分解-1(共通分母), */  
##     ex :  on3(x,1,5,co) + on3(x,1,5,co)/(on3(x,1,3,co)+on3(x,2,4,co)),  
##     out : on3decomp21(ex,x,debug0)) 
## ◎   out = 2*on3(x,3,4,co)+(3*on3(x,2,3,co))/2+2*on3(x,1,2,co) 
## ★  
##     (/* 例7-2 on3多項式 + on3有理式 の排他的分解-2(有理式部分の分解), */ 
##      
##     ex :  on3decomp21(on3(x,1,5,co)/(on3(x,1,3,co)+on3(x,2,4,co)),x) ,  
##     cashow(ex),  
##     out : on3decomp21(on3(x,1,5,co) + ex, x,debug0)) 
##     ex -> on3(x,3,4,co)+on3(x,2,3,co)/2+on3(x,1,2,co) 
## ◎   out = on3(x,4,5,co)+2*on3(x,3,4,co)+(3*on3(x,2,3,co))/2+2*on3(x,1,2,co) 
## --end of on3decomp21('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-12.mxl"

12a. 関数 on3decompm() : 未定端点:仮定の設定,多変数on3多項式(3変数まで)の排他的区間分解

on3decomp21() を内部使用する。

on3decompm()$
on3decompm('ex)$
## ~/bin/go TMP/tmp_lang/chunk-13.mxl  > TMP/tmp_lang/chunk-13.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-13.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-13.mxl
## on3decompm()
##    --begin of on3decompm('help)--
##    機能: 区間関数 on3(x,...) の多項式を排他的区間に分解する処理を変数リスト'varsL=[x,y,z] の順序で行なう。
##    制限:3変数までのon3多項式。適切な仮定の設定があれば,区間の端点は未定定数を許す。以下の手順に従う。
##      第1分解 expr : sum_{i=1}^iend v1_Lon3f[i]*v1_Lon3coef[i]           = v1_outf
##      第2分解 v1_Lon3coef[i] : sum_{j=1}^jend v2_Lon3f[j]*v2_Lon3coef[j] = v2_outf
##      第3分解 v2_Lon3coef[j] : sum_{k=1}^kend v3_Lon3f[k]*v3_Lon3coef[k] = v3_outf   
##    文法: on3decompm(expr, ’varsL=[x,y], 'assume=[...]) 
##    例示:
##      ex11 : f1(x)*on3(x,1,5,co) + f2(x)*on3(x,3,7,co),
##      on3decompm(ex11,'vars=[x]);
##       ---> f1(x)*on3(x,1,3,co) + (f1(x)+f2(x))*on3(x,3,5,co) + f2(x)*on3(x,5,7,co)
##      ex12 : f1(x)*on3(x,1,5,co) + f2(x)*on3(x,a,b,co), /* 1--a--5--b */
##      assw1 : [1<a,a<5,5<b], /* 仮定の設定 */
##      on3decompm(ex12,'vars=[x], 'assume=assw1);
##       ---> f1(x)*on3(x,1,a,co) + (f1(x)+f2(x))*on3(x,a,5,co) + f2(x)*on3(x,5,b,co),     
##      ex22 : f2(x,y)*on3(x,3,7,co)*on3(y,b,d,co)
##              + f1(x,y)*on3(x,1,5,co)*on3(y,2,6,co), /* --2--b--6--d-- */
##      assw2 : [2<b, b<6, 6<d], /* 仮定の設定 */
##      on3decompm(ex22,'vars=[x,y], 'assume=assw2),
##       ---> on3(x,3,5,co)*((f1(x,y)+f2(x,y))*on3(y,b,6,co)+f2(x,y)*on3(y,6,d,co)
##                                                  +f1(x,y)*on3(y,2,b,co))
##             +on3(x,5,7,co)*f2(x,y)*on3(y,b,d,co)
##             +on3(x,1,3,co)*f1(x,y)*on3(y,2,6,co), 
##    --end of on3decompm('help')--
##    
## on3decompm('ex)
## --begin of on3decompm('ex)-- 
## ★  ( /* 例.1 on3decompm() の結果 */  
##      c0show(expr, varsL, assw),  
##      out : on3decompm(expr,'vars=varsL, 'assume=assw, debug)  
##      ) 
##     expr = f2(x)*on3(x,3,7,co)+f1(x)*on3(x,1,5,co)  varsL = [x]  assw = [] 
## ◎   out = f2(x)*on3(x,5,7,co)+(f2(x)+f1(x))*on3(x,3,5,co)+f1(x)*on3(x,1,3,co) 
## ★  ( /* 例.2 on3decompm() の結果 */  
##      c0show(expr, varsL, assw),  
##      out : on3decompm(expr,'vars=varsL, 'assume=assw, debug)  
##      ) 
##     expr = f2(x)*on3(x,a,b,co)+f1(x)*on3(x,1,5,co)  varsL = [x]  assw = 
##    [1 < a,a < 5,5 < b] 
## ◎   out = (f2(x)+f1(x))*on3(x,a,5,co)+f2(x)*on3(x,5,b,co)+f1(x)*on3(x,1,a,co) 
## ★  ( /* 例.3 on3decompm() の結果 */  
##      c0show(expr, varsL, assw),  
##      out : on3decompm(expr,'vars=varsL, 'assume=assw, debug)  
##      ) 
##     expr = on3(x,3,7,co)*f2(x,y)*on3(y,4,8,co)+on3(x,1,5,co)*f1(x,y)*on3(y,2,6,co)  varsL
##     = [x,y]  assw = [] 
## ◎   out = 
##      on3(x,3,5,co)*(f2(x,y)*on3(y,6,8,co)+(f2(x,y)+f1(x,y))*on3(y,4,6,co)
##                                          +f1(x,y)*on3(y,2,4,co))
##       +on3(x,5,7,co)*f2(x,y)*on3(y,4,8,co)+on3(x,1,3,co)*f1(x,y)*on3(y,2,6,co) 
## ★  ( /* 例.4 on3decompm() の結果 */  
##      c0show(expr, varsL, assw),  
##      out : on3decompm(expr,'vars=varsL, 'assume=assw, debug)  
##      ) 
##     expr = on3(x,3,7,co)*f2(x,y)*on3(y,b,d,co)+on3(x,1,5,co)*f1(x,y)*on3(y,2,6,co)  varsL
##     = [x,y]  assw = [2 < b,b < 6,6 < d] 
## ◎   out = 
##      on3(x,5,7,co)*f2(x,y)*on3(y,b,d,co)+on3(x,3,5,co)
##                                          *((f2(x,y)+f1(x,y))*on3(y,b,6,co)
##                                           +f2(x,y)*on3(y,6,d,co)+f1(x,y)*on3(y,2,b,co))
##                                         +on3(x,1,3,co)*f1(x,y)*on3(y,2,6,co) 
## ★  ( /* 例.5 on3decompm() の結果 */  
##      c0show(expr, varsL, assw),  
##      out : on3decompm(expr,'vars=varsL, 'assume=assw, debug)  
##      ) 
##     expr = 
##    f1*on3(x,1,5,co)*on3(y,2,6,co)*on3(z,5,10,co)
##     +f2*on3(x,3,7,co)*on3(y,4,8,co)*on3(z,0,10,co)  varsL = [x,y,z]  assw = [] 
## ◎   out = 
##      on3(x,3,5,co)*(on3(y,4,6,co)*((f2+f1)*on3(z,5,10,co)+f2*on3(z,0,5,co))
##                    +f1*on3(y,2,4,co)*on3(z,5,10,co)+f2*on3(y,6,8,co)*on3(z,0,10,co))
##       +f1*on3(x,1,3,co)*on3(y,2,6,co)*on3(z,5,10,co)
##       +f2*on3(x,5,7,co)*on3(y,4,8,co)*on3(z,0,10,co) 
## --end of on3decompm('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-13.mxl"

13. 関数 on3info() : expr に含まれる変数varの関数on3(var…)の情報をリストで返す

on3info()$
on3info('ex)$
## ~/bin/go TMP/tmp_lang/chunk-14.mxl  > TMP/tmp_lang/chunk-14.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-14.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-14.mxl
## on3info()
##    --begin of on3info('help)--
##    機能: expr に含まれる変数varの関数on3(var...)の情報をリストで返す
##         結果のリストはoutLev()で取り出せる.
##         on3多項式を前提とするため,定数項が存在する合も考慮されている(変数毎のon3stdの機能を有する)
##         引数に'std がある場合は指定された変数に関する標準化の結果を返す
##         expr が on3有理式の場合は on3decomp21(expr,x,[仮定1,...]) によりon3多項式化を得る.
##    文法: on3info(expr,x,...) or on3info(expr)
##         on3info(expr,x,'factor), on3info(expr,x,'std)
##    例示: on3info(f1*log(x)*on3(x,1,2,co)+f0, x,'std)
##         -> f0*on3(x,minf,1,oo) + (f0+f1)*on3(x,1,2,co) + f0*on3(x,2,inf,co) (標準化)
##    --end of on3info('help')--
##    
## on3info('ex)
## --begin of on3info('ex)-- 
## ---begin of on3info_ex--- 
##     ◆ 例0 ex0 = f1*log(x)*on3(x,1,2,co)+f0   <- on3std未処理の場合 
##     on3info(ex0,x) = 
##    [expr = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co),var = x,
##     Lon3 = [[on3,x,1,2,co],[on3,x,minf,inf,oo]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,1,2,co),on3(x,minf,inf,oo)],Lon3coef = [f1*log(x),f0],
##     Lon3lr0 = [minf,1,2,inf],Lon3lr = [1,2],undefpnts = [],
##     outf = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)] 
##     ◆  on3info(ex0,x,'std) = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)  
##     <- 'std 指定の場合 
##     ◆ 例1 ex1 = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)  
##     <- on3std処理済みの場合 
##     on3info(ex1,x) = 
##    [expr = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co),var = x,
##     Lon3 = [[on3,x,1,2,co],[on3,x,minf,inf,oo]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,1,2,co),on3(x,minf,inf,oo)],Lon3coef = [f1*log(x),f0],
##     Lon3lr0 = [minf,1,2,inf],Lon3lr = [1,2],undefpnts = [],
##     outf = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)] 
##     ◆ 例1-2 ex1 = f0*on3(x,minf,inf,oo)+f1*log(x)*on3(x,1,2,co)  
##     <- 結果リストの一括取り込みと一括削除の例 
## ★  (outLev(on3info(ex1,x),"test_"), /* 結果リストをtest_*で取り込む */  
##     c0show(test_Lon3f), c0show(test_Lon3coef), /* 取り込みリストの表示 */  
##     killvars(["test_"]) /* 取り込みリストの一括削除 */ , values) 
##     test_Lon3f = [on3(x,1,2,co),on3(x,minf,inf,oo)] 
##     test_Lon3coef = [f1*log(x),f0] 
##     out =  
##           [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##            tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,std,expr,
##            var,wL,ic,Lon3,Lon3lr0,Lon3lr,on3v,on3f,on3coef,Lon3v,Lon3f,Lon3coef,
##            undefpnts,outL,outf,ex0,ex1,ex2,ex22,ex3,ex4,ex,cmds,L,out,chk,ans,hlp,hlpL,
##            cmdsansL,cmdsL,w_out,chkm,k] 
##     ◆ 例2-1 ex2 = (f*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co))  
##     <- 有理式の分母に適用した場合 
##     ratdenom(ex2) = on3(x,a,b,co)*f1+f2*on3(x,c,d,co) 
##     on3info(ratdenom(ex2),x) = 
##    [expr = f2*on3(x,c,d,co)+f1*on3(x,a,b,co),var = x,
##     Lon3 = [[on3,x,a,b,co],[on3,x,c,d,co]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,a,b,co),on3(x,c,d,co)],Lon3coef = [f1,f2],Lon3lr0 = [a,b,c,d],
##     Lon3lr = [a,b,c,d],undefpnts = [false,false,false,false],
##     outf = f2*on3(x,c,d,co)+f1*on3(x,a,b,co)] 
##     ◆ 例2-2 ex22 = 
##    (f4*on3(x,2,4,co)+f3*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co))  
##     <- 有理式に適用した場合 
##     ex22 = (f4*on3(x,2,4,co)+f3*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co)) 
##     on3info(ex22,x,'std) = 
##    (f4*on3(x,2,4,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co))
##     +(f3*on3(x,1,3,co))/(f2*on3(x,c,d,co)+f1*on3(x,a,b,co)) 
##     
##    ■ on3decomp21(ex22,x,[1<a,a<2,2<c,c<3,3<b,b<4,4<d]) を実行しon3多項式(排他的分解済)を得る
##     
##     on3decomp21(ex22,x,[1 < a,a < 2,2 < c,c < 3,3 < b,b < 4,4 < d]) = 
##    ((f4+f3)*on3(x,c,3,co))/(f2+f1)+(f4*on3(x,b,4,co))/f2+(f3*on3(x,a,2,co))/f1
##                                   +(f4*on3(x,3,b,co))/(f2+f1)+((f4+f3)*on3(x,2,c,co))/f1 
##     ◆ 例3 ex3 = ex3   第1引数が単変数でない場合 
##     ex3 = f2*on3(t-u,u,inf,co)+f1*on3(t-u,1,3,co) 
##     on3info(ex3,t) = 
##    [expr = f2*on3(t-u,u,inf,co)+f1*on3(t-u,1,3,co),var = t,
##     Lon3 = [[on3,t-u,1,3,co],[on3,t-u,u,inf,co]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(t-u,1,3,co),on3(t-u,u,inf,co)],Lon3coef = [f1,f2],Lon3lr0 = [1,3,inf,u],
##     Lon3lr = [1,3,u],undefpnts = [false],outf = f2*on3(t-u,u,inf,co)+f1*on3(t-u,1,3,co)] 
##     ◆ 例4 ex4 = on3(x,1,8,co)*f1(x,y)*on3(y,minf,3,oo)+f2(x,y)*on3(y,2,5,cc)  
##     2変数関数の場合 
##     on3info(ex4,y) = 
##    [expr = on3(x,1,8,co)*f1(x,y)*on3(y,minf,3,oo)+f2(x,y)*on3(y,2,5,cc),var = y,
##     Lon3 = [[on3,y,2,5,cc],[on3,y,minf,3,oo]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(y,2,5,cc),on3(y,minf,3,oo)],Lon3coef = [f2(x,y),on3(x,1,8,co)*f1(x,y)],
##     Lon3lr0 = [minf,2,3,5],Lon3lr = [2,3,5],undefpnts = [],
##     outf = on3(x,1,8,co)*f1(x,y)*on3(y,minf,3,oo)+f2(x,y)*on3(y,2,5,cc)] 
## --end of on3info('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-14.mxl"

14. 関数 outLev() : on3info()の結果(リスト)の取り込み

outLev()$
outLev('ex)$
## ~/bin/go TMP/tmp_lang/chunk-15.mxl  > TMP/tmp_lang/chunk-15.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-15.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-15.mxl
## outLev()
##    --begin of outLev('help)--
##    機能: 名前付きリストを展開する
##    文法: outLev(outL,"test_")
##    例示: outL : [L1=[l11,l12],L2=[l21]]
##         outLev(outL,"test_") -> test_L1=[l11,l12], test_L2=[l21]
##    --end of outLev('help')--
##    
## outLev('ex)
## --begin of outLev('ex)-- 
## ★  (/* outLev() の実行例 */  
##     ex : on3(x,a,b,co)*on3(y,yl,yr,oo) + x*on3(x,c,d,cc),  
##     outL : on3info(ex,x), /* on3info()の結果(名前付きリスト)を得る */  
##     c0show(outL), /* outL の内容確認 */  
##     outLev(outL,"test_"), /* 変数test_* の形で展開 */  
##     cshow(values) /* 変数一覧で確認する */  
##     ) 
##     outL = 
##    [expr = on3(x,a,b,co)*on3(y,yl,yr,oo)+x*on3(x,c,d,cc),var = x,
##     Lon3 = [[on3,x,a,b,co],[on3,x,c,d,cc]],Lon3v = [on3v_1,on3v_2],
##     Lon3f = [on3(x,a,b,co),on3(x,c,d,cc)],Lon3coef = [on3(y,yl,yr,oo),x],
##     Lon3lr0 = [a,b,c,d],Lon3lr = [a,b,c,d],undefpnts = [false,false,false,false],
##     outf = on3(x,a,b,co)*on3(y,yl,yr,oo)+x*on3(x,c,d,cc)] 
## CS: values = 
##    [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##     tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,L,Ll,Lr,prestr,str,
##     ex,x,outL,cmds,ans,hlp,hlpL,cmdsansL,cmdsL,w_out,chk,chkm,k,test_expr,test_var,
##     test_Lon3,test_Lon3v,test_Lon3f,test_Lon3coef,test_Lon3lr0,test_Lon3lr,
##     test_undefpnts,test_outf] 
##     out =  
##           [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##            tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,L,Ll,Lr,
##            prestr,str,ex,x,outL,cmds,ans,hlp,hlpL,cmdsansL,cmdsL,w_out,chk,chkm,k,
##            test_expr,test_var,test_Lon3,test_Lon3v,test_Lon3f,test_Lon3coef,test_Lon3lr0,
##            test_Lon3lr,test_undefpnts,test_outf] 
## --end of outLev('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-15.mxl"

14. 関数 find_key() : ツール1 キー付き引数の扱い

find_key()$
find_key('ex)$
find_key_no()$
find_key_no('ex)$
## ~/bin/go TMP/tmp_lang/chunk-16.mxl  > TMP/tmp_lang/chunk-16.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-16.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-16.mxl
## find_key()
##    --begin of find_key('help)--
##    機能: キー付きリストからキー名を含む最初の要素を取り出す. キー名がない場合はFALSEを返す.
##    文法: find_key(list,key,...)
##    例示: find_key([key1=a,key2=b,key3=c],key2) -> key2=b
##    --end of find_key('help')--
##    
## find_key('ex)
## --begin of find_key('ex)-- 
## --begin of find_key_ex 
##     dlist = 
##    [terminal = png,file_name = "figs/find_key-1",columns = 2,dimensions = [1000,400]] 
##     find_key(dlist,'columns) = columns = 2 
##     find_key(dlist,'file_name) = file_name = "figs/find_key-1" 
##     find_key(dlist,'not_key_name) = false 
## --end of find_key('ex)-- 
## find_key_no()
##    --begin of find_key_no('help)--
##    機能: キー付きリストからキー名を含む要素の位置を取り出す
##    文法: find_key_no(list,key,...)
##    例示: find_key_no([key1=a,key2=b,key3=c],key2); -> 2
##         find_key_no([key1=a,key2=b,key3=c],key4); -> 0
##    --end of find_key_no('help')--
##    
## find_key_no('ex)
## --begin of find_key_no('ex)-- 
## --begin of find_key_no_ex 
##     dlist = 
##    [terminal = png,file_name = "figs/find_key_no-1",columns = 2,dimensions = [1000,400]] 
##     find_key_no(dlist,'columns) = 3 
##     find_key_no(dlist,'file_name) = 2 
## --end of find_key_no('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-16.mxl"

14a. 関数 ass_set(), fact_var(), fact_forget(), killvars() : ツール2 仮定の設定,表示,解除

ass_set()$
ass_set('ex)$
fact_var()$
fact_var('ex)$
fact_forget()$
fact_forget('ex)$
killvars()$
killvars('ex)$
## ~/bin/go TMP/tmp_lang/chunk-17.mxl  > TMP/tmp_lang/chunk-17.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-17.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-17.mxl
## ass_set()
##    --begin of ass_set('help)--
##    機能: 仮定の設定
##    文法: ass_set([a<c,c<b,b<d])
##    例示: ass_set([a<c,c<b,b<d])
##          var_fact([a,b,c,d])     facts()出力から変数リストに関連する事実を表示する
##          fact_var([a<c,c<b,b<d]) 引数で指定された事実(facts)に現れる変数をリストで返す
##          fact_forget([a,b,c,d])  変数リスト/事実リストで指定された事実を消去する
##          on3byon3([[on3,x,1,3,co],[on3,x,2,4,co]],debug1) -> on3(x,2,3,co)
##    --end of ass_set('help')--
##    
## ass_set('ex)
## --begin of ass_set('ex)-- 
## ★  /* 仮定の設定: */  ass_set([a<c,c<b,b<d]) 
## ◎  out = [c > a,b > c,d > b] 
## ★  /* 事実の表示: */  var_fact([a,b,c,d]) 
## ◎  out = [b > c,c > a,d > b] 
## ★  /* 事実の変数: */  fact_var([c > a,b > c,d > b]) 
## ◎  out = [a,b,c,d] 
## ★  /* 仮定の本での on3()関数の積 */ 
##     on3byon3(on3(x,a,b,co)*on3(x,c,d,co)) 
## ◎   out = on3(x,c,b,co) 
## ★  /* 事実の消去: */ fact_forget([a,b,c,d]) 
## ◎  out = [] 
## ★  /*事実消去の確認: */ var_fact([a,b,c,d]) 
## ◎  out = [] 
## ★  /* 無仮定の場合の on3()関数の積 */  
##     on3byon3(on3(x,a,b,co)*on3(x,c,d,co)) 
##     progn = <on3byon3>  wout = unknown   ← 積の結果 
## ◎   out = unknown 
## fact_var()
##    --begin of fact_var('help)--
##    機能: facts()出力から変数リストに関連する事実を表示する
##    文法: fact_var([a,b,c,d])
##    例示: fact_var([a<c,c<b,b<d]) -> [a,b,c,d] 
##          fact_var('facts) -> facts()出力から変数リストに関連する事実を表示する
##    --end of fact_var('help)--
##    
## fact_var('ex)
## --begin of ass_set('ex)-- 
## --begin of ass_set('ex)-- 
## ★  /* 仮定の設定: */  ass_set([a<c,c<b,b<d]) 
## ◎  out = [c > a,b > c,d > b] 
## ★  /* 事実の表示: */  var_fact([a,b,c,d]) 
## ◎  out = [b > c,c > a,d > b] 
## ★  /* 事実の変数: */  fact_var([c > a,b > c,d > b]) 
## ◎  out = [a,b,c,d] 
## ★  /* 仮定の本での on3()関数の積 */ 
##     on3byon3(on3(x,a,b,co)*on3(x,c,d,co)) 
## ◎   out = on3(x,c,b,co) 
## ★  /* 事実の消去: */ fact_forget([a,b,c,d]) 
## ◎  out = [] 
## ★  /*事実消去の確認: */ var_fact([a,b,c,d]) 
## ◎  out = [] 
## ★  /* 無仮定の場合の on3()関数の積 */  
##     on3byon3(on3(x,a,b,co)*on3(x,c,d,co)) 
##     progn = <on3byon3>  wout = unknown   ← 積の結果 
## ◎   out = unknown 
## fact_forget()
##    --begin of fact_forget('help)--
##    機能: 変数リスト/事実リストで指定された事実を消去する
##    文法: fact_forget([a,b,c,d])
##    例示: fact_forget([a,b,c,d]) -> [a,b,c,d] で指定された事実を消去する
##    --end of fact_forget('help)--
##    
## fact_forget('ex)
## --begin of ass_set('ex)-- 
## --begin of ass_set('ex)-- 
## ★  /* 仮定の設定: */  ass_set([a<c,c<b,b<d]) 
## ◎  out = [c > a,b > c,d > b] 
## ★  /* 事実の表示: */  var_fact([a,b,c,d]) 
## ◎  out = [b > c,c > a,d > b] 
## ★  /* 事実の変数: */  fact_var([c > a,b > c,d > b]) 
## ◎  out = [a,b,c,d] 
## ★  /* 仮定の本での on3()関数の積 */ 
##     on3byon3(on3(x,a,b,co)*on3(x,c,d,co)) 
## ◎   out = on3(x,c,b,co) 
## ★  /* 事実の消去: */ fact_forget([a,b,c,d]) 
## ◎  out = [] 
## ★  /*事実消去の確認: */ var_fact([a,b,c,d]) 
## ◎  out = [] 
## ★  /* 無仮定の場合の on3()関数の積 */  
##     on3byon3(on3(x,a,b,co)*on3(x,c,d,co)) 
##     progn = <on3byon3>  wout = unknown   ← 積の結果 
## ◎   out = unknown 
## killvars()
##    --begin of killvars('help)--
##    機能: values; で表示される変数リストからkeysで指定された変数を(一括)削除する
##    文法: killvars(["denom_","numer_","w_","out_"],...)
##    例示: 
##      values;
##      killvars(["denom_","numer_","w_","out_"]);
##      values;
##    --end of killvars('help')--
##    
## killvars('ex)
## --begin of killvars('ex)-- 
##     現在の変数リスト: values = 
##    [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##     tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,keys,key,str,svL] 
##     killvars(["denom_","numer_","w_","out_"]) = 
##    [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##     tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,keys,key,str,svL] 
##     上記処理後の変数リスト: values = 
##    [ass_hist,chkerrsum,icerror,USER,HOME,ENV,cmd,tmpdirsL,tmp_dir,tmp_maxima_dir,
##     tmp_user_dir,tmp_lang_dir,figs_dir,args,max_save_file,progn,debug,keys,key,str,svL] 
## --end of killvars('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-17.mxl"

15. 関数 on3ev() : on3poly の各関数部を{factor,expand,ratsimp}した表現を返す

on3ev()$
on3ev('ex)$
## ~/bin/go TMP/tmp_lang/chunk-18.mxl  > TMP/tmp_lang/chunk-18.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-18.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-18.mxl
## on3ev()
##    --begin of on3ev('help)--
##    機能: on3poly の各関数部を{factor,expand,ratsimp}した表現を返す
##    文法: on3ev(expr,...)
##    例示: ex : x*on3(x,3,4,co)+(x^2-2*x+1)*on3(x,1,2,co)
##         on3ev(ex,factor) = x*on3(x,3,4,co)+(x-1)^2*on3(x,1,2,co)
##         ex1e : %e^(1-x)*on3(x,1,inf,co)+x^2*on3(x,0,1,co) 
##         out : on3integ(ex1e,x) 
##            = (%e^-x*(4*%e^x-3*%e)*on3(x,1,inf,co))/3+(x^3*on3(x,0,1,co))/3 
##         on3ev(out,expand) = (4/3-%e^(1-x))*on3(x,1,inf,co)+(x^3*on3(x,0,1,co))/3 
##    --end of on3ev('help')--
##    
## on3ev('ex)
## --begin of on3ev('ex)-- 
## --- on3ev_ex --- 
## ★  ( /* 例1. on3 多項式の関数部の因数分解 */  
##     ex1 : (x^2-2*x+1)*on3(x,1,2,co) + x*on3(x,3,4,co),  
##     out : on3ev(ex1,factor) ) 
## ◎   out = x*on3(x,3,4,co)+(x-1)^2*on3(x,1,2,co) 
## ★  ( /* 例2. on3 多項式の展開 */  
##     ex2 : %e^(1-x)*on3(x,1,inf,co)+x^2*on3(x,0,1,co),  
##     out0 : on3integ(ex2,x), print("    out0 = ",out0),  
##     out : on3ev(out0,expand)  ) 
##     out0 =  (1-%e^(1-x))*on3(x,1,inf,co)+on3(x,1,inf,co)/3+(x^3*on3(x,0,1,co))/3 
## ◎   out = (4/3-%e^(1-x))*on3(x,1,inf,co)+(x^3*on3(x,0,1,co))/3 
## --end of on3ev('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-18.mxl"

16. 関数 on3diff() : on3関数式の微分

on3diff()$
on3diff('ex)$
## ~/bin/go TMP/tmp_lang/chunk-19.mxl  > TMP/tmp_lang/chunk-19.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-19.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-19.mxl
## on3diff()
##    --begin of on3diff('help)--
##    機能: on3 関数の微分(多変数関数の1変数に関するp階偏微分)を求める
##    文法: on3diff(expr,var,p,...)
##    例示: on3diff(expr,var)  <- p=1 として1階偏微分を返す
##             ★ ◎  on3diff(sin(x),x) = cos(x)  
##             ★ ◎  on3diff(x^2*on3(x,0,1,co) + %e^(1-x)*on3(x,1,inf,co), x, 1) 
##          = 2*x*on3(x,0,1,co)-%e^(1-x)*on3(x,1,inf,oo)  
##    --end of on3diff('help')--
##    
## on3diff('ex)
## --begin of on3diff('ex)-- 
## == on3diff : 微分 == 
## ▼ 微分 
## ★ ◎  on3diff(sin(x),x) = cos(x)  
## ★ ◎  on3diff(x^2*on3(x,0,1,co) + %e^(1-x)*on3(x,1,inf,co), x, 1) 
##      = 2*x*on3(x,0,1,co)-%e^(1-x)*on3(x,1,inf,oo)  
##        [    2 x      (0 <= x < 1)   ]
##        [                            ]
##  out = [     1 - x                  ] 
##        [ - %e       (1 <  x <  inf) ]
##        [                            ]
##        [     0       ( otherwise )  ]
## ★ ◎  
##    on3diff(x^2*on3(x,minf,0,oo)+1/2*(1-x^2)*on3(x,0,1,oo)+(1-x)*on3(x,1,inf,oo), x, 1) 
##      = 2*x*on3(x,minf,0,oo)-on3(x,1,inf,co)-x*on3(x,0,1,oo)  
##        [ - x   (0 <  x <  1)   ]
##        [                       ]
##        [ - 1   (1 <= x < inf)  ]
##  out = [                       ] 
##        [ 2 x  (minf <  x <  0) ]
##        [                       ]
##        [  0    ( otherwise )   ]
## ★ ◎  
##    on3diff(x^2 * on3(x,minf,0,oo) + 1/2*(1-x^2)*on3(x,0,1,oo) + (1-x)*on3(x,1,inf,oo) + sin(x)*on3(x,minf,inf,oo), x, 1)
##     
##      = (cos(x)+2*x)*on3(x,minf,0,oo)+(cos(x)-1)*on3(x,1,inf,co)+(cos(x)-x)*on3(x,0,1,oo) 
##        
##        [  cos(x) - x    (0 <  x <  1)   ]
##        [                                ]
##        [  cos(x) - 1    (1 <= x < inf)  ]
##  out = [                                ] 
##        [ cos(x) + 2 x  (minf <  x <  0) ]
##        [                                ]
##        [      0         ( otherwise )   ]
## --end of on3diff('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-19.mxl"

17. 関数 on3integ() : on3関数式の積分

on3integ()$
on3integ('ex)$
## ~/bin/go TMP/tmp_lang/chunk-20.mxl  > TMP/tmp_lang/chunk-20.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-20.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-20.mxl
## on3integ()
##    --begin of on3integ('help)--
##    機能: on3()関数を含む式の不定積分,定積分を返す.未定端点,on3有理式に対応(on3decomp21()を使用)
##    文法: on3integ(on3func,var,{vl,vr},...)
##          F_i(x) = (F_i(x)-F_i(xl))*on3(x,xl,xr,lr)
##                   +(F_i(xr)-F_i(xl))*on3(x,xr,inf,lr1),
##          where if xl=minf then F_i(xl)=0 (積分定数の定義),
##                lr=cc or oc then lr1=oo, lr=co or oo then lr1=co
##    例示: on3integ(on3func,x)        変数xに関する不定積分
##         on3integ(2*x, x) -> x^2
##         on3integ(2*x + on3(x,1,3,co), x)$
##          -> x^2 + (x-1)*on3(x,1,3,co) + (3-1)*on3(x,3,inf,co)
##         f2 : 2*on3(x,0,%pi/2,cc)*sin(2*x)+cos(x)*on3(x,0,%pi/2,cc)$ 
##         on3integ(f2,x) -> 
##           (-on3(x,0,%pi/2,cc)*cos(2*x))+3*on3(x,%pi/2,inf,oo)
##           +(sin(x)+1)*on3(x,0,%pi/2,cc) 
##         f4 : 2*on3(x,0,%pi/4,cc)*sin(2*x)+cos(x)*on3(x,0,%pi/2,cc) 
##         on3integ(f4,x) -> 
##           (on3(x,0,%pi/4,cc)*(1-cos(2*x))+on3(x,%pi/4,inf,oo)
##           +sin(x)*on3(x,0,%pi/2,cc)+on3(x,%pi/2,inf,oo)
##         on3integ(on3func,x,xl,xr)  変数xに関する区間[xl,xr]の定積分
##           on3integ(f4,x,minf,inf) -> 2 
##           ev(out4,x = inf) -> 2  
##           on3integ(expr(-x)*on3(x,0,inf,co),x,0,inf); -> 1
##    --end of on3integ('help')--
##    
## on3integ('ex)
## --begin of on3integ('ex)-- 
## ★  ( /* 例1. 不定積分 */  
##      ex : on3(x,1,3,co) + on3(x,5,7,oc),  
##      F : on3integ(ex,x)  
##      ) 
## ◎   out = 2*on3(x,7,inf,oo)+(x-5)*on3(x,5,7,oc)+2*on3(x,3,inf,co)+(x-1)*on3(x,1,3,co) 
##     注: 不定積分関数 F の微分: on3diff(F,x) = on3(x,5,7,oo)+on3(x,1,3,oo)  
##     <- 端点の開閉に注意 
## ★  ( /* 例2-1. 不定積分(on3多項式:非排他分解) */  
##      ex : on3(x,1,5,co) + on3(x,3,7,oc),  
##      F : on3integ(ex,x)  
##      ) 
## ◎   out = 4*on3(x,7,inf,oo)+4*on3(x,5,inf,co)+(x-3)*on3(x,3,7,oc)+(x-1)*on3(x,1,5,co) 
##     注: 不定積分関数 F の排他的分解: on3decomp21(F,x) = 
##    8*on3(x,7,inf,oo)+(x+1)*on3(x,5,7,cc)+(2*x-4)*on3(x,3,5,oo)+(x-1)*on3(x,1,3,cc) 
## ★  
##     ( /* 例2-2. 不定積分(on3多項式:非排他分解->排他的分解,不定積分,排他的分解) */ 
##      
##      ex : on3(x,1,5,co) + on3(x,3,7,oc),  
##      ex1 : on3decomp21(ex,x), c0show("on3排他分解:",ex1), 
##      F : on3integ(ex1,x)  
##      ) 
##     on3排他分解: ex1 = on3(x,5,7,cc)+2*on3(x,3,5,oo)+on3(x,1,3,cc) 
## ◎   out = 
##      2*on3(x,7,inf,oo)+4*on3(x,5,inf,co)+(x-5)*on3(x,5,7,cc)+2*on3(x,3,inf,oo)
##                       +(2*x-6)*on3(x,3,5,oo)+(x-1)*on3(x,1,3,cc) 
##     注: 不定積分関数 F の排他的分解: on3decomp21(F,x) = 
##    8*on3(x,7,inf,oo)+(x+1)*on3(x,5,7,cc)+(2*(x-3)+2)*on3(x,3,5,oo)+(x-1)*on3(x,1,3,cc) 
##     注: 不定積分関数 F の微分: on3diff(F,x) = 
##    on3(x,5,7,oo)+2*on3(x,3,5,oo)+on3(x,1,3,oo) 
## ★  ( /* 例3. 不定積分 */  
##      ex : %e^(1-x)*on3(x,1,inf,co)+x^2*on3(x,0,1,co),  
##      F : on3integ(ex,x)  
##      ) 
## ◎   out = (1-%e^(1-x))*on3(x,1,inf,co)+on3(x,1,inf,co)/3+(x^3*on3(x,0,1,co))/3 
##      [      3                      ]
##      [     x                       ]
##      [     --        (0 <= x < 1)  ]
##      [     3                       ]
##  F = [                             ] 
##      [ 4     1 - x                 ]
##      [ - - %e       (1 <= x < inf) ]
##      [ 3                           ]
##      [                             ]
##      [      0       ( otherwise )  ]
## ★  ( /* 例4. 不定積分 */  
##      ex : %e^x*on3(x,minf,0,oo)+%e^(-x)*on3(x,0,inf,co),  
##      F : on3integ(ex,x), F : on3decomp21(F,x)   
##      ) 
## ◎   out = %e^x*on3(x,minf,0,oo)+%e^-x*(2*%e^x-1)*on3(x,0,inf,co) 
##      [   - x      x                        ]
##      [ %e    (2 %e  - 1)   (0 <= x < inf)  ]
##      [                                     ]
##  F = [          x                          ] 
##      [        %e          (minf <  x <  0) ]
##      [                                     ]
##      [         0           ( otherwise )   ]
## ★  ( /* 例5. 不定積分 */  
##      ex : 3*x^2*on3(x,3,4,co)*on3(y,6,8,co)+2*x*on3(x,1,4,co)*y*on3(y,2,4,co),  
##      F : on3integ(ex,x), F : on3decomp21(F,x)  
##      ) 
## ◎   out = 
##      on3(x,3,4,co)*((x-3)*(x^2+3*x+9)*on3(y,6,8,co)+(x-1)*(x+1)*y*on3(y,2,4,co))
##       +on3(x,4,inf,co)*(37*on3(y,6,8,co)+15*y*on3(y,2,4,co))
##       +(x-1)*(x+1)*on3(x,1,3,co)*y*on3(y,2,4,co) 
## ★  ( /* 例6. 不定積分 */  
##      ex : f1*on3(x,a,b,co)+f2*on3(x,c,d,co),  
##      F : on3integ(ex,x)  
##      ) 
## ◎   out = 
##      (d*f2-c*f2)*on3(x,d,inf,co)+(f2*x-c*f2)*on3(x,c,d,co)+(b*f1-a*f1)*on3(x,b,inf,co)
##                                 +(f1*x-a*f1)*on3(x,a,b,co) 
## ★  ( /* 例7. 不定積分 */  
##      ex : f1*on3(x,a,b,co)+f2*on3(x,c,d,co),  
##      F : on3integ(ex,x)  
##      ) 
## ◎   out = 
##      (d*f2-c*f2)*on3(x,d,inf,co)+(f2*x-c*f2)*on3(x,c,d,co)+(b*f1-a*f1)*on3(x,b,inf,co)
##                                 +(f1*x-a*f1)*on3(x,a,b,co) 
## ★  ( /* 例8. 不定積分 */  
##      ex : f0+1/(f1*on3(x,a,b,co)+f2*on3(x,c,d,co)),  
##      ex : on3decomp21(ex,x,[a<c,c<b,b<d],debug0), c0show(ex),  
##      F : on3integ(ex,x)  
##      ) 
##     ex = 
##    ((f0*f2+f0*f1+1)*on3(x,c,b,co))/(f2+f1)+((f0*f2+1)*on3(x,b,d,co))/f2
##                                           +((f0*f1+1)*on3(x,a,c,co))/f1 
## ◎   out = 
##      ((d*(f0*f2+1))/f2-(b*(f0*f2+1))/f2)*on3(x,d,inf,co)
##       +(((f0*f2+f0*f1+1)*x)/(f2+f1)-(c*(f0*f2+f0*f1+1))/(f2+f1))*on3(x,c,b,co)
##       +((c*(f0*f1+1))/f1-(a*(f0*f1+1))/f1)*on3(x,c,inf,co)
##       +(((f0*f2+1)*x)/f2-(b*(f0*f2+1))/f2)*on3(x,b,d,co)
##       +((b*(f0*f2+f0*f1+1))/(f2+f1)-(c*(f0*f2+f0*f1+1))/(f2+f1))*on3(x,b,inf,co)
##       +(((f0*f1+1)*x)/f1-(a*(f0*f1+1))/f1)*on3(x,a,c,co) 
## ★  ( /* 例9. 不定積分関数 (y に関して) */  
##      ex : f2*on3(x,0,1,co)*on3(y,x,2,co)+f1*on3(x,0,1,co)*on3(y,x,1,co),  
##      F : on3integ(ex,y), F : ev(F, ratexpand, ratsimp)  
##      ) 
## ◎   out = 
##      on3(x,0,1,co)*(y*(f2*on3(y,x,2,co)+f1*on3(y,x,1,co))
##                    +2*f2*on3(y,2,inf,co)+f1*on3(y,1,inf,co))
##       +x*on3(x,0,1,co)
##         *(f2*((-on3(y,x,2,co))-on3(y,2,inf,co))+f1*((-on3(y,x,1,co))-on3(y,1,inf,co))) 
## ★  ( /* 例10. 不定積分関数 (y に関して) */  
##      ex : f1*on3(x,1,2,co)*on3(y,y1(x),y2(x),co),  
##      F : on3integ(ex,y)  
##      ) 
## ◎   out = 
##      (f1*y2(x)*on3(x,1,2,co)-f1*y1(x)*on3(x,1,2,co))*on3(y,y2(x),inf,co)
##       +(f1*on3(x,1,2,co)*y-f1*y1(x)*on3(x,1,2,co))*on3(y,y1(x),y2(x),co) 
## ★  ( /* 例11. 2重定積分 */  
##      ex : (y+x+5)*(on3(x,2,3,co)*on3(y,-sqrt(9-x^2),sqrt(9-x^2),cc)  
##      +on3(x,-3,-2,co)*on3(y,-sqrt(9-x^2),sqrt(9-x^2),cc)  
##      +on3(x,-2,2,co)*on3(y,-sqrt(9-x^2),-sqrt(4-x^2),cc)  
##      +on3(x,-2,2,co)*on3(y,sqrt(4-x^2),sqrt(9-x^2),cc)),  
##      Fx : on3integ(ex,y,minf,inf), print("   Fx = ",Fx),  
##      F  : on3integ(Fx,x,minf,inf) ) 
##    Fx =  
##         2*(x+5)*sqrt(9-x^2)*on3(x,2,3,co)+2*(x+5)*sqrt(9-x^2)*on3(x,-2,2,co)
##                                          -2*(x+5)*sqrt(4-x^2)*on3(x,-2,2,co)
##                                          +2*(x+5)*sqrt(9-x^2)*on3(x,-3,-2,co) 
## ◎   out = 25*%pi 
## --end of on3integ('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-20.mxl"

18. 関数 on3integ19() : on3関数式の積分

on3integ19()$
on3integ19('ex)$
## ~/bin/go TMP/tmp_lang/chunk-21.mxl  > TMP/tmp_lang/chunk-21.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-21.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-21.mxl
## on3integ19()
##    --begin of on3integ19('help)--
##    機能: on3()関数を含む式の不定積分,定積分を返す.(on3decomp()を必要としない)
##    文法: on3integ19(on3func,var,{vl,vr},...)
##          F_i(x) = (F_i(x)-F_i(xl))*on3(x,xl,xr,lr)
##                   +(F_i(xr)-F_i(xl))*on3(x,xr,inf,lr1),
##          where if xl=minf then F_i(xl)=0 (積分定数の定義),
##                lr=cc or oc then lr1=oo, lr=co or oo then lr1=co
##    例示: on3integ19(on3func,x)        変数xに関する不定積分
##         on3integ19(2*x, x) -> x^2
##         on3integ19(2*x + on3(x,1,3,co), x)$
##          -> x^2 + (x-1)*on3(x,1,3,co) + (3-1)*on3(x,3,inf,co)
##         f2 : 2*on3(x,0,%pi/2,cc)*sin(2*x)+cos(x)*on3(x,0,%pi/2,cc)$ 
##         on3integ19(f2,x) -> 
##           (-on3(x,0,%pi/2,cc)*cos(2*x))+3*on3(x,%pi/2,inf,oo)
##           +(sin(x)+1)*on3(x,0,%pi/2,cc) 
##         f4 : 2*on3(x,0,%pi/4,cc)*sin(2*x)+cos(x)*on3(x,0,%pi/2,cc) 
##         on3integ19(f4,x) -> 
##           (on3(x,0,%pi/4,cc)*(1-cos(2*x))+on3(x,%pi/4,inf,oo)
##           +sin(x)*on3(x,0,%pi/2,cc)+on3(x,%pi/2,inf,oo)
##         on3integ19(on3func,x,xl,xr)  変数xに関する区間[xl,xr]の定積分
##           on3integ19(f4,x,minf,inf) -> 2 
##           ev(out4,x = inf) -> 2  
##           on3integ19(exp(-x)*on3(x,0,inf,co),x,0,inf); -> 1
##    --end of on3integ19('help')--
##    
## on3integ19('ex)
## --begin of on3integ19('ex)-- 
## ★  ( /* 例1. 不定積分 */  
##     f : f0, cashow(on3typep(f)),  
##     F : on3integ19(f,x)  ) 
##     on3typep(f) -> on3none 
## ◎   out = f0*x 
## ★  ( /* 例2. 不定積分 */  
##     f : f1*on3(x,1,3,co) + f2*on3(x,4,6,co),  
##     F : on3integ19(f,x),  F : on3decomp(F) ) 
## ◎   out = 
##      2*(f2+f1)*on3(x,6,inf,co)+(f2*x-4*f2+2*f1)*on3(x,4,6,co)+2*f1*on3(x,3,4,co)
##                               +f1*(x-1)*on3(x,1,3,co) 
## ★  ( /* 例3. 不定積分 */ 
##     f : 2*sin(2*x)*on3(x,0,%pi/2,cc) + 3*cos(3*x)*on3(x,0,%pi/3,cc), 
##     F : on3integ19(f,x) ) 
## ◎   out = 
##      on3(x,0,%pi/3,cc)*sin(3*x)+on3(x,0,%pi/2,cc)*(1-cos(2*x))+2*on3(x,%pi/2,inf,oo) 
##     on3ev(F,factor) -> 
##    on3(x,0,%pi/3,cc)*sin(3*x)-on3(x,0,%pi/2,cc)*(cos(2*x)-1)+2*on3(x,%pi/2,inf,oo) 
## 例4a: 微分関数の積分 
##     f = %e^(x-1)*on3(x,minf,1,oo)+%e^(1-x)*on3(x,1,inf,co) 
##     df:on3diff(f,x) -> df = %e^(x-1)*on3(x,minf,1,oo)-%e^(1-x)*on3(x,1,inf,oo) 
##     out : on3integ19(df,x) -> out = 
##    %e^((-x)-1)*(%e^(2*x)*on3(x,minf,1,oo)-%e^(x+1)*on3(x,1,inf,oo)+%e^2*on3(x,1,inf,oo)
##                                          +%e^(x+1)*on3(x,1,inf,co)) 
##     out1 : on3ev(out,expand) -> out1 = 
##    %e^(x-1)*on3(x,minf,1,oo)+(%e^(1-x)-1)*on3(x,1,inf,oo)+on3(x,1,inf,co) 
##     is(equal(out1,f)) = unknown 
##     on3ev(chk1,expand) = (-on3(x,1,inf,oo))+on3(x,1,inf,co)-on3(x,1,1,cc) 
## 例4b: 積分関数の微分 
##     f = %e^(x-1)*on3(x,minf,1,oo)+%e^(1-x)*on3(x,1,inf,co) 
##     F : on3integ19(f,x) -> F = 
##    %e^((-x)-1)*(%e^(2*x)*on3(x,minf,1,oo)+(2*%e^(x+1)-%e^2)*on3(x,1,inf,co)) 
##     F : on3ev(F,expand) -> F = %e^(x-1)*on3(x,minf,1,oo)+(2-%e^(1-x))*on3(x,1,inf,co) 
##     dF : on3diff(F,x) -> dF = %e^(x-1)*on3(x,minf,1,oo)+%e^(1-x)*on3(x,1,inf,co) 
##     is(equal(dF,f)) = true 
## ★  
##     ( /* F (直前の結果) の微分 on3diff(F,x) と f の比較(端点を除いて一致する)*/ 
##      
##     dF : on3diff(F,x)  
##      ) 
## ◎   out = %e^(x-1)*on3(x,minf,1,oo)+%e^(1-x)*on3(x,1,inf,co) 
## --end of on3integ19('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-21.mxl"

19. 関数 on3solve() : on3 関数方程式の求解 (多変数対応版)

on3solve()$
on3solve('ex)$
## ~/bin/go TMP/tmp_lang/chunk-22.mxl  > TMP/tmp_lang/chunk-22.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-22.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-22.mxl
## on3solve()
##    --begin of on3solve('help)--
##    機能: on3 関数方程式の求解 (多変数対応版)
##    文法: on3solve(funcs,vars,...)
##    例示: 
##      例1. 不等式の求解   
##       eq1 : x^2 * on3(x,minf,0,oo) + (1-x^2)/2 * on3(x,0,1,co)
##             + (1-x) * on3(x,1,inf,co) - 1/8$ 
##       out : on3solve(eq1, x); 
##       -> [x = -1/2^(3/2),x = sqrt(3)/2] 
##      例2. 連立不等式の求解 
##       eq21 : (x^2+y^2-2)*on3(y,0,inf,co) + (x^2+y^2-9)*on3(y,minf,0,oo)$  
##       eq22 : (x-y)*on3(x,1,inf,co) + (3*x-2*y)*on3(x,0,1,co)  
##               + (2*x-y)*on3(x,minf,0,oo)$  
##       out : on3solve([eq21,eq22],[x,y]);  
##       ->  [[x = -3/sqrt(5),y = -6/sqrt(5)],
##            [x = 2^(3/2)/sqrt(13),y = (3*sqrt(2))/sqrt(13)],
##            [x = 1,y = 1]] 
##    --end of on3solve('help')--
##    
## on3solve('ex)
## --begin of on3solve('ex)-- 
## --begin of on3solve_ex-- 
## ★  ( /* 例1. 不等式の求解 */  
##     
##    eq1 : x^2 * on3(x,minf,0,oo) + (1-x^2)/2 * on3(x,0,1,co) + (1-x) * on3(x,1,inf,co) -1/8, 
##     
##     out : on3solve(eq1, x) ) 
## ◎  out = [x = -1/2^(3/2),x = sqrt(3)/2] 
## ★  ( /* 例2. 連立不等式の求解 */  
##     eq21 : (x^2+y^2-2)*on3(y,0,inf,co) + (x^2+y^2-9)*on3(y,minf,0,oo),  
##     eq22 : (x-y)*on3(x,1,inf,co) + (3*x-2*y)*on3(x,0,1,co)  + (2*x-y)*on3(x,minf,0,oo),  
##     out : on3solve([eq21,eq22],[x,y]) ) 
## ◎  out = 
##     [[x = -3/sqrt(5),y = -6/sqrt(5)],[x = 2^(3/2)/sqrt(13),y = (3*sqrt(2))/sqrt(13)],
##      [x = 1,y = 1]] 
## --end of on3solve('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-22.mxl"

20. 関数 on3D2G() : 矩形領域 D(x,y) 変換 t=x+y, u=y のとき G(t,u) を求める

on3D2G()$
on3D2G('ex)$
on3D2G('test)$
## ~/bin/go TMP/tmp_lang/chunk-23.mxl  > TMP/tmp_lang/chunk-23.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-23.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-23.mxl
## on3D2G()
##    --begin of on3D2G('help)--
##    機能: on3D2G : 矩形領域 D(x,y) 変換 t=x+y, u=y のとき G(t,u) を求める
##    文法: on3D2G(on3(x,xl,xr,xlr)*on3(y,yl,yr,ylr),'typeA|'typeB|'typeE) 
##         or on3D2G([on3,x,xl,xr,xlr],[on3,y,yl,yr,ylr],'typeA|'typeB|'typeE)
##         on3D2G('ex|'test)
##    例示: on3D2G([on3,x,xl,xr,cc],[on3,y,yl,yr,oc],'typeA) 
##      -> on3(t,tl,tr,tlr)*on3(u,ul,ur,ulr) + ...
##    --end of on3D2G('help')--
##    
## on3D2G('ex)
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,co)*on3(y,yl,yr,cc) 
##     xL = [on3,x,xl,xr,co]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = by Case  facts(yr) = [] 
##     G(t,u) = 
##    if xr-xl <= yr-yl
##        then 'on3(t,yr+xl,yl+xr,oc)*on3(u,yl,yr,cc)
##        +'on3(t,yl+xl,yr+xl,cc)*on3(u,yl,t-xl,cc)+'on3(t,yl+xr,yr+xr,oc)*on3(u,t-xr,yr,cc)
##        else 'on3(t,yl+xl,yl+xr,cc)*on3(u,yl,t-xl,cc)
##        +'on3(t,yr+xl,yr+xr,oc)*on3(u,t-xr,yr,cc)
##        +'on3(t,yl+xr,yr+xl,oc)*on3(u,t-xr,t-xl,cc) 
##     on3D2G(ex) = 
##    if xr-xl <= yr-yl
##        then 'on3(t,yr+xl,yl+xr,oc)*on3(u,yl,yr,cc)
##        +'on3(t,yl+xl,yr+xl,cc)*on3(u,yl,t-xl,cc)+'on3(t,yl+xr,yr+xr,oc)*on3(u,t-xr,yr,cc)
##        else 'on3(t,yl+xl,yl+xr,cc)*on3(u,yl,t-xl,cc)
##        +'on3(t,yr+xl,yr+xr,oc)*on3(u,t-xr,yr,cc)
##        +'on3(t,yl+xr,yr+xl,oc)*on3(u,t-xr,t-xl,cc) 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,co)*on3(y,yl,yr,cc) 
##     判定結果: by Case -> type A (xrng > yrng) を仮定する 
##     xL = [on3,x,xl,xr,co]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = A  facts(yr) = [(-yr)+yl+xr-xl > 0] 
##     x_l = c  x_r = o  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yr+xl,yl+xr]  tr = [yr+xl,yl+xr,yr+xr]  tlr = [cc,oo,oo] 
##     ul = [yl,yl,t-xr]  ur = [t-xl,yr,yr]  ulr = [cc,cc,oc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yr+xl,cc),on3(t,yr+xl,yl+xr,oo),on3(t,yl+xr,yr+xr,oo)] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,yl,yr,cc),on3(u,t-xr,yr,oc)] 
##     on3D2G(ex,'typeA) = 
##    on3(t,yr+xl,yl+xr,oo)*on3(u,yl,yr,cc)+on3(t,yl+xl,yr+xl,cc)*on3(u,yl,t-xl,cc)
##                                         +on3(t,yl+xr,yr+xr,oo)*on3(u,t-xr,yr,oc) 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,co)*on3(y,yl,yr,cc) 
##     判定結果: by Case -> type B (xrng < yrng) を仮定する 
##     xL = [on3,x,xl,xr,co]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = B  facts(yr) = [yr-yl-xr+xl > 0] 
##     x_l = c  x_r = o  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yl+xr,yr+xl]  tr = [yl+xr,yr+xl,yr+xr]  tlr = [co,oc,oo] 
##     ul = [yl,t-xr,t-xr]  ur = [t-xl,t-xl,yr]  ulr = [cc,oc,oc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yl+xr,co),on3(t,yl+xr,yr+xl,oc),on3(t,yr+xl,yr+xr,oo)] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,t-xr,t-xl,oc),on3(u,t-xr,yr,oc)] 
##     on3D2G(ex,'typeB) = 
##    on3(t,yl+xl,yl+xr,co)*on3(u,yl,t-xl,cc)+on3(t,yr+xl,yr+xr,oo)*on3(u,t-xr,yr,oc)
##                                           +on3(t,yl+xr,yr+xl,oc)*on3(u,t-xr,t-xl,oc) 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,co)*on3(y,yl,yr,cc) 
##     判定結果: by Case -> type E (xrng = yrng) を仮定する 
##     xL = [on3,x,xl,xr,co]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = E  facts(yr) = [equal((-yr)+yl+xr-xl,0)] 
##     x_l = c  x_r = o  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yr+xl,yl+xr]  tr = [yr+xl,yl+xr,yr+xr]  tlr = [cc,oo,oo] 
##     ul = [yl,yl,t-xr]  ur = [t-xl,yr,yr]  ulr = [cc,cc,oc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yr+xl,cc),0,on3(t,yl+xr,yr+xr,oo)] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,yl,yr,cc),on3(u,t-xr,yr,oc)] 
##     on3D2G(ex,'typeE) = 
##    on3(t,yl+xl,yr+xl,cc)*on3(u,yl,t-xl,cc)+on3(t,yl+xr,yr+xr,oo)*on3(u,t-xr,yr,oc) 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,yl,inf,co) 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,yl,inf,co] 
##     xrng = xr-xl  yrng = inf  type = B  facts(yr) = [] 
##     x_l = c  x_r = c  y_l = c  y_r = o 
##     before join & reduce -> 
##     tl = [yl+xl,yl+xr,inf]  tr = [yl+xr,inf,inf]  tlr = [cc,oo,oo] 
##     ul = [yl,t-xr,t-xr]  ur = [t-xl,t-xl,inf]  ulr = [cc,cc,co] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yl+xr,cc),on3(t,yl+xr,inf,oo),0] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,t-xr,t-xl,cc),on3(u,t-xr,inf,co)] 
##     on3D2G(ex) = 
##    on3(t,yl+xl,yl+xr,cc)*on3(u,yl,t-xl,cc)+on3(t,yl+xr,inf,oo)*on3(u,t-xr,t-xl,cc) 
## on3D2G('test)
## CS: progn = <on3D2G_ex> ,  is go. 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,yl,yr,cc) 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = by Case  facts(yr) = [] 
##     G(t,u) = 
##    if xr-xl <= yr-yl
##        then 'on3(t,yr+xl,yl+xr,oc)*on3(u,yl,yr,cc)
##        +'on3(t,yl+xl,yr+xl,cc)*on3(u,yl,t-xl,cc)+'on3(t,yl+xr,yr+xr,oc)*on3(u,t-xr,yr,cc)
##        else 'on3(t,yl+xl,yl+xr,cc)*on3(u,yl,t-xl,cc)
##        +'on3(t,yr+xl,yr+xr,oc)*on3(u,t-xr,yr,cc)
##        +'on3(t,yl+xr,yr+xl,oc)*on3(u,t-xr,t-xl,cc) 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,yl,yr,cc) 
##     判定結果: by Case -> type A (xrng > yrng) を仮定する 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = A  facts(yr) = [(-yr)+yl+xr-xl > 0] 
##     x_l = c  x_r = c  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yr+xl,yl+xr]  tr = [yr+xl,yl+xr,yr+xr]  tlr = [cc,oc,oc] 
##     ul = [yl,yl,t-xr]  ur = [t-xl,yr,yr]  ulr = [cc,cc,cc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yr+xl,cc),on3(t,yr+xl,yl+xr,oc),on3(t,yl+xr,yr+xr,oc)] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,yl,yr,cc),on3(u,t-xr,yr,cc)] 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,yl,yr,cc) 
##     判定結果: by Case -> type B (xrng < yrng) を仮定する 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = B  facts(yr) = [yr-yl-xr+xl > 0] 
##     x_l = c  x_r = c  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yl+xr,yr+xl]  tr = [yl+xr,yr+xl,yr+xr]  tlr = [cc,oc,oc] 
##     ul = [yl,t-xr,t-xr]  ur = [t-xl,t-xl,yr]  ulr = [cc,cc,cc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yl+xr,cc),on3(t,yl+xr,yr+xl,oc),on3(t,yr+xl,yr+xr,oc)] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,t-xr,t-xl,cc),on3(u,t-xr,yr,cc)] 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,yl,yr,cc) 
##     判定結果: by Case -> type E (xrng = yrng) を仮定する 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,yl,yr,cc] 
##     xrng = xr-xl  yrng = yr-yl  type = E  facts(yr) = [equal((-yr)+yl+xr-xl,0)] 
##     x_l = c  x_r = c  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yr+xl,yl+xr]  tr = [yr+xl,yl+xr,yr+xr]  tlr = [cc,oc,oc] 
##     ul = [yl,yl,t-xr]  ur = [t-xl,yr,yr]  ulr = [cc,cc,cc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yr+xl,cc),0,on3(t,yl+xr,yr+xr,oc)] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,yl,yr,cc),on3(u,t-xr,yr,cc)] 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,yl,inf,co) 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,yl,inf,co] 
##     xrng = xr-xl  yrng = inf  type = B  facts(yr) = [] 
##     x_l = c  x_r = c  y_l = c  y_r = o 
##     before join & reduce -> 
##     tl = [yl+xl,yl+xr,inf]  tr = [yl+xr,inf,inf]  tlr = [cc,oo,oo] 
##     ul = [yl,t-xr,t-xr]  ur = [t-xl,t-xl,inf]  ulr = [cc,cc,co] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yl+xr,cc),on3(t,yl+xr,inf,oo),0] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,t-xr,t-xl,cc),on3(u,t-xr,inf,co)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,minf,yr,oc) 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,minf,yr,oc] 
##     xrng = xr-xl  yrng = inf  type = B  facts(yr) = [] 
##     x_l = c  x_r = c  y_l = o  y_r = c 
##     before join & reduce -> 
##     tl = [minf,minf,yr+xl]  tr = [minf,yr+xl,yr+xr]  tlr = [oo,oc,oc] 
##     ul = [minf,t-xr,t-xr]  ur = [t-xl,t-xl,yr]  ulr = [oc,cc,cc] 
##     after join & reduce -> 
##     tL = [0,on3(t,minf,yr+xl,oc),on3(t,yr+xl,yr+xr,oc)] 
##     uL = [on3(u,minf,t-xl,oc),on3(u,t-xr,t-xl,cc),on3(u,t-xr,yr,cc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,xr,cc)*on3(y,minf,inf,oo) 
##     xL = [on3,x,xl,xr,cc]  yL = [on3,y,minf,inf,oo] 
##     xrng = xr-xl  yrng = inf  type = B  facts(yr) = [] 
##     x_l = c  x_r = c  y_l = o  y_r = o 
##     before join & reduce -> 
##     tl = [minf,minf,inf]  tr = [minf,inf,inf]  tlr = [oo,oo,oo] 
##     ul = [minf,t-xr,t-xr]  ur = [t-xl,t-xl,inf]  ulr = [oc,cc,co] 
##     after join & reduce -> 
##     tL = [0,on3(t,minf,inf,oo),0] 
##     uL = [on3(u,minf,t-xl,oc),on3(u,t-xr,t-xl,cc),on3(u,t-xr,inf,co)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,inf,co)*on3(y,yl,yr,cc) 
##     xL = [on3,x,xl,inf,co]  yL = [on3,y,yl,yr,cc] 
##     xrng = inf  yrng = yr-yl  type = A  facts(yr) = [] 
##     x_l = c  x_r = o  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [yl+xl,yr+xl,inf]  tr = [yr+xl,inf,inf]  tlr = [cc,oo,oo] 
##     ul = [yl,yl,minf]  ur = [t-xl,yr,yr]  ulr = [cc,cc,oc] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,yr+xl,cc),on3(t,yr+xl,inf,oo),0] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,yl,yr,cc),on3(u,minf,yr,oc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,inf,co)*on3(y,yl,inf,co) 
##     xL = [on3,x,xl,inf,co]  yL = [on3,y,yl,inf,co] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = c  x_r = o  y_l = c  y_r = o 
##     before join & reduce -> 
##     tl = [yl+xl,inf,inf]  tr = [inf,inf,inf]  tlr = [co,oo,oo] 
##     ul = [yl,yl,minf]  ur = [t-xl,inf,inf]  ulr = [cc,co,oo] 
##     after join & reduce -> 
##     tL = [on3(t,yl+xl,inf,co),0,0] 
##     uL = [on3(u,yl,t-xl,cc),on3(u,yl,inf,co),on3(u,minf,inf,oo)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,inf,co)*on3(y,minf,yr,oc) 
##     xL = [on3,x,xl,inf,co]  yL = [on3,y,minf,yr,oc] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = c  x_r = o  y_l = o  y_r = c 
##     before join & reduce -> 
##     tl = [minf,yr+xl,minf+inf]  tr = [yr+xl,minf+inf,inf]  tlr = [oc,oo,oo] 
##     ul = [minf,minf,minf]  ur = [t-xl,yr,yr]  ulr = [oc,oc,oc] 
##     after join & reduce -> 
##     tL = [on3(t,minf,yr+xl,oc),on3(t,yr+xl,inf,oo),0] 
##     uL = [on3(u,minf,t-xl,oc),on3(u,minf,yr,oc),on3(u,minf,yr,oc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,xl,inf,co)*on3(y,minf,inf,oo) 
##     xL = [on3,x,xl,inf,co]  yL = [on3,y,minf,inf,oo] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = c  x_r = o  y_l = o  y_r = o 
##     before join & reduce -> 
##     tl = [minf,inf,minf+inf]  tr = [inf,minf+inf,inf]  tlr = [oo,oo,oo] 
##     ul = [minf,minf,minf]  ur = [t-xl,inf,inf]  ulr = [oc,oo,oo] 
##     after join & reduce -> 
##     tL = [on3(t,minf,inf,oo),0,0] 
##     uL = [on3(u,minf,t-xl,oc),on3(u,minf,inf,oo),on3(u,minf,inf,oo)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,xr,oc)*on3(y,yl,yr,cc) 
##     xL = [on3,x,minf,xr,oc]  yL = [on3,y,yl,yr,cc] 
##     xrng = inf  yrng = yr-yl  type = A  facts(yr) = [] 
##     x_l = o  x_r = c  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [minf,minf,yl+xr]  tr = [minf,yl+xr,yr+xr]  tlr = [oo,oc,oc] 
##     ul = [yl,yl,t-xr]  ur = [inf,yr,yr]  ulr = [co,cc,cc] 
##     after join & reduce -> 
##     tL = [0,on3(t,minf,yl+xr,oc),on3(t,yl+xr,yr+xr,oc)] 
##     uL = [on3(u,yl,inf,co),on3(u,yl,yr,cc),on3(u,t-xr,yr,cc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,xr,oc)*on3(y,yl,inf,co) 
##     xL = [on3,x,minf,xr,oc]  yL = [on3,y,yl,inf,co] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = o  x_r = c  y_l = c  y_r = o 
##     before join & reduce -> 
##     tl = [minf,minf+inf,yl+xr]  tr = [minf+inf,yl+xr,inf]  tlr = [oo,oc,oo] 
##     ul = [yl,yl,t-xr]  ur = [inf,inf,inf]  ulr = [co,co,co] 
##     after join & reduce -> 
##     tL = [on3(t,minf,yl+xr,oc),0,on3(t,yl+xr,inf,oo)] 
##     uL = [on3(u,yl,inf,co),on3(u,yl,inf,co),on3(u,t-xr,inf,co)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,xr,oc)*on3(y,minf,yr,oc) 
##     xL = [on3,x,minf,xr,oc]  yL = [on3,y,minf,yr,oc] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = o  x_r = c  y_l = o  y_r = c 
##     before join & reduce -> 
##     tl = [minf,minf,minf]  tr = [minf,minf,yr+xr]  tlr = [oo,oo,oc] 
##     ul = [minf,minf,t-xr]  ur = [inf,yr,yr]  ulr = [oo,oc,cc] 
##     after join & reduce -> 
##     tL = [0,0,on3(t,minf,yr+xr,oc)] 
##     uL = [on3(u,minf,inf,oo),on3(u,minf,yr,oc),on3(u,t-xr,yr,cc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,xr,oc)*on3(y,minf,inf,oo) 
##     xL = [on3,x,minf,xr,oc]  yL = [on3,y,minf,inf,oo] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = o  x_r = c  y_l = o  y_r = o 
##     before join & reduce -> 
##     tl = [minf,minf+inf,minf]  tr = [minf+inf,minf,inf]  tlr = [oo,oo,oo] 
##     ul = [minf,minf,t-xr]  ur = [inf,inf,inf]  ulr = [oo,oo,co] 
##     after join & reduce -> 
##     tL = [0,0,on3(t,minf,inf,oo)] 
##     uL = [on3(u,minf,inf,oo),on3(u,minf,inf,oo),on3(u,t-xr,inf,co)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,inf,oo)*on3(y,yl,yr,cc) 
##     xL = [on3,x,minf,inf,oo]  yL = [on3,y,yl,yr,cc] 
##     xrng = inf  yrng = yr-yl  type = A  facts(yr) = [] 
##     x_l = o  x_r = o  y_l = c  y_r = c 
##     before join & reduce -> 
##     tl = [minf,minf,inf]  tr = [minf,inf,inf]  tlr = [oo,oo,oo] 
##     ul = [yl,yl,minf]  ur = [inf,yr,yr]  ulr = [co,cc,oc] 
##     after join & reduce -> 
##     tL = [0,on3(t,minf,inf,oo),0] 
##     uL = [on3(u,yl,inf,co),on3(u,yl,yr,cc),on3(u,minf,yr,oc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,inf,oo)*on3(y,yl,inf,co) 
##     xL = [on3,x,minf,inf,oo]  yL = [on3,y,yl,inf,co] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = o  x_r = o  y_l = c  y_r = o 
##     before join & reduce -> 
##     tl = [minf,minf+inf,inf]  tr = [minf+inf,inf,inf]  tlr = [oo,oo,oo] 
##     ul = [yl,yl,minf]  ur = [inf,inf,inf]  ulr = [co,co,oo] 
##     after join & reduce -> 
##     tL = [on3(t,minf,inf,oo),0,0] 
##     uL = [on3(u,yl,inf,co),on3(u,yl,inf,co),on3(u,minf,inf,oo)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,inf,oo)*on3(y,minf,yr,oc) 
##     xL = [on3,x,minf,inf,oo]  yL = [on3,y,minf,yr,oc] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = o  x_r = o  y_l = o  y_r = c 
##     before join & reduce -> 
##     tl = [minf,minf,minf+inf]  tr = [minf,minf+inf,inf]  tlr = [oo,oo,oo] 
##     ul = [minf,minf,minf]  ur = [inf,yr,yr]  ulr = [oo,oc,oc] 
##     after join & reduce -> 
##     tL = [0,on3(t,minf,inf,oo),0] 
##     uL = [on3(u,minf,inf,oo),on3(u,minf,yr,oc),on3(u,minf,yr,oc)] 
##     -- end of  progn = <on3D2G_ex>  --- 
##     -- D:xl<x<xr, yl<y<yr --(t=x+y,u=y)--> G:G(t,u) -- 
##     ◇  ex = on3(x,minf,inf,oo)*on3(y,minf,inf,oo) 
##     xL = [on3,x,minf,inf,oo]  yL = [on3,y,minf,inf,oo] 
##     xrng = inf  yrng = inf  type = E  facts(yr) = [] 
##     x_l = o  x_r = o  y_l = o  y_r = o 
##     before join & reduce -> 
##     tl = [minf,minf+inf,minf+inf]  tr = [minf+inf,minf+inf,inf]  tlr = [oo,oo,oo] 
##     ul = [minf,minf,minf]  ur = [inf,inf,inf]  ulr = [oo,oo,oo] 
##     after join & reduce -> 
##     tL = [on3(t,minf,inf,oo),0,0] 
##     uL = [on3(u,minf,inf,oo),on3(u,minf,inf,oo),on3(u,minf,inf,oo)] 
##     -- end of  progn = <on3D2G_ex>  --- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-23.mxl"

21. 関数 on3dim2_uni2() : 一様分布に従う独立な確率変数の和の分布

figs_dir : "test1_files"$
on3dim2_uni2('plot,'noview)$
## ~/bin/go TMP/tmp_lang/chunk-24.mxl  > TMP/tmp_lang/chunk-24.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-24.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-24.mxl
## figs_dir:"test1_files"
## on3dim2_uni2('plot,'noview)
## ---Run with NoView Mode--- 
##   一様分布 U[0,1]に従う独立確率変数の和の分布(密度関数)を求める
## ◆ 1個の和の分布 
## ★  ( f[1](t) ) 
## ◎   out = on3(t, 0, 1, cc) 
##  f (t) = on3(t, 0, 1, cc) 
##   1
## ◆ 2個の和の分布 
## CS: h (t, u) = on3(t, 1, 2, co) on3(u, t - 1, 1, cc) + on3(t, 0, 1, co) on3(u, 0, t, cc) 
##      2
## ★  ( f[2](t) ) 
## ◎   out = t on3(t, 0, 1, co) - (t - 2) on3(t, 1, 2, co) 
##          [   t    (0 <= t < 1)  ]
##          [                      ]
##  f (t) = [ 2 - t  (1 <= t < 2)  ] 
##   2      [                      ]
##          [   0    ( otherwise ) ]
## ◆ 3個の和の分布 
## ★  ( f[3](t) ) 
## ◎   out = 
##      ((t-3)^2*on3(t,2,3,co))/2-((2*t^2-6*t+3)*on3(t,1,2,co))/2+(t^2*on3(t,0,1,co))/2 
##          [         2                       ]
##          [        t                        ]
##          [        --         (0 <= t < 1)  ]
##          [        2                        ]
##          [                                 ]
##          [      2                          ]
##          [   2 t  - 6 t + 3                ]
##  f (t) = [ - --------------  (1 <= t < 2)  ] 
##   3      [         2                       ]
##          [                                 ]
##          [            2                    ]
##          [     (t - 3)                     ]
##          [     --------      (2 <= t < 3)  ]
##          [        2                        ]
##          [                                 ]
##          [        0          ( otherwise ) ]
## ◆ 4個の和の分布 
## ★  ( f[4](t) ) 
## ◎   out = 
##      (-((t-4)^3*on3(t,3,4,co))/6)+((3*t^3-24*t^2+60*t-44)*on3(t,2,3,co))/6
##                                  -((3*t^3-12*t^2+12*t-4)*on3(t,1,2,co))/6
##                                  +(t^3*on3(t,0,1,co))/6 
##          [             3                            ]
##          [            t                             ]
##          [            --              (0 <= t < 1)  ]
##          [            6                             ]
##          [                                          ]
##          [      3       2                           ]
##          [   3 t  - 12 t  + 12 t - 4                ]
##          [ - -----------------------  (1 <= t < 2)  ]
##          [              6                           ]
##          [                                          ]
##  f (t) = [    3       2                             ] 
##   4      [ 3 t  - 24 t  + 60 t - 44                 ]
##          [ ------------------------   (2 <= t < 3)  ]
##          [            6                             ]
##          [                                          ]
##          [                 3                        ]
##          [          (t - 4)                         ]
##          [        - --------          (3 <= t < 4)  ]
##          [             6                            ]
##          [                                          ]
##          [             0              ( otherwise ) ]
## ◆ 5個の和の分布 
## ★  ( f[5](t) ) 
## ◎   out = 
##      ((t-5)^4*on3(t,4,5,co))/24-((4*t^4-60*t^3+330*t^2-780*t+655)*on3(t,3,4,co))/24
##                                +((6*t^4-60*t^3+210*t^2-300*t+155)*on3(t,2,3,co))/24
##                                -((4*t^4-20*t^3+30*t^2-20*t+5)*on3(t,1,2,co))/24
##                                +(t^4*on3(t,0,1,co))/24 
##          [                   4                                  ]
##          [                  t                                   ]
##          [                  --                    (0 <= t < 1)  ]
##          [                  24                                  ]
##          [                                                      ]
##          [        4       3       2                             ]
##          [     4 t  - 20 t  + 30 t  - 20 t + 5                  ]
##          [   - -------------------------------    (1 <= t < 2)  ]
##          [                   24                                 ]
##          [                                                      ]
##          [     4       3        2                               ]
##          [  6 t  - 60 t  + 210 t  - 300 t + 155                 ]
##  f (t) = [  -----------------------------------   (2 <= t < 3)  ] 
##   5      [                  24                                  ]
##          [                                                      ]
##          [      4       3        2                              ]
##          [   4 t  - 60 t  + 330 t  - 780 t + 655                ]
##          [ - -----------------------------------  (3 <= t < 4)  ]
##          [                   24                                 ]
##          [                                                      ]
##          [                      4                               ]
##          [               (t - 5)                                ]
##          [               --------                 (4 <= t < 5)  ]
##          [                  24                                  ]
##          [                                                      ]
##          [                   0                    ( otherwise ) ]
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-24.mxl"
test1_files/on3dim2_uni2-sum.pngのグラフ

test1_files/on3dim2_uni2-sum.pngのグラフ

test1_files/on3dim2_uni2-av.pngのグラフ

test1_files/on3dim2_uni2-av.pngのグラフ

22. 関数 on3dim2_exp2() : 指数分布に従う独立な確率変数の和の分布

figs_dir : "test1_files"$
on3dim2_exp2('plot,'noview)$
## ~/bin/go TMP/tmp_lang/chunk-25.mxl  > TMP/tmp_lang/chunk-25.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-25.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-25.mxl
## figs_dir:"test1_files"
## on3dim2_exp2('plot,'noview)
## ---Run with NoView Mode--- 
##   指数分布 Ex(1)に従う独立確率変数の和の分布(密度関数)を求める
## ◆ 1個の和の分布 
## ★  ( f[1](t) ) 
##               - t
## ◎   out = %e    on3(t, 0, inf, co) 
##            - t
##  f (t) = %e    on3(t, 0, inf, co) 
##   1
## ◆ 2個の和の分布 
## ★  ( f[2](t) ) 
##                 - t
## ◎   out = t %e    on3(t, 0, inf, co) 
##              - t
##  f (t) = t %e    on3(t, 0, inf, co) 
##   2
## ◆ 3個の和の分布 
## ★  ( f[3](t) ) 
## ◎   out = (t^2*%e^-t*on3(t,0,inf,co))/2 
##           2   - t
##          t  %e    on3(t, 0, inf, co)
##  f (t) = --------------------------- 
##   3                   2
## ◆ 4個の和の分布 
## ★  ( f[4](t) ) 
## ◎   out = (t^3*%e^-t*on3(t,0,inf,co))/6 
##           3   - t
##          t  %e    on3(t, 0, inf, co)
##  f (t) = --------------------------- 
##   4                   6
## ◆ 5個の和の分布 
## ★  ( f[5](t) ) 
## ◎   out = (t^4*%e^-t*on3(t,0,inf,co))/24 
##           4   - t
##          t  %e    on3(t, 0, inf, co)
##  f (t) = --------------------------- 
##   5                  24
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-25.mxl"
test1_files/on3dim2_exp2-sum.pngのグラフ

test1_files/on3dim2_exp2-sum.pngのグラフ

test1_files/on3dim2_exp2-av.pngのグラフ

test1_files/on3dim2_exp2-av.pngのグラフ

23. 関数 on3pw() : on3関数のカプセル化(停止中)

on3pw_ex()$
## ~/bin/go TMP/tmp_lang/chunk-26.mxl  > TMP/tmp_lang/chunk-26.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-26.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-26.mxl
## on3pw_ex()
## --- begin of on3pw_ex --- 
## ◆ 準備:関数 F1(x),f0(x)の作成 
## ★  (  
##     f0(x) := sin(x),  
##     f1(x) := x^2*on3(x,minf,0,oo) + (1-x^2)/2 *on3(x,0,1,oo)  
##     + (1-x)*on3(x,1,inf,oo),  
##     ldisplay(f0(x)), ldisplay(f1(x))  
##      ) 
## (%t2) f0(x) = sin(x)
## (%t3) f1(x) = x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)+((1-x^2)*on3(x,0,1,oo))/2
## ◆ 使用例1:on3pw()を用いない場合 
## ★  (  
##     define(df_direct(x), on3diff(f1(x),x,1) + diff(f0(x),x,1)), 
##     ldisplay(df_direct(x)), 
##     ldisplay(df_direct(1)), 
##     define(F_direct(x), on3integ(f1(x),x) + integrate(f0(x),x)), 
##     ldisplay(F_direct(x)), 
##     mshow(F_direct(2) - F_direct(-1))  
##      ) 
## (%t4) df_direct(x) = 2*x*on3(x,minf,0,oo)-on3(x,1,inf,co)-x*on3(x,0,1,oo)+cos(x)
## (%t5) df_direct(1) = cos(1)-1
## (%t6) F_direct(x) = (x^3*on3(x,minf,0,oo))/3+((-x^2/2)+x-1/2)*on3(x,1,inf,oo)
##                                             +on3(x,1,inf,co)/3
##                                             +((x-x^3/3)*on3(x,0,1,oo))/2-cos(x)
## ◆ 使用例2:on3pw()を用いる場合 
## ★  (   
##     f(x) := on3pw(f1(x))+f0(x),  /* on3関数f1(x)のカプセル化 */  
##     define(df(x), diff(f(x),x)), /* 関数f(x)の微分関数 df(x)の定義 */  
##     ldisplay(df(x)), 
##     ldisplay(df(1)), 
##     define(F(x), integrate(f(x),x)), /* 関数f(x)の不定積分 F(x)の定義 */  
##     ldisplay(F(x)), 
##     mshow(F(2) - F(-1))  
##      ) 
## (%t7) df(x) = 'diff(on3pw(x^2*on3(x,minf,0,oo)+(1-x)*on3(x,1,inf,oo)
##                                               +((1-x^2)*on3(x,0,1,oo))/2),x,1)
##             +cos(x)
## diff: variable must not be a number; found: 1
## #0: df(x=1)
## #1: logshow(args=["(  @f(x) := on3pw(f1(x))+f0(x),  /* on3関数f1(x)のカプセル化 */ @define(df(x), diff(f(x),x...)
## #2: on3pw_ex()
##  -- an error. To debug this try: debugmode(true);
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-26.mxl"

24. 関数 on3ineq_ex() : 不等式の求解

figs_dir : "test1_files"$
on3ineq_ex(C2, 'file_name="test1_files/on3ineq-C2", 'noview)$
## ~/bin/go TMP/tmp_lang/chunk-27.mxl  > TMP/tmp_lang/chunk-27.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-27.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-27.mxl
## figs_dir:"test1_files"
## ineqex(C2,'file_name = "test1_files/on3ineq-C2",'noview)
## CS: === ■ ■ ■  progn = <on3ineq_ex> ,  ■ ■ ■  === 
## CS: excase = C2 
## CS: ev(excase) = [[[y^3+2*x*y+x^2,1,9,co]],xrange = [-5,5],yrange = [-5,5]] 
## --[Result display]-- 
## varl = [x,y] 
## LL = 
##     [[['V[1][5],'V[1][1],oc],['V[2][4],'V[2][1],co]],
##      [['V[1][1],'V[1][2],oc],['V[2][4],'V[2][2],co]],
##      [['V[1][1],'V[1][2],oc],['V[2][3],'V[2][1],oo]],
##      [['V[1][2],'V[1][3],oc],['V[2][4],'V[2][1],co]],
##      [['V[1][3],'V[1][4],oc],['V[2][5],'V[2][6],cc]],
##      [['V[1][3],'V[1][4],oc],['V[2][4],'V[2][1],co]],
##      [['V[1][4],'V[1][6],oo],['V[2][4],'V[2][1],co]]] 
## , where 
## V[ 1 ]= [-4.3414023,-2.2876237,-2.0459579,-0.65266742,minf,inf] 
## V[ 2 ]= 
##   [-(Expt*Sum(3)-Product(4))/(144*x^2),
##    ((Product(4)+Negterm)*x^2*Sum(3)^(1/3)+Sum(3)^(2/3)
##                                           *(Product(2)+Product(2)+Negterm+Negterm))
##     /(288*x^2),-(Sum(2)*Expt*Expt+Expt*Sum(4))/(288*x^2),
##    -(Expt*Sum(3)-Product(4))/(144*x^2),
##    ((Product(4)+Negterm)*x^2*Sum(3)^(1/3)+Sum(3)^(2/3)
##                                           *(Product(2)+Product(2)+Negterm+Negterm))
##     /(288*x^2),-(Sum(2)*Expt*Expt+Expt*Sum(4))/(288*x^2),minf,inf] 
## ---end--- 
## CS: 参照可能変数: varl,V,LL,vsing,on3f,fL,on3floatnump,acnode 
## CS: progn = <on3regionview> , ==2変数関数== 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-27.mxl"
test1_files/on3ineq-C2.pngのグラフ

test1_files/on3ineq-C2.pngのグラフ

その他のツール

25. funcs ライブラリー一覧と検索ツール

funcs()$
funcs('ex)$
findstr()$
findstr('ex)$
## ~/bin/go TMP/tmp_lang/chunk-28.mxl  > TMP/tmp_lang/chunk-28.out 2>&1
## --  <on3env>  logbegin -- 
##     maxima_tempdir = TMP/tmp_maxima  figs_dir = figs 
## batch("/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-28.mxl")
## read and interpret /home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-28.mxl
## funcs()
##   ==ユーザ定義の関数名,マクロ名一覧:  functions , sortmode= true == 
## ["ON3on3([args])","acnode_join(LWT0,[args])","args_flat([args])","ass_set([args])",
##  "chk1g([args])","chk1show([args])","chk2D([args])","chk2g([args])","chk2show([args])",
##  "chk3g([args])","debug_ex(x,[args])","debug_sub(y,[args])","ecsort([args])",
##  "elimalg1([args])","elimalg1_ex([args])","exchk(on3func_name,exansL,[args])",
##  "exchk_ex([args])","exmk(ex,[args])","exmk_ex([args])","exp2l([args])","extry([args])",
##  "f2l([args])","f2l_full([args])","f2l_one([args])","fact_forget([args])",
##  "fact_var([args])","find_key([args])","find_key_ex([args])","find_key_no([args])",
##  "find_key_no_ex([args])","findstr([args])","findstr_ex([args])","floatfix([args])",
##  "floatfix_ex([args])","flrlimit([args])","flrlimit_ex([args])","fna([args])",
##  "funcs([args])","funcxy([args])","funcxy_ex([args])","gcd2l([args])",
##  "globalvar([args])","gr2v([args])","gr2v_ex([args])","gr2vf([args])","gr3v([args])",
##  "gr3v_ex([args])","grv([args])","grv_ex([args])","ineqex([args])","jumppoints([args])",
##  "killvars([args])","l2f([args])","l2f_one([args])","list2str([args])",
##  "list2str_ex([args])","ll2on3(varl,va,LL,[args])","loffuncs([args])","logshow([args])",
##  "lpup([args])","mergeL([args])","mergeL_ex([args])","mk_draw([args])",
##  "mk_draw_ex([args])","mk_fullname([args])","mk_yrange([args])","mkfloat([args])",
##  "mkfloat_ex([args])","msort([args])","msort_ex()","nor2d([args])","on3([args])",
##  "on3D2G([args])","on3D2G_ex([args])","on3_same_var([args])","on3asdecomp([args])",
##  "on3asdecomp_ex([args])","on3byon3([args])","on3chgv([args])","on3chgvar2([args])",
##  "on3chgvar2_ex([args])","on3chgvar2_test()","on3chgvar3([args])",
##  "on3cspline(tab,[select])","on3cspline_ex([args])","on3decomp([args])",
##  "on3decomp21([args])","on3decomp_decomp(expr,[args])","on3decomp_ex([args])",
##  "on3decomp_inv(u,[args])","on3decomp_one([args])","on3decomp_reduce(LWT0,[args])",
##  "on3decompm([args])","on3diff([args])","on3diff_ex([args])","on3dim2_exp2([args])",
##  "on3dim2_uni2([args])","on3dplot2([args])","on3edge([args])","on3edge_ex([args])",
##  "on3ev([args])","on3evdef([args])","on3ex([args])","on3factor([args])",
##  "on3find([args])","on3find_ex([args])","on3ftrue([args])","on3funcdraw([args])",
##  "on3gr([args])","on3gr2([args])","on3gr_ex([args])","on3help()","on3iftrue([args])",
##  "on3ineq([args])","on3ineq_acnode(LF,[args])","on3ineq_backsolve(LF,[args])",
##  "on3ineq_fwd(varl,va,vlist,vsing,[args])","on3ineq_jex([args])",
##  "on3ineq_shrink([args])","on3info([args])","on3integ([args])","on3integ10([args])",
##  "on3integ19([args])","on3integ19_ex([args])","on3integ20([args])",
##  "on3integ20_ex([args])","on3integ_ex([args])","on3lrl([args])",
##  "on3lspline(tab,[select])","on3lspline_ex([args])","on3pw_ex()","on3regionview([args])",
##  "on3rngm([args])","on3rngm_ex1([args])","on3rngm_ex2([args])","on3rngone(rng1,rng2)",
##  "on3romberg([args])","on3show_ex([args])","on3show_sub(funcs,[args])","on3simp([args])",
##  "on3solve([args])","on3solve_ex([args])","on3std([args])","on3std_ex([args])",
##  "on3termsep([args])","on3test([args])","on3typep([args])","on3varfix([args])",
##  "on3vars([args])","on3x([args])","outLev([args])","p2surface([args])","polydeg([args])",
##  "q3([args])","q4([args])","realp([args])","salgall([args])","salgall_ex([args])",
##  "shrink10(LYLR,[args])","slit([args])","sqrt2d([args])","sqrt2d_ex([args])","t(x)",
##  "ush([args])","va_unique([args])","var_fact([args])","wt(atom)"]
##   
##   ==ユーザ定義の関数名,マクロ名一覧:  macros , sortmode= true == 
## ["c0show([lis])","c1show([lis])","c2show([lis])","c3show([lis])","cashow([lis])",
##  "cshow([lis])","d1show([lis])","d2show([lis])","d3show([lis])","ifargd()",
##  "max_restore([args])","max_save([args])","on3env([args])","on3lib([args])",
##  "on3rules([args])","on3show([args])"]
##   
## funcs('ex)
## --begin of funcs('ex)-- 
##     ev(str) = funcs('show) 
## --end of funcs('ex)-- 
## findstr()
##    --begin of findstr('help)--
##    機能: ユーザ定義の関数,マクロから指定文字列を含む関数(マクロ)名を検索する
##    文法: findstr(str)
##    例示: findstr('solve)
##    --end of findstr('help')--
##    
## findstr('ex)
## --begin of func1('ex)-- 
## ★  
##     ( findstr('solve),  /* 文字列solve を含む関数名,マクロ名を標示する */ 
##      
##     
##    findstr('decomp), /* 文字列decomp を含む関数名,マクロ名を標示する */ 
##     
##     findstr('show)   /* 文字列show を含む関数名,マクロ名を標示する */  
##      ) 
## <findstr> search string = solve 
## <findstr> functions --> 
##          ["on3solve([args])","on3solve_ex([args])","on3ineq_backsolve(LF,[args])"] 
## <findstr> macros --> [] 
## <findstr> search string = decomp 
## <findstr> functions --> 
##          ["on3decomp_reduce(LWT0,[args])","on3decomp_decomp(expr,[args])",
##           "on3decomp_inv(u,[args])","on3decomp_one([args])","on3asdecomp([args])",
##           "on3asdecomp_ex([args])","on3decompm([args])","on3decomp21([args])",
##           "on3decomp([args])","on3decomp_ex([args])"] 
## <findstr> macros --> [] 
## <findstr> search string = show 
## <findstr> functions --> 
##          ["chk2show([args])","on3show_sub(funcs,[args])","on3show_ex([args])",
##           "logshow([args])","chk1show([args])"] 
## <findstr> macros --> 
##          ["on3show([args])","cashow([lis])","c0show([lis])","cshow([lis])",
##           "c1show([lis])","c2show([lis])","c3show([lis])","d1show([lis])",
##           "d2show([lis])","d3show([lis])"] 
##     out =  --- end of findstr --- 
## --end of findstr('ex)-- 
## "/home/inoue/Maxlib-20/LANG/TMP/tmp_lang/chunk-28.mxl"

終わり