2012-05-09 3 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 (х) и р2 (х) представлены в коде стандартных векторов Matlab:

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

Как просуммировать эти два полинома, чтобы получить пс (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. + - это все, что вам нужно. –

+0

Вы правы, я протестировал его в Октаве, и он сработал (я его перепутал. *) –

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 
Смежные вопросы