基于数值分析思想对多项式求值的原理和应用进行探究
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于数值分析思想对多项式求值的原理和应用进行探究相关的知识,希望对你有一定的参考价值。
摘要:多项式是由多个单项(符号项如: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)中的特殊形式。
以上是关于基于数值分析思想对多项式求值的原理和应用进行探究的主要内容,如果未能解决你的问题,请参考以下文章