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.

By steady state vector I mean the eigenvector which has an eigenvalue of 1. So is there a way to at least iteratively approximate the entries of the stochastic matrix?

Thanks.

share|improve this question

closed as off topic by Verbeia, rm -rf, belisarius, Szabolcs, Mr.Wizard Jul 25 '12 at 10:38

Questions on Mathematica Stack Exchange are expected to relate to Mathematica within the scope defined by the community. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about reopening questions here.If this question can be reworded to fit the rules in the help center, please edit the question.

    
I think this is a math question as much as a Mathematica question. Perhaps you should ask at math.stackexchange.com for an appropriate algorithm, and then try to implement that in Mathematica. If you have trouble, do feel free to come back. Anyway, welcome to Mathematica.SE and please do ask Mathematica-related questions here! –  Verbeia Jul 25 '12 at 3:42
3  
It strikes me as being underdetermined for dimension larger than 2 (n^2 variables for the matrix entries, n equation for stochasticity, n more for the eigenvector equation). Maybe I need some sleep though. –  Daniel Lichtblau Jul 25 '12 at 3:46
    
@DanielLichtblau I have exactly the same feeling –  magma Jul 25 '12 at 13:57
add comment

1 Answer 1

To elaborate on my comment, here is a 3x3 example. We treat the eigenvector components as parameters, and show that there is a nonunique solution set for the matrix components in terms of these parameters. My comment was off by one insofar as I neglected to normalize the eigenvector. Since generically the components will not sum to zero, I simply set their sum to unity for that purpose.

In[41]:= mat = Array[a, {3, 3}];
evec = Array[x, 3];
eqns = Join[Thread[Total[Transpose[mat]] == 1], 
  Thread[mat.evec == evec], {Total[evec] == 1}]

Out[43]= {a[1, 1] + a[1, 2] + a[1, 3] == 1, 
 a[2, 1] + a[2, 2] + a[2, 3] == 1, a[3, 1] + a[3, 2] + a[3, 3] == 1, 
 a[1, 1] x[1] + a[1, 2] x[2] + a[1, 3] x[3] == x[1], 
 a[2, 1] x[1] + a[2, 2] x[2] + a[2, 3] x[3] == x[2], 
 a[3, 1] x[1] + a[3, 2] x[2] + a[3, 3] x[3] == x[3], 
 x[1] + x[2] + x[3] == 1}

Now we solve the system, only allowing one parameter equation so as to ignore lower dimensional solution sets that arise when there something more than the normalization condition is imposed on the eigenvector parameters.

In[48]:= Solve[eqns, Flatten[mat], MaxExtraConditions -> 1]

During evaluation of In[48]:= Solve::svars: Equations may not give
  solutions for all "solve" variables. >>

Out[48]= {{a[1, 2] -> 
   ConditionalExpression[((-1 + a[1, 1]) (-1 + x[2] + 2 x[3]))/(
    x[2] - x[3]), x[1] + x[2] + x[3] == 1], 
  a[1, 3] -> 
   ConditionalExpression[-(((-1 + a[1, 1]) (-1 + 2 x[2] + x[3]))/(
     x[2] - x[3])), x[1] + x[2] + x[3] == 1], 
  a[2, 2] -> 
   ConditionalExpression[(-a[2, 1] + x[2] + a[2, 1] x[2] - x[3] + 
     2 a[2, 1] x[3])/(x[2] - x[3]), x[1] + x[2] + x[3] == 1], 
  a[2, 3] -> 
   ConditionalExpression[-((a[2, 1] (-1 + 2 x[2] + x[3]))/(
     x[2] - x[3])), x[1] + x[2] + x[3] == 1], 
  a[3, 2] -> 
   ConditionalExpression[(a[3, 1] (-1 + x[2] + 2 x[3]))/(x[2] - x[3]),
     x[1] + x[2] + x[3] == 1], 
  a[3, 3] -> 
   ConditionalExpression[(
    a[3, 1] + x[2] - 2 a[3, 1] x[2] - x[3] - a[3, 1] x[3])/(
    x[2] - x[3]), x[1] + x[2] + x[3] == 1]}}

One will observe that the solution set is not fully determined, in that six matrix entries are functions of the remaining three. (Why three undetermined values? We had nine variables and seven equations, but one eigenvector equation is linearly dependent on the stochasticity and the other two such equations. So we only have six independent equations.)

I guess the short answer would be "No".

share|improve this answer
add comment

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