C++多项式除法的探讨

大兔子大兔子 提交于 2020-01-13 08:45:21

最近的一项工作就是用vector实现多项式类,这个类需要完成多项式的数据结构的定义以及基本运算,包括加减乘除,前三个还比较容易,对于多项式的除法,因为有除不尽的情况,比如:

计算

其结果是:

明显是除不尽的,但是按照普通的除法去做,余数就会被舍弃,当涉及到求值或者求导时,就会产生极大的误差,尤其是在实现牛顿法求解高次多项式的数值解时,需要计算迭代点的函数值以及导数值,余数的舍弃必然使函数值产生偏差,其导数值也必然不准,也就使最后产生不靠谱的结果。

解决方案有两种思路,也是我自己的思考过程,第一种,我想通过指针的形式将多项式除法的结果和余数都返回,然后在计算函数值和导数值的时候,需要将余数和除数再次相除,这样做确实可以解决问题,但是,前提是需要将被除数,除数区分开,在单次除法的计算中问题不大,但是涉及到复杂函数构成时,就显得困难了。

所以产生了第二种解决方案,就是遇到除法,不去计算结果,而是构造一个结构体,这个结构体有两部分构成,一部分是被除数,一部分是除数,也就是变成分子分母的形式

template<typename T>
struct Div_Poly
{
	Poly<T> Numer_Poly; //分子--被除数
	Poly<T> Denom_Poly;//分母--除数
}

在涉及除法时,就直接传值操作,而不进行实际的除法运算,求函数值时直接将函数值代入,求导数值时,利用导数的定义

 

进行计算。

delta_x可以设置为double类型的极小值,比如可以取 0.00000001,自己把握精度。

这部分代码我将传到的github上

Poly_class_based_on_vector

文件为demo_4.1.zip

其他为早期版本。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!