Search code examples
matlabsymbolic-math

How can I factor specific variables out of a formula in Matlab?


Suppose I have a column vector of formulae like this

N =

 4*k2 + 5*k3 + k1*x
 7*k2 + 8*k3 + k1*y

and a column vector of symbolic variables like this

k =

 k1
 k2
 k3

The formulae are linear with respect to k. I'd like to find a matrix M such that M*k equals N.

I can do this with N/k. However, that gives

[ (4*k2 + 5*k3 + k1*x)/k1, 0, 0]
[ (7*k2 + 8*k3 + k1*y)/k1, 0, 0]

which is correct, but not what I want. What I want is the matrix

 x     4     5
 y     7     8

which seems to me the simplest answer in that it involves no variables from k.

How do I convince Matlab to factor out the specified variables from a formula or a vector of formulae?


Solution

  • You can use coeffs, specifically the form

    C = coeffs(p,vars) returns coefficients of the multivariate polynomial p with respect to the variables vars.

    Since the first input needs to be a polynomial, you need to pass each component of N:

    coeffs(N(1), k)
    coeffs(N(2), k)
    

    Or use a loop and store all results in a symbolic array:

    result = sym('result', [numel(N) numel(k)]); % create symbolic array
    for m = 1:numel(N)
        result(m,:) = coeffs(N(m), k);
    end
    

    In your example, this gives

    result =
    [ 5, 4, x]
    [ 8, 7, y]