用Horner方案简化算法

时间:2017-11-21 17:44:58

标签: c# algorithm polynomial-math polynomials

我有一个问题需要解决以下问题:

*给出特殊多项式:enter image description here 和输入:系数a [n],a [n-1],...,a [0],参数x

在C#或Pseudocode中创建一个算法,它将使用Horner的方法来求解x的特殊多项式。*

我创建了一个用Horner方法解决默认多项式函数的算法,但它不适用于特殊函数,因为指数是平方的。我不知道如何修改算法以尊重平方指数,因为据我所知,Horner的方法不使用指数。 这是我的代码:

        int[] a = new int[] { 0, 3, 2, 1};//a[0] - a[n]
        int n = 3;
        int x = 2;

        double r = a[n];
        for (int i = n - 1; i >= 0; i--)
        {
            r = r * x + a[i];
        }
        Console.WriteLine(r);

我很感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

提示1

  

4 * 4 = 1 + 3 + 5 + 7

提示2

  

x ^(4 * 4)= x ^ 1 * x ^ 3 * x ^ 5 * x ^ 7

提示3

  

a(4)* x ^(4 * 4)+ a(3)* x ^(3 * 3)+ a(2)* x ^(2 * 2)+ a(1)* x + a (0)=(((a(4)* x ^ 7 + a(3))* x ^ 5 + a(2))* x ^ 3 + a(1))* x ^ 1 + a(0)

提示5

  

您可以通过在每次迭代时将前一个奇数幂乘以x ^ 2来跟踪x的奇数幂

答案 1 :(得分:0)

让我重新审视钝方Horner's method来评估给定单个变量 x 中的多项式aₙxⁿ+ ... + a2x2 + a1x + a0值 x 0

  • 为每个非零系数 a k > 1),
    乘以并积累这些术语
  • 从“最高”系数开始;虽然有一个“较低”的系数,乘以 x 0 上升到先前系数和当前系数之间的指数差异并加上后者

霍纳的方法可以节省工作量,因为 x 0 的功率必须提高到(更低)和(因为这个原因)更少(只需要/使用 x 0 < / em>的)。

如何使用 square exponents 来保存评估多项式的​​工作?

  1. 在计算更大的权力时重复使用较小的权力。

    • 方形指数是特殊的
        

      就像相邻的正方形相差而奇数二相对于下一个较低的一对,相邻的平方功率奇数幂分开

      

    下一个奇数幂是当前的一个乘以平方

  2. 从“最高系数”评估到最低

    • 将此与1.相结合,
        

      有权力评估备忘或明确保留权力(使用)  可能最容易预先设置它们。

  3. 技巧组合(仍然) 霍纳的方法
    你决定。 (以及您的导师/老师/面试官。)