【问题标题】:Polynomial Class: Polynomial Multiplication多项式类:多项式乘法
【发布时间】:2013-08-10 05:30:53
【问题描述】:

我有一个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;
}

我看到它必须遵循以下模式:

【问题讨论】:

  • 我不确定为什么需要任何模式。当您乘以相同的底数时,会添加指数。
  • 这张照片目前不可用。 (你的图片链接不好)
  • @BenjaminLindley,对我来说效果很好。无论如何,我之前忘记将其添加到问题中。
  • @LoieBenedicte:我很确定我下面的嵌套循环直接对应于您发布的图表中的红色/橙色对角线。

标签: c++ vector multiplication polynomial-math vector-multiplication


【解决方案1】:

好的,如果我正确理解了这个问题,您希望 Poly3 成为 vector&lt;int&gt;,它包含由 Poly1Poly2 表示的多项式之间的多项式乘法得到的系数。

在这个请求中默认的是所有三个多项式都是单个变量中的多项式,每个系数代表该变量的递增幂之前的系数。 IE。 { 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 中的结果应该是Poly1Poly2 的乘积。

我完全有可能忘记了边缘条件;我会在这里注意 cmets 指出我在哪里做的。不过,与此同时,我做了一些测试,看来这给出了正确的输出。

如果您有相当大的多项式,那么您可能需要查看数学库来处理乘法。但是对于大约 20 到 30 个学期以下的任何内容?除非您的代码非常依赖于这个多项式评估,否则我怀疑这不会成为您的瓶颈。

【讨论】:

  • 如果是这样,请将其标记为答案,因此它不再列在未回答的问题中。而且,很高兴能提供帮助。别客气! :-)
猜你喜欢
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2019-04-26
相关资源
最近更新 更多