码迷,mamicode.com
首页 > 其他好文 > 详细

基于数值分析思想对多项式求值的原理和应用进行探究

时间:2018-07-03 00:12:43      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:sys   tor   相加   template   log   51cto   理论   括号   lse   

摘要:多项式是由多个单项(符号项如:5x或者常数项4)通过四则运算组合起来的式子,如P(x)=2x^4+3x^3-3x^2+5x-1

一般的求解会将特定的x代入到上式中,一个一个的计算,共需要花费10次的乘法和4次加法运算,但是我们可以通过霍纳方法对多项式进行组合计算,在需要每秒对多个不同输入的x多次计算多项式对应的值时,该方法可以极大的提高计算效率。

原理:采用霍纳方法对上式进行分解步骤如下:

        P(x) = -1+x(5-3x+3x^2+2x^3)

           = -1+x(5+x(-3+3x+2x^2))

           = -1+x(5+x(-3+x(3+2x)))

           = -1+x*(5+x*(-3+x*(3+2*x)))                 (1)

这里的多项式是从低阶向高阶项分解,关于x的幂次被分解为余下的多项式的乘积,然后可以从括号内层向外层进行求值计算。

算法实现:本文采用递归方式求解多项式,其中向量a 存储的是从低次到高次多项式的常数项值,x为变量,n为多项式的次数,最开始为0

template < class T>
inline T Algorithm::polynomial(vector<T > a, T x, int n) //可定义模板类和模板函数 //多项式相加
{
if (n < a.size() - 1)
{
return a[n] + polynomial(a, x, n + 1)*x;
}
else
{
return a[n]; //递归终止条件:当n等于最大值的前个数是,递归截止
}
}

void main()
{
Algorithm testPloy;
vector<double> a;
double t;
cin >> t;
while (t)
{
a.push_back(t);
cin >> t;
}
cout<<testPloy.polynomial(a, 0.5, 0);
cout << endl;
system("pause");
}
技术分享图片
总结:

通过对多项式求值的计算,让我更深刻的理解到在计算领域计算效率往往可以从最基础的理论找到突破点,结果却会产生巨大的效果。

其中,多项式求值的原理和应用体现了科学计算方法的最重要的特征:

(1)计算机在做简单计算的时候速度很快;

(2)由于简单计算可能会被进行多次,尽可能有效地进行简单计算,可以大大提高计算的效率;

最后,在对多项式求值理论进行研究后,我们将其推广到更一般的形式,以适应更多实际的应用:

f(x)=c1+(x-r1)(c2+(x-r2)(c3+(x-r3)(c4+(x-r4)(c5))))

其中,r1,r2,r3,r4表示基点,当r1,r2,r3,r4为0时,则就是上式(1)中的特殊形式。

基于数值分析思想对多项式求值的原理和应用进行探究

标签:sys   tor   相加   template   log   51cto   理论   括号   lse   

原文地址:http://blog.51cto.com/12482074/2135207

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!