Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

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

  1. Oct 24, 2011 #1
    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?
     
  2. jcsd
  3. Oct 25, 2011 #2
    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 (Text):
    Mat1 = RandomInteger[{-10, 10}, {12, 12}];
    Mat2 = ConstantArray[0, {12, 12}];
    To implement a loop like the one that you wanted, try

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

    Code (Text):

    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 (Text):
    DiagonalMatrix[First@Mat1]
    But other options are

    Code (Text):

    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: May 5, 2017
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Defining one matrix in terms of another in Mathematica with FOR loop
  1. Mathematica looping (Replies: 3)

Loading...