2
$\begingroup$

Sir i am try to to make a general program that extract different sub matrix that have elements at different positions., here is may program that is well working .. but now i want to transform this program in a general one that take my index of matrix one by one and display a desired matrix here i extracted a one element D13,,,now i want to define input as d=[1,3,16], i want that program picks a index of yhe matrix yourself

 m1 = ConstantArray[0, {2, 2}];
    For[i = 1; ii = 1, i <= 3, i += 2; ii += 1,
      For[j = 1; jj = 1, j <= 3, j += 2; jj += 1,
       m1[[ii, jj]] = \[CurlyCapitalUpsilon][[i, j]]]];
    m1 // MatrixForm
    m2 = ConstantArray[0, {2, 2}];
    For[i = 1; ii = 1, i <= 3, i += 2; ii += 1,
      For[j = 9; jj = 1, j <= 11, j += 2; jj += 1,
       m2[[ii, jj]] = \[CurlyCapitalUpsilon][[i, j]]]];
    m2 // MatrixForm
    m3 = ConstantArray[0, {2, 2}];
    For[i = 9; ii = 1, i <= 11, i += 2; ii += 1,
      For[j = 1; jj = 1, j <= 3, j += 2; jj += 1,
       m3[[ii, jj]] = \[CurlyCapitalUpsilon][[i, j]]]];
    m3 // MatrixForm
    m4 = ConstantArray[0, {2, 2}];
    For[i = 9; ii = 1, i <= 11, i += 2; ii += 1,
      For[j = 9; jj = 1, j <= 11, j += 2; jj += 1,
       m4[[ii, jj]] = \[CurlyCapitalUpsilon][[i, j]]]];
    m4 // MatrixForm
    ArrayFlatten[{{m1, m2}, {m3, m4}}] // MatrixForm
{{1 + 2 \[Mu], 0, 0, 0}, {0, 1 + 2 \[Mu], 0, 0}, {0, 0, 1 + 2 \[Mu], 
  0}, {0, 0, 0, 1 + 2 \[Mu]}}
$\endgroup$
2
  • 2
    $\begingroup$ The question seems incomplete. What is D13 ? And also we cannot evaluate your code without knowing what [CurlyCapitalUpsilon] is. Finally what exactly do you want as the result ? Please make it clear. $\endgroup$
    – Lotus
    Jul 18 '18 at 8:58
  • $\begingroup$ [CurlyCapitalUpsilon mean curly brackets here D13 is a sub matrix that have index 13... actually i want to make a program that extract sub matrix by just give index $\endgroup$ Jul 18 '18 at 9:26
1
$\begingroup$

Your code produces the same output as the following simpler code:

ϒ[[{1, 3, 9, 11}, {1, 3, 9, 11}]]

Update: my understanding of

... 13 is a one 4*4 matrix just as above in my program, 14 is also a 4*4 matrix and 16 an15 is also a 4*4 matrix

is that we are given an indexed set of 4X4 submatrices, and we want to use the submatrix index to extract elements from the main matrix ϒ.

We make a list of rules associating a submatrix index to the rows and column indices in the main matrix:

submatrixindices = Range[14]; 
rowcolumnindices = RandomChoice[Range[15], {14, 2, 4}];
submatindextorowscolsrule = Thread[submatrixindices -> rowcolumnindices];

and define a function extractSubmat[m, sm, rules] that, for given submatrix index sm and rules mapping submatrix indices to row and column indices for m, returns the corresponding elements from matrix m

extractSubmat[m_, sm_, rules_] := m[[## & @@ (sm /. rules)]];

Example:

ϒ = Array[a, {15, 15}];
ϒ // MatrixForm // TeXForm

$\tiny \left( \begin{array}{ccccccccccccccc} a_{1,1} & a_{1,2} & a_{1,3} & a_{1,4} & a_{1,5} & a_{1,6} & a_{1,7} & a_{1,8} & a_{1,9} & a_{1,10} & a_{1,11} & a_{1,12} & a_{1,13} & a_{1,14} & a_{1,15} \\ a_{2,1} & a_{2,2} & a_{2,3} & a_{2,4} & a_{2,5} & a_{2,6} & a_{2,7} & a_{2,8} & a_{2,9} & a_{2,10} & a_{2,11} & a_{2,12} & a_{2,13} & a_{2,14} & a_{2,15} \\ a_{3,1} & a_{3,2} & a_{3,3} & a_{3,4} & a_{3,5} & a_{3,6} & a_{3,7} & a_{3,8} & a_{3,9} & a_{3,10} & a_{3,11} & a_{3,12} & a_{3,13} & a_{3,14} & a_{3,15} \\ a_{4,1} & a_{4,2} & a_{4,3} & a_{4,4} & a_{4,5} & a_{4,6} & a_{4,7} & a_{4,8} & a_{4,9} & a_{4,10} & a_{4,11} & a_{4,12} & a_{4,13} & a_{4,14} & a_{4,15} \\ a_{5,1} & a_{5,2} & a_{5,3} & a_{5,4} & a_{5,5} & a_{5,6} & a_{5,7} & a_{5,8} & a_{5,9} & a_{5,10} & a_{5,11} & a_{5,12} & a_{5,13} & a_{5,14} & a_{5,15} \\ a_{6,1} & a_{6,2} & a_{6,3} & a_{6,4} & a_{6,5} & a_{6,6} & a_{6,7} & a_{6,8} & a_{6,9} & a_{6,10} & a_{6,11} & a_{6,12} & a_{6,13} & a_{6,14} & a_{6,15} \\ a_{7,1} & a_{7,2} & a_{7,3} & a_{7,4} & a_{7,5} & a_{7,6} & a_{7,7} & a_{7,8} & a_{7,9} & a_{7,10} & a_{7,11} & a_{7,12} & a_{7,13} & a_{7,14} & a_{7,15} \\ a_{8,1} & a_{8,2} & a_{8,3} & a_{8,4} & a_{8,5} & a_{8,6} & a_{8,7} & a_{8,8} & a_{8,9} & a_{8,10} & a_{8,11} & a_{8,12} & a_{8,13} & a_{8,14} & a_{8,15} \\ a_{9,1} & a_{9,2} & a_{9,3} & a_{9,4} & a_{9,5} & a_{9,6} & a_{9,7} & a_{9,8} & a_{9,9} & a_{9,10} & a_{9,11} & a_{9,12} & a_{9,13} & a_{9,14} & a_{9,15} \\ a_{10,1} & a_{10,2} & a_{10,3} & a_{10,4} & a_{10,5} & a_{10,6} & a_{10,7} & a_{10,8} & a_{10,9} & a_{10,10} & a_{10,11} & a_{10,12} & a_{10,13} & a_{10,14} & a_{10,15} \\ a_{11,1} & a_{11,2} & a_{11,3} & a_{11,4} & a_{11,5} & a_{11,6} & a_{11,7} & a_{11,8} & a_{11,9} & a_{11,10} & a_{11,11} & a_{11,12} & a_{11,13} & a_{11,14} & a_{11,15} \\ a_{12,1} & a_{12,2} & a_{12,3} & a_{12,4} & a_{12,5} & a_{12,6} & a_{12,7} & a_{12,8} & a_{12,9} & a_{12,10} & a_{12,11} & a_{12,12} & a_{12,13} & a_{12,14} & a_{12,15} \\ a_{13,1} & a_{13,2} & a_{13,3} & a_{13,4} & a_{13,5} & a_{13,6} & a_{13,7} & a_{13,8} & a_{13,9} & a_{13,10} & a_{13,11} & a_{13,12} & a_{13,13} & a_{13,14} & a_{13,15} \\ a_{14,1} & a_{14,2} & a_{14,3} & a_{14,4} & a_{14,5} & a_{14,6} & a_{14,7} & a_{14,8} & a_{14,9} & a_{14,10} & a_{14,11} & a_{14,12} & a_{14,13} & a_{14,14} & a_{14,15} \\ a_{15,1} & a_{15,2} & a_{15,3} & a_{15,4} & a_{15,5} & a_{15,6} & a_{15,7} & a_{15,8} & a_{15,9} & a_{15,10} & a_{15,11} & a_{15,12} & a_{15,13} & a_{15,14} & a_{15,15} \\ \end{array} \right)$

Column[{Row[{"submatrix : ", #}], 
     Row[{"row column indices : ", # /. submatindextorowscolsrule}] , 
     MatrixForm@extractSubmat[ϒ, #, submatindextorowscolsrule]}] & /@ {10, 13, 6, 9} // Column[#, Frame -> All] &

enter image description here

$\endgroup$
6
  • $\begingroup$ Right but i want to make a general program that evaluate many matrix just by addind index 13 ,14,16,15, $\endgroup$ Jul 18 '18 at 9:22
  • $\begingroup$ @muhammadasif, does ϒ[[#, #]] & @{13,14,16,15} give what you want? $\endgroup$
    – kglr
    Jul 18 '18 at 9:27
  • $\begingroup$ this is working but this giving me a 4*4 matrix but 13 is a one 4*4 matrix just as above in my program, 14 is also a 4*4 matrix and 16 an15 is also a 4*4 matrix each ,,, if i write index 1 its mean a 2*2 matrix $\endgroup$ Jul 18 '18 at 9:50
  • $\begingroup$ @muhammedasif, please see the update. $\endgroup$
    – kglr
    Jul 18 '18 at 11:46
  • $\begingroup$ actually i want to evaluate e equation that will picks each submatrix and add with identity matrix and calculate the determinent .such as(-2 (1 - v))^1/Sqrt[Det[D1 + A]]+((-2 (1 - v))^2/Sqrt[Det[D13 + B]]) ,.... i have such 246 terms with different sub matrix ,,, i dont knw how i do it any idea pllz $\endgroup$ Jul 20 '18 at 8:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.