Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

This may be a trivial question, but I have been at it for a couple of hours and I have not made much progress. I have a 10 x 10 array (T) that I have used to generate an 8 x 8 array (Q). I want to replace the interior of array T with array Q. I can think of lots of really cumbersome ways to do this, but I assume that there is a "good" way to do this...

I suspect that this can be done using ReplaceAll but I cannot get the form correct.

Any pointers would be greatly appreciated.

The code and arrays are:

Nx = 10;
Ny = 10;
(* Initial Temperature Array *)
T = Table[0, {i, Nx}, {j, Ny}];
T[[1]] = Table[Tbottom, {i, Nx}];
T[[Ny]] = Table[Ttop, {i, Nx}];
T[[All, 1]] = Tleft;
T[[All, Nx]] = Tright;
(* Finite Difference of Array *)
Q = Table[
   0.25*(T[[i - 1, j]] + T[[i, j + 1]] + T[[i + 1, j]] + 
      T[[i, j - 1]]), {i, 2, Nx - 1}, {j, 2, Ny - 1}];
(* Output in Matrix Form *)
T // MatrixForm
Q // MatrixForm

Array T $$ \left( \begin{array}{cccccccccc} 50 & 50 & 50 & 50 & 50 & 50 & 50 & 50 & 50 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 50 \\ 50 & 100 & 100 & 100 & 100 & 100 & 100 & 100 & 100 & 50 \\ \end{array} \right) $$

Array Q $$ \left( \begin{array}{cccccccc} 25. & 12.5 & 12.5 & 12.5 & 12.5 & 12.5 & 12.5 & 25. \\ 12.5 & 0. & 0. & 0. & 0. & 0. & 0. & 12.5 \\ 12.5 & 0. & 0. & 0. & 0. & 0. & 0. & 12.5 \\ 12.5 & 0. & 0. & 0. & 0. & 0. & 0. & 12.5 \\ 12.5 & 0. & 0. & 0. & 0. & 0. & 0. & 12.5 \\ 12.5 & 0. & 0. & 0. & 0. & 0. & 0. & 12.5 \\ 12.5 & 0. & 0. & 0. & 0. & 0. & 0. & 12.5 \\ 37.5 & 25. & 25. & 25. & 25. & 25. & 25. & 37.5 \\ \end{array} \right) $$

share|improve this question
add comment

1 Answer

up vote 3 down vote accepted

The easiest and most general way is to use a direct assignment on Part, using Span.
First some simpler sample data:

T = ArrayPad[ConstantArray[0, {5, 5}], 1, 1];
Q = Array[Multinomial, {5, 5}];

T // MatrixForm
Q // MatrixForm

Mathematica graphics

Mathematica graphics

Either copy the data to a new symbol as below, or use T directly for in-place modification:

newT = T;

newT[[2 ;; -2, 2 ;; -2]] = Q;

newT

Mathematica graphics

For more examples of the power of this method see:
Elegant operations on matrix rows and columns

share|improve this answer
    
Thanks so much for the quick reply. This is exactly what I was looking for. Turns out I was sort of close (at one point...) when I tried something like {{2;;10},{2;;10}}. –  navillus5 Mar 14 '13 at 21:10
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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