: Maxima数学II自習教材開発
教材の概要
2 複素数と方程式 2)高次方程式
 4.剰余の定理と因数定理
 5.高次方程式
 202.補充問題・章末問題

Maxima数学II自習教材試行報告用紙(Word)
Maxima数学II自習教材試行報告用紙(PDF)

: 教材の概要

活動時間 
 自宅での予習か授業初めの5分程度
活動概要
 1 タブレット等を用いてトライ
  1) 教科書の該当ページを開く
  2) このWebページを開く
  3) Maxima on lineのWebページを開く
  4) 該当コマンドをMaximaOnLineにコピペして、実行
 2 自分なりの感触、着想
  1) 自分なりに、実行結果を見て、気づいたり感じたりすることがないか、考えてみる。
  2) ワークシートに、考えてみたこと(意見・質問・感じたこと)を書く
  3) ワークシートを、事前に提出する場合は、課題提出フォームを使うこと。
 3 問題の雰囲気を2で感じてから、授業へ
  1) 班活動などで自分の考えを仲間に伝える
  2) 仲間の考えを受け止める
  3) 筋が通って、見通しのよい解法、数学的な論点をうまく処理した解法をまとめる


http://www.ac.cyberhome.ne.jp/~konoha/KNOPPIX/MaximaBook.pdf
参照テキスト
 数研出版新編数学II

:   4.剰余の定理と因数定理
   A. 剰余の定理
◆コマンド番号401
●剰余の定理
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例11・練習19 401 P(x)=x^3-2*x^2+3をx-1で割った余りは、P(1)"/*(◆修正部分1)*/$
KOUSATU:"商と余りの式で表して、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:e20l*e3l[1],print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:e20l*e3l[1+i],print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e:x^3-2*x^2+3;P(x):=["P(",x,")=",e];e2:x-1;bl:". . . . .";bdl:". . . . .---------"/*(◆修正部分2)*/$
eq:P(x)=Q*e2+R;se2xl:solve(e2=0,x);eq1l:subst(se2xl,eq)$print(eq1l)$
ansl:eq1l/**/;

KAKUNIN:"確認"/**/$
kknnl:ed(e,e2,bl,bdl);
if last(kknnl[2])=last(lhs(eq1l)) then mes:"成立" else mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[商,余り,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"商と余りの式で表すと、(  )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例11・練習19 401 P(x)=x^3+x^2-3*x-2をx+2で割った余りは、"/*(◆修正部分1)*/$
e:x^3+x^2-3*x-2;P(x):=["P(",x,")=",e];e2:x+2;bl:". . . . .";bdl:". . . . .---------"/*(◆修正部分2)*/$


◆コマンド番号402
●剰余の定理
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例題7・練習20 402 P(x)=x^3+a*x^2+3*x-2*aをx-2で割った余りが12のとき、aは"/*(◆修正部分1)*/$
KOUSATU:"剰余の定理を使って、・・・"/*(◆修正部分1)*/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:e20l*e3l[1],print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:e20l*e3l[1+i],print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e:x^3+a*x^2+3*x-2*a;e2:x-2;R:12;P(x):=["P(",x,")=",e];bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
eq:P(x)=Q*e2+R;sxl:solve(e2=0,x);seql:subst(sxl,eq);sal:solve(last(lhs(seql))=R,a)$print(sal)$
ansl:sal;se:subst(sal,e)/**/;

KAKUNIN:"確認"/**/$
qrl:ed(se,e2,bl,bdl);kknnl:ansl;
if last(qrl[2])=R then mes:"成立" else mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"商と余りの式で表すと、(  )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例題7・練習20 402 P(x)=2*x^3+5*a*x^2+a*x+1をx+1で割った余りが-5のとき、aは"/*(◆修正部分1)*/$
KOUSATU:"剰余の定理を使って、・・・"/*(◆修正部分1)*/;
e:2*x^3+5*a*x^2+a*x+1;e2:x+1;R:-5;P(x):=["P(",x,")=",e];bl:". . . . ";bdl:". . . . ---------"/*(◆修正部分2)*/$


◆コマンド番号403
●剰余の定理
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・応用例題2・練習21 403 整式P(x)をx-1,x+2で割った余りが5,-1であるとき、(x-1)*(x+2)で割った余りは"/*(◆修正部分1)*/$
KOUSATU:"(x-1)*(x+2)で割った余りは1次式となるので、q*(x+2)+rとおくと、・・・"/*(◆修正部分1)*/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e1:x-1;e2:x+2;R1:5;R2:-1;e:Q*e1*e2+Q1*e1+R1;P(x):=["P(",x,")=",e];bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
sxl:solve(e2=0,x);seql:subst(sxl,P(x));last(lhs(seql))=R2;sal:solve(last(lhs(seql))=R2,Q1)$print(sal)$
se:subst(sal,e);ansl:[expand(coeff(se,Q,0))]/**/;

KAKUNIN:"確認"/**/$
se:expand(se);
qr0l:ed(se,expand(e1*e2),bl,bdl);qr1l:ed(se,e1,bl,bdl);qr2l:ed(se,e2,bl,bdl);kknnl:ansl;
if elx(qr0l[2],x)=ansl[1] and elx(qr1l[2],x)=R1 and elx(qr2l[2],x)=R2 then mes:"成立" else mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"(x-1)*(x+2)で割った余りは1次式となるので、q*(x+2)+(  )となり、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・応用例題2・練習21 403 整式P(x)をx-3,x+1で割った余りが1,5であるとき、(x-3)*(x+1)で割った余りは"/*(◆修正部分1)*/$
KOUSATU:"(x-3)*(x+1)で割った余りは1次式となるので、q*(x+1)+rとおくと、・・・"/*(◆修正部分1)*/;
e1:x-3;e2:x+1;R1:1;R2:5;e:Q*e1*e2+Q1*e1+R1;P(x):=["P(",x,")=",e];bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
SUJIMITI:"(x-3)*(x+1)で割った余りは1次式となるので、q*(x+1)+(  )となり、・・・"/*(◆修正部分3)*/;


   B. 因数定理
◆コマンド番号404
●因数定理
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例12・練習22 404 P(x)=2*x^3-5*x^2+x+2において、P(2)は、また、P(x)の因数は"/*(◆修正部分1)*/$
KOUSATU:"因数定理により、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
P(x):=["P(",x,")=",2*x^3-5*x^2+x+2];e:last(P(x));a:2;e1:x-a;bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
if last(P(a))=0 then(fe2l:ed(e,e1,bl,bdl))else fe2l:[error];
se2:elx(fe2l[1],x);ansl:[P(a),e,e1,se2,"[P(a),e,=e1,*se2]"];

KAKUNIN:"確認"/**/$
ke:expand(e1*se2);kknnl:[ansl];
if ke=e then mes:"成立" else mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"P(2)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例12・練習22 404 P(x)=x^3+2*x^2-5*x-6において、x+1はP(x)の因数か"/*(◆修正部分1)*/$
P(x):=["P(",x,")=",x^3+2*x^2-5*x-6];e:last(P(x));e1:x+1;a:rhs(solve(e1=0,x)[1]);bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
SUJIMITI:"P(-1)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;


◆コマンド番号405
●因数定理
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例13・練習23 405 x^3-4*x^2+x+6の因数分解は"/*(◆修正部分1)*/$
KOUSATU:"因数定理により、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
Pl(x):=["P(",x,")=",x^3-4*x^2+x+6];e:last(Pl(x));bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
a:coeff(e,x,hipow(e,x));adl:listify(divisors(a));d:coeff(e,x,0);ddl:listify(divisors(d));
i:1;iM:length(adl);j:1;jM:length(ddl);sxl:[];for i:1 thru iM do(for j:1 thru jM do(
/**/sx:ddl[j]/adl[i],kM:length(sxl),On:0,for k:1 thru kM do if sx=sxl[k][3] then On:1,
/**/if last(Pl(sx))=0 and On=0 then sxl:endcons([i,j,sx],sxl),if last(Pl(-sx))=0 and On=0 then sxl:endcons([i,j,-sx],sxl)));
sx3:sxl[1][3];e1:sxl[1][1]*x-(if sx3>=0 then sxl[1][2] else -sxl[1][2]);fel:ed(e,e1,bl,bdl);
kM:length(sxl);fe:1;for k:1 thru kM do(fe:fe*(sxl[k][1]*x-sxl[k][3]*sxl[k][1]));ansl:[e,fe,"[e,=fe]"];

KAKUNIN:"確認"/**/$
ke:expand(ansl[1]);kknnl:[ansl];
if ke=e then mes:"成立" else mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"P(-1)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例13・練習23 405 x^3-4*x^2+x+6の因数分解は"/*(◆修正部分1)*/$
Pl(x):=["P(",x,")=",2*x^3-9*x^2+7*x+6];e:last(Pl(x));bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
SUJIMITI:"P(2)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;


:   5.高次方程式
   A. 高次方程式の解き方(1)
◆コマンド番号406
●3次方程式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例8・練習24・25 406 x^3-1=0の解は"/*(◆修正部分1)*/$
KOUSATU:"因数定理により因数分解し、・・・"/*(◆修正部分1)*/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
Pl(x):=["P(",x,")=",x^3-1];e:last(Pl(x));bl:". . . . ";bdl:". . . . ---------"/*(◆修正部分2)*/$
a:coeff(e,x,hipow(e,x));adl:listify(divisors(a));d:coeff(e,x,0);ddl:listify(divisors(d));
i:1;iM:length(adl);j:1;jM:length(ddl);sxl:[];for i:1 thru iM do(for j:1 thru jM do(
/**/sx:ddl[j]/adl[i],kM:length(sxl),On:0,for k:1 thru kM do if sx=sxl[k][3] then On:1,
/**/if last(Pl(sx))=0 and On=0 then sxl:endcons([i,j,sx],sxl),if last(Pl(-sx))=0 and On=0 then sxl:endcons([i,j,-sx],sxl)));
sxl;sx3:sxl[1][3];e1:adl[sxl[1][1]]*x-(if sx3>=0 then ddl[sxl[1][2]] else -ddl[sxl[1][2]]);fel:ed(e,e1,bl,bdl);
kM:length(sxl);fe:1;sx1l:[];for k:1 thru kM do(fe:fe*(sxl[k][1]*x-sxl[k][3]*sxl[k][1]),sx1l:endcons(x=sxl[k][3],sx1l));
hfe:hipow(fe,x);if hipow(e,x)>hipow(fe,x) then (fel:ed2(e,fe,bl,bdl),e1:elx(fel[1],x),sx2l:solve(e1=0,x));
kM:length(sx2l);for k:1 thru kM do(sx1l:endcons(sx2l[k],sx1l));ansl:sx1l;

KAKUNIN:"確認"/**/$
iM:length(ansl);kknnl:[ansl];
mes:"成立";for i:1 thru iM do(if rhs(ratsimp(Pl(ansl[i]))[4])#0 then mes:"不成立",print(ratsimp(Pl(ansl[i]))));kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"P(1)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例8・練習24・25 406 x^3+1=0の解は"/*(◆修正部分1)*/$
KOUSATU:"因数定理により因数分解し、・・・"/*(◆修正部分1)*/;
Pl(x):=["P(",x,")=",x^3+1];e:last(Pl(x));bl:". . . . ";bdl:". . . . ---------"/*(◆修正部分2)*/$
SUJIMITI:"P(-1)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;

◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例8・練習24・25 406 27の3乗根は"/*(◆修正部分1)*/$
KOUSATU:"x^3=27を=0の形に変形して、因数定理により因数分解し、・・・"/*(◆修正部分1)*/;
Pl(x):=["P(",x,")=",x^3-27];e:last(Pl(x));bl:". . . . ";bdl:". . . . ---------"/*(◆修正部分2)*/$
SUJIMITI:"x^3-( ) と変形し、P(3)=(  )となるから、因数定理により、・・・"/*(◆修正部分3)*/;


◆コマンド番号407
●複2次方程式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例9・練習26 407 x^4-x^2-2=0の解は"/*(◆修正部分1)*/$
KOUSATU:"x^2=Xとおいて、Xで因数分解し、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
eq:x^4-x^2-2=0;sXl:[X=x^2];eQ:ratsubst(lhs(sXl[1]),rhs(sXl[1]),eq)/*(◆修正部分2)*/$
eQ;eQ:factor(eQ);sX2l:solve(eQ,X);sxl:subst(sXl,sX2l);sx2l:append(solve(sxl[1],x),solve(sxl[2],x));ansl:sx2l;
TEND:""$

KAKUNIN:"確認"/**/$
iM:length(ansl);kknnl:[ansl];
mes:"成立";for i:1 thru iM do(if subst(ansl[i],lhs(eq))#0 then mes:"不成立",print(subst(ansl[i],eq)));kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"x^2=Xとおいて、(    )とし、Xで因数分解し、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例9・練習26 407 x^4-1=0の解は"/*(◆修正部分1)*/$
eq:x^4-1=0;sXl:[X=x^2];eQ:ratsubst(lhs(sXl[1]),rhs(sXl[1]),eq)/*(◆修正部分2)*/$


   B. 高次方程式の解き方(2)
◆コマンド番号408
●3次方程式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・例10・練習27 408 x^3-4*x^2+8=0の解は"/*(◆修正部分1)*/$
KOUSATU:"因数定理により因数分解し、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
Pl(x):=["P(",x,")=",x^3-4*x^2+8];e:last(Pl(x));bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
a:coeff(e,x,hipow(e,x));adl:listify(divisors(a));d:coeff(e,x,0);ddl:listify(divisors(d));
i:1;iM:length(adl);j:1;jM:length(ddl);sxl:[];for i:1 thru iM do(for j:1 thru jM do(
/**/sx:ddl[j]/adl[i],kM:length(sxl),On:0,for k:1 thru kM do if sx=sxl[k][3] then On:1,
/**/if last(Pl(sx))=0 and On=0 then sxl:endcons([i,j,sx],sxl),if last(Pl(-sx))=0 and On=0 then sxl:endcons([i,j,-sx],sxl)));
sxl;sx3:sxl[1][3];e1:adl[sxl[1][1]]*x-(if sx3>=0 then ddl[sxl[1][2]] else -ddl[sxl[1][2]]);fel:ed(e,e1,bl,bdl);
kM:length(sxl);fe:1;sx1l:[];for k:1 thru kM do(fe:fe*(sxl[k][1]*x-sxl[k][3]*sxl[k][1]),sx1l:endcons(x=sxl[k][3],sx1l));
hfe:hipow(fe,x);if hipow(e,x)>hipow(fe,x) then (fel:ed2(e,fe,bl,bdl),e1:elx(fel[1],x),sx2l:solve(e1=0,x));
kM:length(sx2l);for k:1 thru kM do(sx1l:endcons(sx2l[k],sx1l));ansl:sx1l;

KAKUNIN:"確認"/**/$
iM:length(ansl);kknnl:[ansl];
mes:"成立";for i:1 thru iM do(if rhs(ratsimp(Pl(ansl[i]))[4])#0 then mes:"不成立",print(ratsimp(Pl(ansl[i]))));kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"x^2=Xとおいて、(    )とし、Xで因数分解し、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・例10・練習27 408 2*x^3-3*x^2-4=0の解は"/*(◆修正部分1)*/$
Pl(x):=["P(",x,")=",2*x^3-3*x^2-4];e:last(Pl(x));bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
SUJIMITI:"x^2=Xとおいて、(    )とし、Xで因数分解し、・・・"/*(◆修正部分3)*/;


   C. 高次方程式と虚数解
◆コマンド番号408
●3次方程式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・応用例題3・練習28 408 a,bを実数の定数とし、x^3+a*x+b=0の解が1+%iのとき、a,bと他の解は"/*(◆修正部分1)*/$
KOUSATU:"方程式に解を代入すると、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
Pl(x):=["P(",x,")=",x^3+a*x+b];e:last(Pl(x));sx:1+%i;bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$
eab:expand(last(Pl(sx)));eabi:coeff(eab,%i,1);eabr:coeff(eab,%i,0);sabl:solve([eabi=0,eabr=0],[a,b]);
e1:subst(sabl,e);e1dl:ed2(e1,x-sx,bl,bdl);e2:elx(e1dl[1],x);e2:factor(e2);sx2l:solve(e2=0,x);ansl:[sabl[1],sx2l];

KAKUNIN:"確認"/**/$
a:rhs(sabl[1][1]);b:rhs(sabl[1][2]);kknnl:[ansl];iM:length(sx2l);
mes:"成立";for i:1 thru iM do(if expand(subst(sx2l[i],e1))#0 then mes:"不成立",print(expand(subst(sx2l[i],e1))));kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"方程式に解を代入すると、式は(    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・応用例題3・練習28 408 a,bを実数の定数とし、x^3+x^2+a*x+b=0の解が1-%iのとき、a,bと他の解は"/*(◆修正部分1)*/$
Pl(x):=["P(",x,")=",x^3+x^2+a*x+b];e:last(Pl(x));sx:1-%i;bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/$


:   202.補充問題・章末問題
   . 補充問題
◆コマンド番号20201
●3次方程式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・補充4 20201 P(x)=3*x^3+x^2+x+1を3*x+1で割った余りは、P(-1/3)"/**/$
KOUSATU:"商Qと余りRの式を作り、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e:E1=Q*E2+R;
Pl(x):=["P(",x,")=",3*x^3+x^2+x+1];e1:last(Pl(x));e2:3*x+1;bl:". . . . ";bdl:". . . . ---------"/**/$
e0:subst([E1=Pl(x),E2=e2],e);e01:subst([x=-1/3],e0)$e02:rhs(e01)=lhs(e01)$print(e02)$
ansl:[e02,"[余りの式,余り]"];

KAKUNIN:"確認"/**/$
kR:ed2(e1,e2,bl,bdl);kknnl:[ansl];
mes:"成立";if last(kR[2])#last(Pl(-1/3)) then mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"商Qと余りRの式を作ると(    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行し、結果を考察せよ。


◆コマンド番号20202
●2次式で割った商
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・補充5 20202 P(x)=3*x^3+a*x+bを(x+1)*(x-3)で割った余りが3*x-2のとき、a,bは"/**/$
KOUSATU:"商Qと余りRの式を作り、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e:E1=Q*E2+A*x+R;
Pl(x):=["P(",x,")=",3*x^3+a*x+b];e1:last(Pl(x));e2:expand((x+1)*(x-3));e4:3*x-2;bl:". . . . . . . .";bdl:". . . . . . . .---------"/**/$
e0:subst([E1=Pl(x),E2=e2,A=coeff(e4,x,1),R=coeff(e4,x,0)],e);sx2l:solve(e2=0,x);se01:subst(sx2l[1],e0);se02:subst(sx2l[2],e0);
se011:last(lhs(se01))=rhs(se01);se021:last(lhs(se02))=rhs(se02);sabl:solve([se011,se021],[a,b]);e11:subst(sabl[1],e1);
ansl:[se01,se02,sabl[1],"[P(x1),P(x2),a,b]"];

KAKUNIN:"確認"/**/$
kR:ed(e11,e2,bl,bdl);kknnl:[ansl];
mes:"成立";if elx(kR[2],x)#e4 then mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"商Qと余りRの式を作ると(    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行し、結果を考察せよ。


◆コマンド番号20203
●3次方程式の解
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・補充6 20203 3次方程式x^3-2*x^2+a*x+b=0が-1,1を解とするとき、a,bと他の解は"/**/$
KOUSATU:"左辺は(x+1)*(x-1)で割り切れるので、・・・"/**/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e:E1=Q*E2+A*x+R;
Pl(x):=["P(",x,")=",x^3-2*x^2+a*x+b];e1:last(Pl(x));e2:expand((x+1)*(x-1));e4:0;bl:". . . . . . .";bdl:". . . . . . .---------"/**/$
e0:subst([E1=Pl(x),E2=e2,A=coeff(e4,x,1),R=coeff(e4,x,0)],e);sQRl:ed(e1,e2,bl,bdl);
ea:sQRl[2][3]=0;eb:sQRl[2][4]=0;sabl:solve([ea,eb],[a,b]);se3:elx(sQRl[1],x)=0;sxl:solve(se3,x);
ansl:[sabl[1],sxl[1],"[a,b,x]"];

KAKUNIN:"確認"/**/$
ke1:subst(sabl[1],e1);kex:subst(sxl[1],ke1);kknnl:[ansl];
mes:"成立";if kex#0 then mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"左辺は(x+1)*(x-1)で割り切れるので、割り算実行時の余りの式(    )は、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行し、結果を考察せよ。


   . 章末問題
◆コマンド番号20204
●%iの計算
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末1 20204 (3-2*%i)*(-2+%i)は"/*(◆修正部分1)*/$
KOUSATU:"展開して、%i^2=-1とすると、、・・・"/*(◆修正部分1)*/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
e:(3-2*%i)*(-2+%i);e09:expand(e)/*(◆修正部分2)*/;
ansl:[e09,"[計算結果]"];

KAKUNIN:"確認"/**/$
ker:realpart(ansl[1]);kei:imagpart(ansl[1]);ke:ker+kei*%i;kknnl:[ansl];
mes:"成立";if ratsimp(ke)#ratsimp(e09) then mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"展開した式(    )は、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末1 20204 1/(1+%i)+1/(1-2*%i)は"/*(◆修正部分1)*/$
KOUSATU:"各項の分母を有理化して、・・・"/*(◆修正部分1)*/;
e1:1/(1+%i);e2:1/(1-2*%i);e11:ratsimp(e1),algebraic:true;e21:ratsimp(e2),algebraic:true/*(◆修正部分2)*/;
e09:ratsimp(e11+e21);ansl:[e09,"[計算結果]"]/*(◆修正部分2)*/;
SUJIMITI:"第2項の分母を有理化した式(    )は、・・・"/*(◆修正部分3)*/;


◆コマンド番号20205
●%iを含む恒等式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末2 20205 (x-3*y)+(2*x+y)*%i=1-12*%iを満たす実数x,yは"/*(◆修正部分1)*/$
KOUSATU:"両辺の実部どうし、虚部どうしが等しいので、・・・"/*(◆修正部分1)*/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
le:(x-3*y)+(2*x+y)*%i;re:1-12*%i;ler:realpart(le);lei:imagpart(le);rer:realpart(re);rei:imagpart(re)/*(◆修正部分2)*/;
sxyl:solve([ler=rer,lei=rei],[x,y]);ansl:[sxyl[1],"[計算結果]"];

KAKUNIN:"確認"/**/$
kle:subst(sxyl,le);kre:subst(sxyl,re);kknnl:[ansl];
mes:"成立";if ratsimp(kle)#ratsimp(kre) then mes:"不成立";kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"両辺の実部どうしが等しいので(      )、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末2 20205 (5+%i)*(x+y*%i)=13+13*%iを満たす実数x,yは"/*(◆修正部分1)*/$
le:expand((5+%i)*(x+y*%i));re:13+13*%i;ler:realpart(le);lei:imagpart(le);rer:realpart(re);rei:imagpart(re)/*(◆修正部分2)*/;


◆コマンド番号20206
●2次方程式の解法
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末3 20206 x*(x+1)+(x+2)*(x+3)=0の解は"/*(◆修正部分1)*/$
KOUSATU:"左辺を展開して、・・・"/*(◆修正部分1)*/;

KANSUU:"";
KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
le:x*(x+1)+(x+2)*(x+3);re:0;le:expand(le);eq:le=re/*(◆修正部分2)*/;
sxl:solve(eq,x);ansl:sxl/*(◆修正部分2)*/;

KAKUNIN:"確認"/**/$
kknnl:[ansl];iM:length(sxl);mes:"成立";for i:1 thru iM do(
/**/kle:subst(sxl[i],le),kre:subst(sxl[i],re),print([kle,kre]),
/**/if ratsimp(kle)#ratsimp(kre) then mes:"不成立");kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"左辺を展開すると、(   )となり、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末3 20206 2*(x+1)^2-4*(x+1)+3=0の解は"/*(◆修正部分1)*/$
KOUSATU:"t=x+1と置いて、・・・"/*(◆修正部分1)*/;
le:2*(x+1)^2-4*(x+1)+3;re:0;le:expand(le);let:ratsubst(t,x+1,le);eqt:let=re/*(◆修正部分2)*/;
stl:solve(eqt,t);st1l:expand(stl-1);sxl:subst([t=x+1],st1l);iM:length(sxl);sl:[]/*(◆修正部分2)*/;
algebraic:true;for i:1 thru iM do(sx:x=rat(rhs(sxl[i])),print(sx),sl:endcons(sx,sl))/*(◆修正部分2)*/;
algebraic:false;sxl:sl;ansl:sl/*(◆修正部分2)*/;
SUJIMITI:"t=x+1と置くと、左辺は(   )となり、・・・"/*(◆修正部分3)*/;


◆コマンド番号20207
●解と係数の関係
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末5 20207 x^2-7*x-1=0の2解をap,btすると、2/ap,2/btを2解とする2次方程式は"/*(◆修正部分1)*/$
KOUSATU:"解と係数の関係により、ap+bt=・・・"/**/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
load(fourier_elim)$
load ("functs")$gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:quotient(e1,e2),hpe3:hipow(e3,x),e3l:[],for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:e20l*e3l[1],print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(e20l:cons(0,rest(e20l,-1)),e4l:e20l*e3l[1+i],print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l)),e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$
t2Kt(e3p,a,b):=block([e3,oj,ha,OJ,E3,Ha,F3,ctr,kM,PR,E4,pr,c,hb,axb,atb,se3,ans,e1,e2],
/**/e1:atb=a+b,e2:axb=a*b,e3:oj=e3p,
/**/ha:hipow(rhs(e3),a),
/**/OJ:[],E3:rhs(e3),Ha:ha,for i:Ha thru 0 step -1 do(
/**//**/F3:0,for j:i thru 0 step -1 do(F3:F3+coeff(coeff(E3,a,j),b,i-j)*a^j*b^(i-j)/*,print([i,j,F3])*/),
/**//**/OJ:endcons(F3,OJ),print(OJ)),
/**/kM:length(OJ),PR:[],
/**/for k:1 thru kM do(
/**//**/ctr:0,
/**//**/E4:oj=OJ[k],ha:hipow(rhs(E4),a),pr:E4,/*print(pr),*/
/**//**/while ha>0 and 20>ctr do(c:coeff(rhs(pr),a,ha),hb:hipow(c,b),
/**//**//**/if hb>0 then pr:lhs(pr)/axb^(hb)=expand(factor(rhs(pr))/(a*b)^(hb))
/**//**//**//**/else pr:lhs(pr)-coeff(rhs(pr),a,ha)*atb^ha=expand(rhs(pr)-coeff(rhs(pr),a,ha)*(a+b)^ha),
/**//**//**/ha:hipow(rhs(pr),a),print([pr,ha]),ctr:ctr+1),
/**//**/se3:solve(pr,lhs(E4)),print(se3),PR:endcons(se3[1],PR)),
/**/print(PR),ans:rhs(lsum(i,i,PR)))/*2文字の対称式の基本対称式変換(次数混在)e3:a^5+b^5+a^3+b^3;t2Kt(e3,a,b);atb=ap+bt,axb=ap*btのこと*/$

TEJUN:""$
El:[x=(-B+sqrt(B^2-4*A*C))/(2*A),x=(-B-sqrt(B^2-4*A*C))/(2*A)];D:B^2-4*A*C;KK:[atb=-B/A,axb=C/A];
e1:x^2-7*x-1=0;a:coeff(expand(lhs(e1)),x,2);b:coeff(expand(lhs(e1)),x,1);c:coeff(expand(lhs(e1)),x,0)/**/;
KK:subst([A=a,B=b,C=c],KK);atb:rhs(KK[1]);axb:rhs(KK[2]);
natb:2*atb/axb /*=2/ap+2/bt*/;naxb:4/axb /*=2/ap*2/bt*/;ne1:x^2-natb*x+naxb=0/*(◆修正部分2)*/;
ansl:[ne1];

KAKUNIN:"確認"/**/$
ksxl:solve(ne1,x);sxl:solve(e1,x);Ksxl:[x=2/rhs(sxl[1]),x=rhs(2/sxl[2])]; Ksxl:rat(Ksxl),algebraic:true;print([ksxl,Ksxl])/*(◆修正部分3)*/;
mes:"成立";if ratsimp(ksxl)#ratsimp(Ksxl) then mes:"不成立";kknnl:[ansl,ksxl,Ksxl,mes,"[ansl,新解,元解から指定の解,成立・不成立"]/*(◆修正部分3)*/;

KAITOU:[ansl,"解答"]/*解答*//**/$
SUJIMITI:"解と係数の関係により、a+b=(    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末5 20207 x^2-7*x-1=0の2解をap,btすると、ap^2,bt^2を2解とする2次方程式は"/*(◆修正部分1)*/$
e1:x^2-7*x-1=0;a:coeff(expand(lhs(e1)),x,2);b:coeff(expand(lhs(e1)),x,1);c:coeff(expand(lhs(e1)),x,0)/**/;
natb:atb^2-2*axb /*=ap^2+bt^2*/;naxb:axb^2 /*=ap^2*bt^2*/;ne1:x^2-natb*x+naxb=0/*(◆修正部分2)*/;
ksxl:solve(ne1,x);sxl:solve(e1,x);Ksxl:[x=rhs(sxl[1])^2,x=rhs(sxl[2])^2]; Ksxl:rat(Ksxl),algebraic:true;print([ksxl,Ksxl])/*(◆修正部分3)*/;
mes:"成立";if ratsimp(ksxl)#ratsimp(Ksxl) then mes:"不成立";kknnl:[ansl,ksxl,Ksxl,mes,"[ansl,新解,元解から指定の解,成立・不成立"]/*(◆修正部分3)*/;


◆コマンド番号20208
●高次方程式の解法
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末6 20208 x*(x+1)*(x+2)=2*3*4の解は"/*(◆修正部分1)*/$
KOUSATU:"左辺を展開し移項して、・・・"/*(◆修正部分1)*/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
le:x*(x+1)*(x+2);re:2*3*4;le:expand(le);e1:le-re=0;bl:". . . . . ";bdl:". . . . . ___________"/*(◆修正部分2)*/;
hpe:hipow(lhs(e1),x);a:coeff(lhs(e1),x,hpe);d:coeff(lhs(e1),x,0);dal:listify(divisors(a));ddl:listify(divisors(d))/*(◆修正部分2)*/;
iM:length(dal);jM:length(ddl);sxl:[];for i:1 thru iM do(for j:1 thru jM do(sx:j/i,if lhs(subst(x=sx,e1))=0 then sxl:endcons([i,j,sx],sxl)elseif lhs(subst(-x=sx,e1))=0 then sxl:endcons([i,-j,sx],sxl)))/*(◆修正部分2)*/;
print(sxl);e2:sxl[1][1]*x-sxl[1][2];e34l:ed2(expand(lhs(e1)),e2,bl,bdl);e3:elx(e34l[1],x)/*(◆修正部分2)*/;
sx2l:solve(e3=0,x);sxl:cons(x=sxl[1][3],sx2l);ansl:sxl/*(◆修正部分2)*/;

KAKUNIN:"確認"/**/$
kknnl:[ansl];iM:length(sxl);mes:"成立";for i:1 thru iM do(
/**/kle:subst(sxl[i],le),kre:subst(sxl[i],re),print([kle,kre]),
/**/if ratsimp(kle)#ratsimp(kre) then mes:"不成立");kknnl:endcons(mes,kknnl)$
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"左辺を展開すると、(   )となり、・・・"/*(◆修正部分3)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末6 20208 (x^2-x)^2-8*(x^2-x)+12=0の解は"/*(◆修正部分1)*/$
KOUSATU:"t=x^2-xと置いて、・・・"/*(◆修正部分1)*/;
le:(x^2-x)^2-8*(x^2-x)+12;re:0;le:expand(le);let:ratsubst(t,x^2-x,le);eqt:let=re/*(◆修正部分2)*/;
stl:solve(eqt,t);sx0l:subst([t=x^2-x],stl);sxl:solve(sx0l[1],x);sxl:append(sxl,solve(sx0l[2],x));iM:length(sxl);sl:[]/*(◆修正部分2)*/;
algebraic:true;for i:1 thru iM do(sx:x=rat(rhs(sxl[i])),print(sx),sl:endcons(sx,sl))/*(◆修正部分2)*/;
algebraic:false;sxl:sl;ansl:sl/*(◆修正部分2)*/;
SUJIMITI:"t=x^2-xと置くと、左辺は(   )となり、・・・"/*(◆修正部分3)*/;


◆コマンド番号20209
●高次方程式の解法
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末7 20209 3次方程式x^3-x^2+(a-6)*x-3*a=0で、aの値に関わらず存在する整数解は"/*(◆修正部分1)*/$
KOUSATU:"左辺aについて整理し、aの恒等式と考えると、・・・"/*(◆修正部分1)*/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
le:x^3-x^2+(a-6)*x-3*a;re:0;le:expand(le);e1:le-re=0;bl:". . . . . ";bdl:". . . . . ___________"/*(◆修正部分2)*/;
le:expand(le);le1:coeff(le,a,1);le2:coeff(le,a,0);sx1l:solve([le1=0,le2=0],x);ansl:sx1l[1]/*(◆修正部分2)*/;

KAKUNIN:"確認"/**/$
kknnl:[ansl];mes:"成立";for i:-3 thru 3 step 1/10 do(/*(◆修正部分3)*/
/**/kle:subst([x=rhs(ansl[1]),a=i],le),print([rhs(ansl[1]),i,kle])/*(◆修正部分3)*/,
/**/if ratsimp(kle)#ratsimp(re) then mes:"不成立");kknnl:endcons(mes,kknnl)/*(◆修正部分3)*/;
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)/*(◆修正部分3)*/$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"左辺を展開すると、(   )となり、・・・"/*(◆修正部分4)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末7 20209 3次方程式x^3-x^2+(a-6)*x-3*a=0で、解がすべて実数となるようなaの値の範囲は"/*(◆修正部分1)*/$
KOUSATU:"左辺はaに関わらずxの実数解を1つもつから、・・・"/*(◆修正部分1)*/;
le:x^3-x^2+(a-6)*x-3*a;re:0;e1:expand(le);e2:x-3;bl:". . . . . ";bdl:". . . . . ___________"/*(◆修正部分2)*/;
se34l:ed2(e1,e2,bl,bdl);e3:elx(se34l[1],x);A:coeff(e3,x,2);B:coeff(e3,x,1);C:coeff(e3,x,0);D:B^2-4*A*C/*(◆修正部分2)*/;
ansl:[fourier_elim([D>=0],[a])]/*(◆修正部分2)*/;
kknnl:[ansl];for i:-3 thru 3 step 1/10 do(/*(◆修正部分3)*/
/**/mes:"成立",kle:subst([a=i],(e2*e3)),sx2l:solve(kle,x)/*(◆修正部分3)*/,
/**/jM:length(sx2l),for j:1 thru jM do(if imagpart(rhs(sx2l[j]))#0 then(mes:"不成立")),print([i,kle,float(sx2l),mes]))/*(◆修正部分3)*/;
kknnl:endcons("[ansl]",kknnl)$print(kknnl)/*(◆修正部分3)*/$
SUJIMITI:"左辺はaに関わらずxの実数解3をもつから、(   )で割り切れ、・・・"/*(◆修正部分4)*/;


◆コマンド番号20210
●複素数の方程式
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末8 20210 a,b実数の複素数z=a+b*%iを2乗すると5+12*%iとなる。zは"/**/$
KOUSATU:"実数a,bについての方程式にして、・・・"/**/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ*/$

TEJUN:""$
declare(a,real,b,real);z:a+b*%i;e0:5+12*%i;e:z^2=e0;atb:a+b;axb:a*b;
ler:realpart(z^2);lei:imagpart(z^2);rer:realpart(e0);rei:imagpart(e0);
a2tb2:atb^2-2*axb;A2tb2:aTb^2-2*aXb;a2tb21:expand(a2tb2);A2tb21:expand(A2tb2);
ler2:ler^2;ler21:expand(ler2);ler22:a2tb21^2-4*axb^2;Ler22:A2tb21^2-4*aXb^2;ler23:expand(ler22);
Ler22;rer^2;Lei:2*aXb;rei;sTXl:solve([Ler22=rer^2,Lei=rei],[aTb,aXb]);
sab3l:solve(subst([aTb=atb,aXb=axb],sTXl[3]),[a,b]); sab4l:solve(subst([aTb=atb,aXb=axb],sTXl[4]),[a,b]);
sabl:append(sab3l,sab4l);iM:length(sabl);sab1l:[]; for i:1 thru iM do(cz:ratsimp(subst(sabl[i],z^2)),print([cz,e0]),if cz=e0 then (sab1l:endcons(sabl[i],sab1l),print(sab1l))
);
ansl:sab1l;

KAKUNIN:"確認"/**/$
kknnl:[ansl];mes:"成立";iM:length(ansl);for i:1 thru iM do(/**/
/**/kle:subst(ansl[i],ler+lei*%i),kre:subst(ansl[i],rer+rei*%i),print([i,kle,kre])/**/,
/**/if ratsimp(kle)#ratsimp(kre) then mes:"不成立");kknnl:endcons(mes,kknnl)/**/;
kknnl:endcons("[ansl,成立・不成立]",kknnl)$print(kknnl)/**/$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"実数a,bについての方程式は(    ,    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行し、結果を考察せよ。


◆コマンド番号20211
●3次方程式の解と係数の関係
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末9 20211 3次方程式x^3-x^2-x-m=0の3つの解が2,ap,btのとき、mの値はは"/*(◆修正部分1)*/$
KOUSATU:"解2を代入して、・・・"/*(◆修正部分1)*/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ bl:". . . . . ";bdl:". . . . . ---------"*/$

TEJUN:""$
le:x^3-x^2-x-m;re:0;sxl:[x=2,x=ap,x=bt];
le1:subst(sxl[1],le);sml:solve(le1=0,m);ansl:sml/*(◆修正部分2)*/;

KAKUNIN:"確認"/**/$
kknnl:[ansl,x=2,0];mes:"成立";iM:length(ansl);for i:1 thru iM do(/*(◆修正部分3)*/
/**/kle:subst(ansl[i],le),kre:subst(ansl[i],re),print([i,kle,kre])/*(◆修正部分3)*/,
/**/skle:subst(x=2,kle),if ratsimp(skle)#ratsimp(kre) then mes:"不成立");kknnl:endcons(mes,kknnl)/*(◆修正部分3)*/;
kknnl:endcons("[ansl,sx,re,成立・不成立]",kknnl)$print(kknnl)/*(◆修正部分3)*/$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"実数a,bについての方程式は(    ,    )となり、・・・"/*(◆修正部分4)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末9 20211 3次方程式x^3-x^2-x-m=0の3つの解が2,ap,btのとき、2*ap*btの値は"/*(◆修正部分1)*/$
KOUSATU:"解2からmを求めて、因数定理により、・・・"/*(◆修正部分1)*/;
e1:subst(m=2,le);e2:x-rhs(sxl[1]);bl:". . . . . ";bdl:". . . . . ---------"/*(◆修正部分2)*/;
e34:ed2(e1,e2,bl,bdl);e3:elx(e34[1],x);atb:-coeff(e3,x,1);axb:coeff(e3,x,0);s2ab:2*axb/*(◆修正部分2)*/;
ansl:[s2ab,e3,"[2ab,e3]"]/*(◆修正部分2)*/;
kknnl:[ansl];mes:"成立";kle:e3;kre:re;print([kle,kre])/*(◆修正部分3)*/;
ksxl:solve(kle=kre,x);k2ab:2*rhs(ksxl[1])*rhs(ksxl[2])/*(◆修正部分3)*/;
if ratsimp(k2ab)#ratsimp(s2ab) then mes:"不成立";kknnl:endcons(mes,kknnl)/*(◆修正部分3)*/;
kknnl:endcons("[成立・不成立]",kknnl)$print(kknnl)/*(◆修正部分3)*/$
SUJIMITI:"解2からmを求めて、因数定理により(     )で割算実行すると、・・・"/*(◆修正部分4)*/;


◆コマンド番号20212
●2次方程式の解と係数の関係
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末10 20212 a,bは0でない定数で、2次方程式x^2+a*x+b=0の2つの解がap,btとし、2次方程式x^2+b*x+2*a=0の解がap+bt,ap*btのとき、a,bは"/**/$
KOUSATU:"解と係数の関係から、・・・"/**/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ bl:". . . . . ";bdl:". . . . . ---------"*/$

TEJUN:""$
jk1:a#0;jk2:b#0;le1:x^2+a*x+b;re1:0;e12:atb=-a;e13:axb=b;le2:x^2+b*x+2*a;re2:0;e22:-b=atb+axb;e23:2*a=atb*axb;
e221:subst([e12,e13],e22);e231:subst([e12,e13],e23);sab0l:solve([e221,e231],[a,b]);iM:length(sab0l);sabl:[];
for i:1 thru iM do(if subst(sab0l[i],jk1)and subst(sab0l[i],jk2) then sabl:endcons(sab0l[i],sabl));print(sabl);ansl:sabl;

KAKUNIN:"確認"/**/$
kknnl:[ansl[1]];ke1:subst(ansl[1],le1=re1);ksab1l:solve(ke1,x);ke2:subst(ansl[1],le2=re2);ksab2l:solve(ke2,x);
ksabl:[x=expand(rhs(ksab1l[1]*ksab1l[2])),x=rhs(ksab1l[1]+ksab1l[2])];if ksabl=ksab2l then mes:"成立" else mes:"不成立";
kknnl:endcons(mes,kknnl);

KAITOU:ansl/*解答*//**/$
SUJIMITI:"解と係数の関係から、第2式の解の和は(    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行し、結果を考察せよ。


◆コマンド番号20213
●3次方程式の解と係数の関係
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末11 20213 a,bは定数で、3次方程式x^3+(a-1)*x^2+(1-a)*x+b=0の実数解がx=1だけのとき、aの値の範囲とbの値は"/**/$
KOUSATU:"実数解1からbを求め、割り算実行して、・・・"/**/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ bl:". . . . . ";bdl:". . . . . ---------"*/$

TEJUN:""$
decrale(a,real,b,real);le1:x^3+(a-1)*x^2+(1-a)*x+b;re1:0;e1:le1=0;e2:x-1;bl:". . . . . ";bdl:". . . . . ---------";
e34l:ed2(le1,e2,bl,bdl);sbl:solve(e34l[2][4]=0,b);e3l:e34l[1];e3:elx(e3l,x);D:e3l[2]^2-4*e3l[1]*e3l[3];
sal:fourier_elim([0>=D],[a]);ansl:[sal,sbl,"[a,b]"];

KAKUNIN:"確認"/**/$
ke1:subst(ansl[2],le1=re1);kknnl:[];for i:-3 thru 3 step 1/10 do(mes:"虚数解なし",ke2:subst(a=i,ke1),ksxl:float(solve(ke2,x)),if imagpart(rhs(ksx[1]))#0 then mes:"虚数解あり",kknnl:endcons([i,ksxl,imagpart(rhs(ksxl[1])),mes],kknnl));
print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"実数解1からbを求め、x-1で割り算実行すると、商は(    )となり、・・・"/**/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行し、結果を考察せよ。


◆コマンド番号20214
●3次方程式の解と係数の関係
●●●●●●●●●●●●●●●●
kill(all) /**/$
ordergreat(X,Y,Z,x,y,z,A,B,C,a,b,c) /* できるだけ、X,Y,Z,x,y,z,A,B,C,a,b,cの順で */;powerdisp:false /* 降べきの順にして */$
MONDAI:"・章末13 20214 a,bは実数で、3次方程式x^3+a*x^2+b*x+2=0が1-%iを解に持つとき、a,bの値の範囲は"/*(◆修正部分1)*/$
KOUSATU:"x=1-%iを代入して、・・・"/*(◆修正部分1)*/;

KANSUU:"";
ni(n):=n!/*nの階乗*/$
nCrl(n,r):=ni(n)/(ni(r)*ni(n-r))/*nCrを文字変数で表現*/$
nCr(n,r):=block([N,i],N:1,for i:1 thru r do(N:N*(n-i+1)/(i)),N:N)/*nCrの数値表現(n,rは数値)*/$
lng(n,list,sw):=block([D,i,iM,V],D:true,iM:length(list),
/**/for i:1 thru iM do(if (sw="N"and n=list[i]) or (sw="G" and list[i]>=n ) or (sw="L"and n>=list[i]) then D:false),V:D)/*[スイッチごとにTF判定]*/$
Xr(list,sw):=block([r,i,j],/*print("nHr",lA,length(lA[1]),r),*/ /**/r:length(list),
/**/while r>length(lA[1]) do(/*print(length(lA[1]),r),*/
/**//**/iM:length(lA),lEA:[],/*print(iM),*/
/**//**/for i:1 thru iM do(
/**//**//**/lL:lA[i],/*print("listi",list[i]),*/
/**//**//**/for j:1 thru list[length(lA[iM])+1] do(/*print(iM,length(lA[iM])+1 ),*/
/**//**//**//**/if lng(j,lL,sw)=true then lEA:endcons(endcons(j,lL),lEA)/*,print("lEA0",lL,lEA)*/)),
/**//**/lA:lEA,print("lA",lA,length(lA))))/*list:[[1,d],[d+1,d+j]],1つ目1~d,2つ目d+1~d+jで作成、スイッチsw、1324>>"N",1234>>"G",4321>>"L",1122>>"A",順列・組合せ*/$
load(fourier_elim)$
load ("functs")$
gcm(n1,n2):=n1*n2/lcm(n1,n2)/*n1,n2の最大公倍数*/$
quon(n1,n2):=block([qn,rn],rn:mod(n1,n2),qn:quotient(n1-rn,n2))/*n1のn2による整商*/$
exd(e1,e2,m):=block([k,kM,e11,e21,e,bL],e11:rat(e1,m),e21:rat(e2,m),e:rat(e11*e21,m),kM:hipow(e,m),
/**/print(e11),print(e21),print("----------各次数の係数に注目して") ,
/**/bL:["","...","......",".........","............",
/**/"...............","..................",".....................","........................"] /**/,
/**/for k:0 thru kM do(
/**//**/if kM>k then print(bL[k+1],coeff(e,m,(kM-k))*m^(kM-k))
/**//**//**/else print(bL[k+2],coeff(e,m,(kM-k))*moji^(kM-k))
/**//**/) /* "xの各次数の項を求めて(直前の3式から求め)" */,
/**/print("---------------------------------したがって") ,print(e),e:e)/*e1,e2の、mに着目した掛け算実行*/$
ed(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i,sxl],hpe1:hipow(e1,x),e1l:[],for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/sxl:solve(e2,x),e20l:e2l,for i:1 thru hpe1-hpe2 do e20l:endcons(0,e20l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),e4l:expand(e20l*e3l[1]),print(bl,e4l),print(bdl),
/**/e1l:e1l-e4l,print(bl,e1l),
/**/for i:1 thru hpe1-hpe2 do(
/**//**/e20l:cons(0,rest(e20l,-1)),e4l:expand(e20l*e3l[1+i]),print(bl,e4l),print(bdl),e1l:e1l-e4l,
/**//**/print(bl,e1l)),
/**/e1l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
ed2(e1,e2,bl,bdl):=block([hpe1,hpe2,hpe3,e1l,e2l,e3l,e4l,i],hpe1:hipow(e1,x),e1l:[],
/**/for i:0 thru hpe1 do e1l:cons(coeff(e1,x,i),e1l),print(e1l),
/**/hpe2:hipow(e2,x),e2l:[],for i:0 thru hpe2 do e2l:cons(coeff(e2,x,i),e2l),print(e2l),
/**/e3:expand(quotient(e1,e2)),hpe3:hipow(e3,x),e3l:[],
/**/for i:0 thru hpe3 do e3l:cons(coeff(e3,x,i),e3l),print(e3l),print(" "),
/**/e20l:e2l,e21l:e2l*e3l[1],
/**/for i:1 thru hpe1-hpe2 do (e20l:endcons(0,e20l),e21l:endcons(e2l[2]*e3l[i+1],e21l)),print(e21l),
/**/print(bl,e3l),print(bdl),print(e2l,")",e1l),
/**/e4l:expand(e21l*e3l[1]),print(bl,e4l),print(bdl),e1l:e1l-e4l,print(bl,e1l),
/**/print("///割算近接組立除法"),e3l:[e3l,e1l])/*e1のe2による割り算実行、結果はリスト*/$
elx(el,x):=block([i,iM,e],iM:length(el),e:0,for i:1 thru iM do(e:e+el[i]*x^(iM-i)),e:e)/*係数リストをxの文字式へ bl:". . . . . ";bdl:". . . . . ---------"*/$

TEJUN:""$
decrale(a,real,b,real);le1:x^3+a*x^2+b*x+2;re1:0;e1:le1=re1;sx1:x=1-%i/*(◆修正部分2)*/;
le2:subst(sx1,le1);sabl:solve([realpart(le2)=0,imagpart(le2)=0],[a,b]);ansl:sabl/*(◆修正部分2)*/;

KAKUNIN:"確認"/**/$
kle1:subst(ansl,le1);kle1x1:ratsimp(subst(sx1,kle1))/*(◆修正部分3)*/;
mes:"成立";if kle1x1#0 then mes:"不成立";kknnl:[ansl,kle1,mes,"[ansl,subst(ansl,le1),成立・不成立]"]/*(◆修正部分3)*/;
print(kknnl)$

KAITOU:ansl/*解答*//**/$
SUJIMITI:"x=1-%iを代入すると、左辺は(    )となり、・・・"/*(◆修正部分4)*/;
FURIKAERI:"(例:具体的な数値で、推論結果の確認など、実行者の振り返りを書きこむこと)"$

print(MONDAI)$
print(SUJIMITI)$
print(KAITOU)$
print(FURIKAERI)$

◎上のMaximaコマンドを実行せよ。
◎上のコマンドを、次により修正して実行し、結果を比較して考察せよ。
MONDAI:"・章末13 20214 a,bは実数で、3次方程式x^3+a*x^2+b*x+2=0が1-%iを解に持つとき、他の解は"/*(◆修正部分1)*/$
KOUSATU:"求めたa,bを方程式に代入して、x-(1-%i)で割り算実行すると、・・・"/*(◆修正部分1)*/;
decrale(a,real,b,real);le1:x^3+a*x^2+b*x+2;re1:0;e1:le1=re1;sx1:x=1-%i;sabl:[a=-1,b=0]/*(◆修正部分2)*/;
le2:subst(sabl,le1);le22:x-(1-%i);le234l:ed2(le2,le22,". . . . . . .",". . . . . . .---------")/*(◆修正部分2)*/;
le23:elx(le234l[1],x);sxl:solve(le23,x);ansl:sxl/*(◆修正部分2)*/;
iM:length(ansl);mes:"成立";for i:1 thru iM do(if expand(subst(ansl[i],le2))#0 then(print(subst(ansl[i],le2)), mes:"不成立"))/*(◆修正部分3)*/;
kknnl:[ansl,mes,"[ansl,成立・不成立]"]/*(◆修正部分3)*/;
SUJIMITI:"x-(1-%i)で割り算実行すると、商は(    )となり、・・・"/*(◆修正部分4)*/;

コメント:3次方程式a*x^3+b*x^2+c*x+d=0の解をap,bt,gmとすると、ap+bt+gm=-b/a,ap*bt+bt*gm+gm*ap=c/a,ap*bt*gm=-d/aとなる。
 また、実係数のn次方程式で、p+q*%i (p,qは実数)が解なら、p-q*%iも解となる。
 以上の2点から、(1-%i)*(1+%i)*x3=-2となり、x3=-1,x2=1+%i,a=-2,b=0が直ちにわかる。