我有一个 Matlab 函数,它返回以下形式的多项式:
poly = ax^2 + bx*y + cy^2
其中 a、b 和 c 是常数,x 和 y 是符号(类sym
)。
我想以 形式获得多项式的系数[a b c]
,但我遇到了以下问题。如果函数返回poly = y^2
,则coeffs(poly) = 1
。我不想要这个——我想要它回来[0 0 1]
。
如何创建一个函数,以我想要的形式给出符号多项式的系数?
我有一个 Matlab 函数,它返回以下形式的多项式:
poly = ax^2 + bx*y + cy^2
其中 a、b 和 c 是常数,x 和 y 是符号(类sym
)。
我想以 形式获得多项式的系数[a b c]
,但我遇到了以下问题。如果函数返回poly = y^2
,则coeffs(poly) = 1
。我不想要这个——我想要它回来[0 0 1]
。
如何创建一个函数,以我想要的形式给出符号多项式的系数?
sym2poly
如果您的多项式是像您的示例一样的单个变量的函数,则可以使用y^2
:
syms y
p = 2*y^2+3*y+4;
c = sym2poly(p)
返回
c =
2 3 4
fliplr(c)
如果您真的想要其他顺序的系数,请使用。如果您要使用多项式,最好不要创建一个名为 的变量poly
,这是您可能要使用的函数的名称。
如果您确实需要处理多个变量中的多项式,您可以使用Matlab 中的MuPAD函数。以下是如何使用 MuPAD根据它们之前(或)coeff
的变量顺序来获取系数:x
y
syms x y
p = 2*x^2+3*x*y+4*y;
v = symvar(p);
c = eval(feval(symengine,'coeff',p,v))
如果您想从多项式中提取所有信息,该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
然后可以通过以下方式重建多项式:
sum(c.*prod(repmat(v,[size(m,1) 1]).^degs,2))
顺便说一句,你去学校的好选择。:-)
这个问题还有一个替代方案。对于给定的度数,此函数返回该度数的多项式及其系数。开始了:
function [polynomial, coefficeint] = makePoly(degree)
syms x y
previous = 0 ;
for i=0:degree
current = expand((x+y)^i);
previous= current + previous ;
end
[~,poly] = coeffs(previous);
for j= 1:length(poly)
coefficeint(j) = sym(strcat('a', int2str(j)) );
end
polynomial = fliplr(coefficeint)* poly.' ;
end
希望这可以帮助。