# Improved a code to work once (no need to repeat)

If I have the matrix W size (4 x 4)

W = Array[Subscript[a, ##] &, {4, 4}]


$W=\left( \begin{array}{cccc} a_{1,1} & a_{1,2} & a_{1,3} & a_{1,4} \\ a_{2,1} & a_{2,2} & a_{2,3} & a_{2,4} \\ a_{3,1} & a_{3,2} & a_{3,3} & a_{3,4} \\ a_{4,1} & a_{4,2} & a_{4,3} & a_{4,4} \\ \end{array} \right)$

I use this code

With[{inds = DeleteCases[Range@Length@W, 2]},
Table[W[[i, j]] + If[i != j, 1, 0] W[[i, 2]] W[[2, j]], {i,
inds}, {j, inds}]]
% // MatrixForm


$F=\left( \begin{array}{ccc} a_{1,1} & a_{1,3}+a_{1,2} a_{2,3} & a_{1,4}+a_{1,2} a_{2,4} \\ a_{3,1}+a_{2,1} a_{3,2} & a_{3,3} & a_{2,4} a_{3,2}+a_{3,4} \\ a_{4,1}+a_{2,1} a_{4,2} & a_{2,3} a_{4,2}+a_{4,3} & a_{4,4} \\ \end{array} \right)$

I need to repeat this code again to get a 2x2 matrix

With[{inds = DeleteCases[Range@Length@F, 2]},
Table[F[[i, j]] + If[i != j, 1, 0] F[[i, 2]] F[[2, j]], {i,
inds}, {j, inds}]]
% // MatrixForm


$\scriptsize D=\left( \begin{array}{cc}a_{1,1} & a_{1,4}+a_{1,2}a_{2,4}+\left(a_{1,3}+a_{1,2}a_{2,3}\right)\left(a_{2,4}a_{3,2}+a_{3,4}\right)\\ a_{4,1}+a_{2,1}a_{4,2}+\left(a_{3,1}+a_{2,1}a_{3,2}\right)\left(a_{2,3}a_{4,2}+a_{4,3}\right) & a_{4,4} \\ \end{array} \right)$

then apply

mi = Expand[Part[D, 1, 2]]


$a_{1,4}+a_{1,2} a_{2,4}+a_{1,3} a_{2,4} a_{3,2}+a_{1,2} a_{2,3}a_{2,4}a_{3,2}+a_{1,3} a_{3,4}+a_{1,2} a_{2,3} a_{3,4}$

Is there a way to write this code in the form of a program executed once without the need to repeat to make in general.

Such as matrix 5x5 we need redundancy 3 times to get 2x2 and the application of the condition

ClearAll[f]
f[m_, r_] :=  Module[{inds = DeleteCases[Range @ Length @ m, r]},
Table[m[[i, j]] + If[i != j, 1, 0] m[[i, r]] m[[r, j]], {i, inds}, {j, inds}]]

f[W, 2] // TeXForm


$\left( \begin{array}{ccc} a_{1,1} & a_{1,3}+a_{1,2} a_{2,3} & a_{1,4}+a_{1,2} a_{2,4} \\ a_{3,1}+a_{2,1} a_{3,2} & a_{3,3} & a_{2,4} a_{3,2}+a_{3,4} \\ a_{4,1}+a_{2,1} a_{4,2} & a_{2,3} a_{4,2}+a_{4,3} & a_{4,4} \\ \end{array} \right)$

Nest[f[#, 2] &, W, 2] // TeXForm


$\scriptsize \left( \begin{array}{cc} a_{1,1} & a_{1,4}+a_{1,2} a_{2,4}+\left(a_{1,3}+a_{1,2} a_{2,3}\right) \left(a_{2,4} a_{3,2}+a_{3,4}\right) \\ a_{4,1}+a_{2,1} a_{4,2}+\left(a_{3,1}+a_{2,1} a_{3,2}\right) \left(a_{2,3} a_{4,2}+a_{4,3}\right) & a_{4,4} \\ \end{array} \right)$

• For W = Array[Subscript[a, ##] &, {5, 5}] I need to repeat three times – Emad kareem Jul 11 '17 at 17:12
• @Emad, use Nest[f[#, 2] &, W, 3] – kglr Jul 11 '17 at 17:13
• I put W = Array[Subscript[a, ##] &, {n = 5, n = 5}] .The condition is Nest[f[#, 2] &, W, n - 2] to be in general – Emad kareem Jul 11 '17 at 17:25
• How to apply this condition ** mi = Expand[Part[qq, 1, 2]] **with your answer in general – Emad kareem Jul 11 '17 at 17:35
• @Emad, if qq is defined as qq =Nest[f[#, 2] &, W, n - 2], just use mi = Expand[Part[qq, 1, 2]] – kglr Jul 11 '17 at 17:52
func = ExpandAll[Drop[#, {2, 2}, {2, 2}] + ReplacePart[Outer[Times, #, #2] & @@
Drop[{#[[All, 2]], #[[2]]}, None, {2, 2}], {a_, a_} -> 0]] &;
Nest[func, W, 2] // MatrixForm


$\scriptsize \left( \begin{array}{cc} a_{1,1} & a_{1,4}+a_{1,2} a_{2,4}+a_{1,3} a_{2,4} a_{3,2}+a_{1,2} a_{2,3} a_{2,4} a_{3,2}+a_{1,3} a_{3,4}+a_{1,2} a_{2,3} a_{3,4} \\ a_{4,1}+a_{2,1} a_{4,2}+a_{2,3} a_{3,1} a_{4,2}+a_{2,1} a_{2,3} a_{3,2} a_{4,2}+a_{3,1} a_{4,3}+a_{2,1} a_{3,2} a_{4,3} & a_{4,4} \\ \end{array} \right)$