Defining one matrix in terms of another in Mathematica with FOR loop

  • Mathematica
  • Thread starter AxiomOfChoice
  • Start date
  • #1

Main Question or Discussion Point

THIS ISN'T WORKING AT ALL!

I'm trying to define a matrix M in terms of a predefined matrix N by using the following for loop:

For[a=1,a<=12,a++,M[[a,a]]=N[[1,a]]]

So I just want the diagonal of M to be the first row of N. But this is not working at ALL. Does anyone see what I'm doing wrong?
 

Answers and Replies

  • #2
313
1
First of all, http://reference.wolfram.com/mathematica/ref/N.html" [Broken], N[Pi]=3.1415...
If you want to use a symbol that looks like N, the easiest is \[CapitalNu] that can be entered using <esc>N<esc>.

Second, you need to set the off diagonal elements of M, not just the diagonal.

Finally, it's more efficient to use built in matrix/array methods than using For loops.

Here's a 12*12 random integer matrix and a 12*12 zero matrix:

Code:
Mat1 = RandomInteger[{-10, 10}, {12, 12}];
Mat2 = ConstantArray[0, {12, 12}];
To implement a loop like the one that you wanted, try

Code:
Do[Mat2[[a, a]] = Mat1[[1, a]], {a, 1, Length@Mat2}]
Ouput the matrix and check that it's correct:

Code:
Mat2 // MatrixForm
Diagonal[Mat2] == First[Mat1]

(* Returns (for the particular random matrix that I got):
-1	0	0	0	0	0	0	0	0	0	0	0
0	9	0	0	0	0	0	0	0	0	0	0
0	0	-4	0	0	0	0	0	0	0	0	0
0	0	0	-2	0	0	0	0	0	0	0	0
0	0	0	0	1	0	0	0	0	0	0	0
0	0	0	0	0	2	0	0	0	0	0	0
0	0	0	0	0	0	2	0	0	0	0	0
0	0	0	0	0	0	0	9	0	0	0	0
0	0	0	0	0	0	0	0	9	0	0	0
0	0	0	0	0	0	0	0	0	-4	0	0
0	0	0	0	0	0	0	0	0	0	3	0
0	0	0	0	0	0	0	0	0	0	0	7

True *)
Probably the best way to create the matrix Mat2 would be to use

Code:
DiagonalMatrix[First@Mat1]
But other options are

Code:
IdentityMatrix[12] First[Mat1]
Array[If[#1 == #2, Mat1[[1, #]], 0] &, {12, 12}]
Array[KroneckerDelta[##] Mat1[[1, #]] &, {12, 12}]
SparseArray[Band[{1, 1}] -> First@Mat1, {12, 12}] // Normal
(* etc... *)
See the Constructing matrices http://reference.wolfram.com/mathematica/guide/ConstructingMatrices.html" [Broken] for more info.
 
Last edited by a moderator:

Related Threads on Defining one matrix in terms of another in Mathematica with FOR loop

Replies
2
Views
5K
Replies
2
Views
1K
Replies
3
Views
23K
Replies
2
Views
4K
Replies
2
Views
3K
Replies
2
Views
2K
Replies
11
Views
4K
Top