2012-05-09 61 views
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)和P 2(X)被表示在代码标准Matlab的载体:

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

如何概括这两个多项式得到PS( x)使用内置的Matlab函数;没有写明确的m文件功能?

回答

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

哇,这很聪明! – hkBattousai

0

你有没有尝试过这样的:

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

ps = p1 + p2; 
+0

P2在代码中动态创建。我不能以这种方式添加零。 – hkBattousai

+0

对不起,但。+甚至不是一个有效的matlab操作符。 +是你所需要的。 – 2012-05-09 12:39:23

+0

你是对的,我在Octave中测试过它,它工作正常(我把它和*混合在一起) –

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