在Matlab中获取符号多项式的系数

Mic*_*lle 4 matlab symbolic-math polynomial-math binomial-coefficients

我有一个Matlab函数,返回一个形式的多项式:

poly = ax^2 + bx*y + cy^2
Run Code Online (Sandbox Code Playgroud)

其中a,b和c是常量,x和y是符号(类sym).

我想得到表单中多项式的系数[a b c],但我遇到了以下问题.如果函数返回poly = y^2,那么coeffs(poly) = 1.我不想要这个 - 我希望它能够回归[0 0 1].

如何创建一个函数,它将以我想要的形式给出符号多项式的系数?

hor*_*ler 7

sym2poly如果您的多项式是单个变量的函数,则可以使用,例如y^2:

syms y
p = 2*y^2+3*y+4;
c = sym2poly(p)
Run Code Online (Sandbox Code Playgroud)

返回

c =

     2     3     4
Run Code Online (Sandbox Code Playgroud)

fliplr(c)如果您真的想要其他顺序的系数,请使用.如果您要使用多项式,那么最好不要创建一个名为的变量poly,这是您可能想要使用的函数的名称.

如果您确实需要处理多个变量中的多项式,则可以在Matlab中使用MuPAD函数.以下是如何使用MuPAD coeff来根据它们之前(xy)的变量顺序获取系数:

syms x y
p = 2*x^2+3*x*y+4*y;
v = symvar(p);
c = eval(feval(symengine,'coeff',p,v))
Run Code Online (Sandbox Code Playgroud)

如果要从多项式中提取所有信息,该poly2list函数非常有用:

syms x y
p = 2*x^2+3*x*y+4*y;
v = symvar(p);
m = eval(feval(symengine,'poly2list',p,v));
c = m(:,1); % Coefficients
degs = m(:,2:end); % Degree of each variable in each term
Run Code Online (Sandbox Code Playgroud)

然后可以通过以下方式重建多项式:

sum(c.*prod(repmat(v,[size(m,1) 1]).^degs,2))
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你去哪里上学的好选择.:-)