На основании ответа @ LuisMendo я использовал coeffs
.Но есть пара проблем с coeffs
.Во-первых, его результат не содержит никаких коэффициентов, равных 0. Во-вторых, он не гарантирует, что коэффициенты упорядочены так же, как переменные во втором аргументе.Я придумал следующую функцию для замены коэффициентов.
К счастью, коэффициенты возвращают второй результат, в котором перечислены переменные, связанные с каждым элементом в первом результате.(Это более сложно, если формула не является линейной.)
function m = factorFormula(f, v )
% Pre: f is a 1x1 sym representing a
% linear function of the variables in v.
% Pre: v is a column vector of variables
% Post: m is a row vector such that m*v equals f
% and the formulas in m do not contain the
% variables in v
[cx,tx] = coeffs(f,v)
n = size(v,1)
m = sym(zeros(1,n))
for i = 1:n
j = find(tx==v(i))
if size(j,2) == 1
m(i) = cx(j)
end
end
end
Это работает только для одной формулы, но ее можно распространить на вектор, используя цикл в ответе @ LuisMendo или это эквивалентное выражение в @Sanchises.комментарий там.
cell2sym(arrayfun( @(f)factorFormula(f,k),N,'UniformOutput',false ) )
Я надеюсь, что есть лучший ответ, чем этот.