如何从Matlab中的公式中计算特定变量?

The*_*ell 7 matlab symbolic-math

假设我有一个像这样的公式的列向量

N =

 4*k2 + 5*k3 + k1*x
 7*k2 + 8*k3 + k1*y
Run Code Online (Sandbox Code Playgroud)

和像这样的符号变量的列向量

k =

 k1
 k2
 k3
Run Code Online (Sandbox Code Playgroud)

公式相对于线性是线性的k.我想找到一个矩阵M,使得M*k等于N.

我可以这样做N/k.但是,这给了

[ (4*k2 + 5*k3 + k1*x)/k1, 0, 0]
[ (7*k2 + 8*k3 + k1*y)/k1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

这是正确的,但不是我想要的.我想要的是矩阵

 x     4     5
 y     7     8
Run Code Online (Sandbox Code Playgroud)

在我看来,这是最简单的答案,因为它不涉及任何变量k.

我如何说服Matlab从公式或公式向量中分解出指定的变量?

Lui*_*ndo 7

您可以使用coeffs,特别是表格

C = coeffs(p,vars)返回多元多项式p相对于变量的系数vars.

由于第一个输入需要是多项式,因此需要传递以下每个组件N:

coeffs(N(1), k)
coeffs(N(2), k)
Run Code Online (Sandbox Code Playgroud)

或者使用循环并将所有结果存储在符号数组中:

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

在你的例子中,这给出了

result =
[ 5, 4, x]
[ 8, 7, y]
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用`arrayfun`:`cell2sym(arrayfun(@(X)coeffs(X,k),N,'UniformOutput',false))而不是编写自己的循环. (2认同)