Search code examples
matlabmatrixdeterminants

Matlab: determinant of a matrix of vectors


I have a 2x2 matrix, each element of which is a 1x5 vector. something like this:

x = 1:5;
A = [ x  x.^2; x.^2 x];

Now I want to find the determinant, but this happens

B = det(A);
Error using det
Matrix must be square.

Now I can see why this happens, MATLAB sees A as a 2x10 matrix of doubles. I want to be able to treat x as an element, not a vector. What I'd like is det(A) = x^2 - x^4, then get B = det(A) as a 1x5 vector.

How do I achieve this?


Solution

  • While Matlab has symbolic facilities, they aren't great. Instead, you really want to vectorize your operation. This can be done in a loop, or you can use ARRAYFUN for the job. It sounds like ARRAYFUN would probably be easier for your problem.

    The ARRAYFUN approach:

    x = 1:5;
    detFunc = @(x) det([ x x^2 ; x^2 x ]);
    
    xDet = arrayfun(detFunc, x)
    

    Which produces:

    >> xDet = arrayfun(detFunc, x)
    xDet =
         0   -12   -72  -240  -600
    

    For a more complex determinant, like your 4x4 case, I would create a separate M-file for the actual function (instead of an anonymous function as I did above), and pass it to ARRAYFUN using a function handle:

    xDet = arrayfun(@mFileFunc, x);