Полиномиальный класс: полиномиальное умножение

у меня есть Polynomial класс, который имеет get_vect функция-член, которая хранит целые числа в векторе, который должен быть представлением коэффициентов многочлена. Теперь я пытаюсь умножить два полинома вместе, используя Multiply функция, не являющаяся членом, но я застреваю, когда дело доходит до фактического умножения векторов. Пока что у меня есть то, что показано ниже:

Polynomial Multiply(const Polynomial & poly1, const Polynomial & poly2)
{
vector<int> Poly1 = poly1.get_vect();
vector<int> Poly2 = poly2.get_vect();
vector<int> Poly3;

if( Poly1.size() < Poly2.size() )
{
for(size_t i = 0 ; Poly2.size()-Poly1.size() ; ++i )
{
Poly2.push_back(0);
}
}
else if( Poly1.size() > Poly2.size() )
{
for(size_t i = 0 ; Poly1.size()-Poly2.size() ; ++i )
{
Poly1.push_back(0);
}
}

return Poly3;
}

Я вижу, что он должен следовать приведенному ниже шаблону:

введите описание изображения здесь

0

Решение

Итак, если я правильно понимаю проблему, вы хотите Poly3 быть vector<int> который содержит коэффициенты, которые являются результатом полиномиального умножения между полиномами, представленными Poly1 а также Poly2,

В этом запросе подразумевается, что все три полинома являются полиномами от одной переменной, причем каждый коэффициент представляет коэффициент перед возрастающей степенью этой переменной. то есть. тот { 4, 5, 6, 7 } соответствует 4 + 5x + 6x2 + 7x3.

Если это так, то фактическое умножение не должно быть таким уж сложным, если ваши полиномы не очень большие. Вам нужен код, который выглядит примерно так:

    Poly3.resize(Poly1.size() + Poly2.size() - 1, 0);  // Make the output big enough; init to 0

for (size_t i = 0; i != Poly1.size(); i++)
for (size_t j = 0; j != Poly2.size(); j++)
Poly3[i+j] += Poly1[i] * Poly2[j];

Теперь результат в Poly3 должен быть продуктом Poly1 а также Poly2,

Вполне возможно, что я забыл краевое состояние; Я буду следить за комментариями здесь, чтобы указать, где я сделал. Тем временем, однако, я сделал несколько тестов, и, похоже, это дает правильный вывод.

Если у вас довольно большие полиномы, вы можете изучить математические библиотеки для обработки умножения. Но для чего-то около 20-30 сроков? Если ваш код не очень сильно зависит от этой полиномиальной оценки, я подозреваю, что это не будет вашим узким местом.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]