(* 12-04 *)

(* Require XMLgen_MC.nb ver >=0.04 *)
SetDirectory[NotebookDirectory[]];
<<XMLgenMC.mx;
TTS[mt_]:=ToString[TeXForm[StandardForm[mt]]];
TOT[mt_]:=ToString[OneLineTeXForm[mt]];
TOTT[mt_]:=ToString[OneLineTeXForm[Transpose[mt]]];
TOC[mt_,c_]:=TOTT[{Transpose[mt][[c]]}];
TTD[r_]:=StringReplace[TT[r],"\\frac"->"\\dfrac"];
Rnz[m_]:=(RandomInteger[m]+1)*(2*RandomInteger[1]-1); (* \\pm 1,\pm2,...,\pm(m+1) *)
Rpos[m_]:=RandomInteger[m]+1; (* 1,2,...,m+1 *)
Rbtw[m_]:=RandomInteger[2m]-m;
TTC[A_,n_]:=TOTT[{(Transpose[A])[[n]]}];
Col[A_,n_]:=Transpose[{A[[Range[Length[A]],n]]}];
ColCat[CL_]:=Join@@@(Transpose@CL);
PtString[M_]:=StringReplace[ToString[M],{"{"->"(","}"->")"}];
Title="逆行列の定義";
Numbering="abc";
GeneralFeedback="\\(n\\)次正方行列\\(A\\)の逆行列(\\(A^{-1}\\))とは,";
GeneralFeedback=GeneralFeedback<>"\\(AB=BA=E_n\\)(単位行列)となる行列\\(B\\)のこと.";
GeneralFeedback=GeneralFeedback<>"逆行列は存在すればただ1つで, 零行列以外にも逆行列を持たない例がある.";
SELNUM=4;NUM=200;
DiagonalMatrixQ[M_]:=Module[{i,j},For[i=1,i≤Length[M],i++,
For[j=1,j≤Length[M],j++,If[i≠j &&M[[i,j]]≠0,Return[False]]]];Return[True]];

DiagonalMatrixQ[{{1,0,0},{0,-2,0},{0,1,3}}]

(* Select matrices satisfying some mapping conditions *)
QtList={}; For[ct=1,ct≤500,ct++,
sz=RandomChoice[{2,2,2,2,3,3,3}];MAL={};
MA1=IdentityMatrix[sz];MA1[[1,2]]=1;MA1[[sz,1]]=1;MAL=Append[MAL,MA1];
MA1=DiagonalMatrix[RandomSample[Range[-3,5],sz]];MAL=Append[MAL,MA1];
a=Table[Rpos[1],3];MA1=Table[Rpos[2]*a,3];MAL=Append[MAL,MA1];
MA1=Table[Table[Rnz[1],sz],sz];
While[Abs[Det[MA1]]!=1,MA1=Table[Table[Rnz[1],sz],sz]];
MAL=Append[MAL,MA1];
QtList=Append[QtList,{1,{sz,RandomChoice[MAL]}}];
QtList=DeleteDuplicates[QtList]];QtList=RandomSample[QtList,NUM];Length[QtList]

QtextF[mm_]:=Module[{Cn,sz,MA},{Cn,{sz,MA}}=QtList[[mm]];
Return["行列\\(A="<>TOT[MA]<>"\\)の逆行列について正しいものを選びなさい."]];

QtextF[7]

CListF[mm_]:=Module[{Cn,sz,MA,d,MB,Msg,fs,ret={}},
{Cn,{sz,MA}}=QtList[[mm]];fs="正解です.";
d=Det[MA];
If[d==0,Msg="逆行列は存在しない.",Msg="\\(A^{-1}="<>TOT[Inverse[MA]]<>"\\)"];
ret=Append[ret,{Msg,fs}];
Return[RandomSample[ret,Cn]]];

ICListF[mm_]:=Module[{Cn,sz,MA,d,MA1,PatL={},fs1,fs2,fs3,fs4,fs5,ret={}},
{Cn,{sz,MA}}=QtList[[mm]];d=Det[MA];
fs1="どのような行列をかけても単位行列にならない場合は逆行列がありません.";
fs1=fs1<>"例．\\(\\begin{pmatrix} 1 & 1 \\ 2 & 2 \\end{pmatrix} \\)";
fs2="逆行列の定義をおさらいしよう.";
fs3="転置ではありません.";
fs4="逆行列は同じサイズです.";
fs5="逆行列は存在します!";
(* fs2/fs3 *)
If[DiagonalMatrixQ[MA],Append[PatL,{-MA,fs2}],Append[PatL,{Transpose[MA],fs3}]];
(* fs3 *)
MA1=Table[Table[MA[[i,j]],{j,2,sz}],{i,2,sz}];
PatL=Append[PatL,{MA1,fs4}];
MA1=Table[Table[Rnz[3],{j,1,sz-1}],{i,1,sz-1}];
PatL=Append[PatL,{MA1,fs4}];
(* fs2/Random *)
MA1=Table[Table[Rnz[2],sz],sz];
PatL=Append[PatL,{MA1,fs2}];
For[ct=1,ct≤Length[PatL],ct++,
ret=Append[ret,{"\\(A^{-1}="<>TOT[PatL[[ct,1]]]<>"\\)",PatL[[ct,2]]}]];
(* fs5 *)
If[d≠0,ret=Append[ret,{"逆行列は存在しない.",fs5}]];
Return[RandomSample[ret,SELNUM-Cn]]];

QtextF[3]

CListF[5]

GenerateMCxml[DFname[],"LA/12-04."<>Title<>"(MC1)",Title,NUM,"true",QtextF,CListF,ICListF]

Col[{{1,2},{3,4}},1]

Join[{a,b},{c,d}]

RandomSample[Append[{a,b},c],2]

RandomSample[Range[3],2]

MA={{2,4,6},{3,6,9},{5,10,15}}

GCD[Flatten[MA[[2]]]]

? GCD

? Flatten

? GCD

GCD[MA[[2,1]],MA[[2,2]],MA[[2,3]]]

sz=3

? List

DM=DiagonalMatrix[RandomSample[Join[Range[-4,-1],Range[2,5]],sz]]

DM

DM

s

a=Table[Rpos[1],3];Table[Rnz[1]*a,3]