swa*_*p96 5 matlab polynomials
该poly函数将多项式的根作为输入并返回多项式的系数。底层算法是什么?
有没有更好的方法从根计算多项式的系数?
注意:
\n\n1),您需要将x \xe2\x88\x92 r形式的所有项相乘,其中r是根。(重根应根据其重数考虑多次。)多项式的乘法相当于卷积。事实上,文档conv说
\n\n
w = conv(u,v)返回向量和的卷积。如果和uvuv是多项式系数的向量,则对它们进行卷积相当于将两个多项式相乘。
所以:
\n\nroots = [1 -2 3]; %// input (roots)\nresult = 1; %// initiallize\nfor r = roots\n result = conv(result, [1 -r]);\nend\nRun Code Online (Sandbox Code Playgroud)\n\n在这个例子中,结果是
\n\nresult =\n 1 -2 -5 6\nRun Code Online (Sandbox Code Playgroud)\n\n这是相同的向量poly。
或者,您可以手动进行卷积:
\n\nroots = [1 -2 3]; %// input (roots)\nresult = 1; %// initiallize\nfor r = roots\n result = [result 0] + [0 -r*result];\nend\nRun Code Online (Sandbox Code Playgroud)\n\n这相当于以下具有显式循环的代码代码,它应该更接近于 C++ 实现:
\n\nroots = [1 -2 3]; %// input (roots)\nresult = nan(1,numel(roots)+1); %// preallocate. Values will be overwritten\nresult(1) = 1; %// initiallize\nfor n = 1:numel(roots)\n result(n+1) = -roots(n)*result(n); %// update from right to left, due to overwriting\n for k = n:-1:2\n result(k) = result(k) - roots(n)*result(k-1);\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n