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.

I have the type of system M.x = b, where M is a known matrix and b is a known vector. M contains many parameters, call the entire parameter set 'a', so M => M[a].

I want to be able to efficiently evaluate x[a], i.e. x[a] is now a collection of functions with variables/parameters 'a'. How to do this in an optimal way?

The system can become very large, so that (symbolic) evaluation of LinearSolve[M,b] will take a long time. Also note that x can have many elements, and one could be interested in just evaluating x[[i]] in which case it is redundant to evaluate all the other elements of x.

EDIT

the system can e.g. be defined by:

b = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}

M = {{1, 0, 0, 0, 1, 0, 0, 0, 1}, {-c21 - c31, 0, -I omge, 0, c12, 0, 
  I Conjugate[omge], 0, c13}, {0, 
  I (-dge + dse) - c1/4 - c12/2 - c2/4 - c21/2 - c31/2 - c32/
   2, -I omse, 0, 0, 0, 0, I Conjugate[omge], 
  0}, {-I Conjugate[omge], -I Conjugate[omse], -I dge - c1/4 - c13/2 -
    c21/2 - c23/2 - c3/4 - c31/2, 0, 0, 0, 0, 0, 
  I Conjugate[omge]}, {0, 0, 
  0, -I (-dge + dse) - c1/4 - c12/2 - c2/4 - c21/2 - c31/2 - c32/2, 
  0, -I omge, I Conjugate[omse], 0, 0}, {c21, 0, 0, 
  0, -c12 - c32, -I omse, 0, I Conjugate[omse], c23}, {0, 0, 
  0, -I Conjugate[omge], -I Conjugate[omse], -I dge - I (-dge + dse) -
    c12/2 - c13/2 - c2/4 - c23/2 - c3/4 - c32/2, 0, 0, 
  I Conjugate[omse]}, {I omge, 0, 0, I omse, 0, 0, 
  I dge - c1/4 - c13/2 - c21/2 - c23/2 - c3/4 - c31/2, 
  0, -I omge}, {0, I omge, 0, 0, I omse, 0, 0, 
  I dge + I (-dge + dse) - c12/2 - c13/2 - c2/4 - c23/2 - c3/4 - c32/
   2, -I omse}, {c31, 0, I omge, 0, c32, 
  I omse, -I Conjugate[omge], -I Conjugate[omse], -c13 - c23}}
share|improve this question
    
Welcome to Mathematica SE. Could you be more specific by entering an example of your Linear System ? i.e. Sometimes Sparse Arrays help a lot. –  tchronis Feb 20 at 12:47
    
So in your example the matrix's dimensions are 10x9. So x must be of 9th dimension and the system may prove impossible (10 equations - 9 variables). –  tchronis Feb 20 at 14:11
    
In principle you are right, but in this case I know it is possible. The system encodes a set of differential equations for the nine elements of x, plus a boundary condition encoded it the first row of M. Actually the background info is that the nine components of x are elements of a 3-by-3 matrix, which is Hermitian and has Tr equal to 1 (which is the first row of M boundary condition) –  Sander Feb 20 at 14:19

1 Answer 1

up vote 1 down vote accepted

Exploring the above matrix M we get Dimensions[M]=={10,9}.

Also MatrixRank[M]==9 and MatrixRank[M[[1 ;; 9]]]==9 so we transform the system to a square system:

M = M[[1 ;; 9]];
b = b[[1 ;; 9]];
det = Det[M];

then simply calculating determinants we obtain the xi

solvefor[i_] := Module[{B},
  B = M; B[[All, i]] = b;
  Det[B]/det]

example : solvefor[1] solves for x1

share|improve this answer
    
Yes, this works perfectly, thanks a lot! –  Sander Feb 20 at 15:40
    
You are welcome! –  tchronis Feb 20 at 17:51

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.