1

我正在寻找对两个多项式求和的内置 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

4 回答 4

4

简单的。写一个小函数,叫它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
于 2012-05-09T12:46:44.187 回答
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
于 2012-05-09T12:37:12.230 回答
2
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
于 2019-03-10T07:08:18.440 回答
0

你有没有试过这个:

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

ps = p1 + p2;
于 2012-05-09T12:32:29.547 回答