在MatLab中求符号多项式系数

w8f9ii69  于 2022-11-15  发布在  Matlab
关注(0)|答案(2)|浏览(275)

我有一个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]
我如何创建一个函数,以我想要的形式给出符号多项式的系数?

b4wnujal

b4wnujal1#

如果多项式是单变量函数,则可以使用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根据系数前面的变量顺序(xy)获得系数:

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))
  • 顺便说一句,你去哪里上学是个不错的选择。:-)*
nkkqxpd9

nkkqxpd92#

对于这个问题,还有另一种选择。对于给定的次数,此函数返回该次数的多项式及其全部系数。

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

希望这能帮上忙。

相关问题