求和两个多项式

时间:2012-05-09 12:27:54

标签: matlab sum polynomial-math built-in

我正在寻找一个内置的Matlab函数,它将两个多项式相加。

示例:

\ p_1(x) = 500x^5 + 400x^4 + 300x^3 + 200x^2 + 100x + 50 \ p_2(x) = \qquad\qquad\qquad\qquad\;\, 3x^3 + \quad 2x^2 + \quad\;\, x + \;\; 5 \ p_s(x) = 500x^5 + 400x^4 + 303x^3 + 202x^2 + 101x + 55

p1(x)和p2(x)用代码标准Matlab向量表示:

p1 = [500 400 300 200 100 50];
p2 = [3 2 1 5];

如何使用内置的Matlab函数将这两个多项式求和得到ps(x);没有编写明确的m文件函数?

4 个答案:

答案 0 :(得分:3)

我当然希望有更好的方法(我可能会把它放到辅助函数中),但这似乎工作得很好:

[zeros(1, size(p1,2)-size(p2,2)) p2] + [zeros(1, size(p2,2)-size(p1,2)) p1]

ans =

   500   400   303   202   101    55

答案 1 :(得分:3)

简单。写一个小函数,称之为leftpadz。

leftpadz = @(p1,p2) [zeros(1,max(0,numel(p2) - numel(p1)))),p1];

所以如果我们有......

p1 = [500 400 300 200 100 50];
p2 = [3 2 1 5];
p3 = leftpadz(p1,p2) + leftpadz(p2,p1)
p3 =
   500   400   303   202   101    55

答案 2 :(得分:1)

function c = polyadd( a, b)
assert( isrow(a))
assert( isrow(b))

maxL = max( [length(a), length(b)]);
a = [ zeros( 1, maxL - length(a)), a];
b = [ zeros( 1, maxL - length(b)), b];

c = a +b ;
end

答案 3 :(得分:0)

你试过这个:

p1 = [500 400 300 200 100 50];
p2 = [0 0 3 2 1 5]; # refilling with 0

ps = p1 + p2;