多项式除法

多项式除法&取模

北战南征 提交于 2020-01-30 10:24:33
除法&取模 设 n n n 次多项式 F ( x ) F(x) F ( x ) 和 m m m 次多项式 G ( x ) G(x) G ( x ) ,求 n − m n-m n − m 次多项式 Q ( x ) Q(x) Q ( x ) 和 m − 1 m-1 m − 1 次多项式 R ( x ) R(x) R ( x ) 满足 F ( x ) = G ( x ) Q ( x ) + R ( x ) F(x)=G(x)Q(x)+R(x) F ( x ) = G ( x ) Q ( x ) + R ( x ) 于是我们有 F ( 1 x ) = G ( 1 x ) Q ( 1 x ) + R ( 1 x ) F(\frac{1}{x})=G(\frac{1}{x})Q(\frac{1}{x})+R(\frac{1}{x}) F ( x 1 ​ ) = G ( x 1 ​ ) Q ( x 1 ​ ) + R ( x 1 ​ ) 两遍同乘 x n x^n x n : x n F ( 1 x ) = x m G ( 1 x ) x n − m Q ( 1 x ) + x n − m + 1 x m − 1 R ( 1 x ) x^nF(\frac{1}{x})=x^mG(\frac{1}{x})x^{n-m}Q(\frac{1}{x})+x^{n-m+1}x^{m-1}R(\frac{1}

C++多项式除法的探讨

大兔子大兔子 提交于 2020-01-13 08:45:21
最近的一项工作就是用vector实现多项式类,这个类需要完成多项式的数据结构的定义以及基本运算,包括加减乘除,前三个还比较容易,对于多项式的除法,因为有除不尽的情况,比如: 计算 其结果是: 明显是除不尽的,但是按照普通的除法去做,余数就会被舍弃,当涉及到求值或者求导时,就会产生极大的误差,尤其是在实现牛顿法求解高次多项式的数值解时,需要计算迭代点的函数值以及导数值,余数的舍弃必然使函数值产生偏差,其导数值也必然不准,也就使最后产生不靠谱的结果。 解决方案有两种思路,也是我自己的思考过程,第一种,我想通过指针的形式将多项式除法的结果和余数都返回,然后在计算函数值和导数值的时候,需要将余数和除数再次相除,这样做确实可以解决问题,但是,前提是需要将被除数,除数区分开,在单次除法的计算中问题不大,但是涉及到复杂函数构成时,就显得困难了。 所以产生了第二种解决方案,就是遇到除法,不去计算结果,而是构造一个结构体,这个结构体有两部分构成,一部分是被除数,一部分是除数,也就是变成分子分母的形式 template<typename T> struct Div_Poly { Poly<T> Numer_Poly; //分子--被除数 Poly<T> Denom_Poly;//分母--除数 } 在涉及除法时,就直接传值操作,而不进行实际的除法运算,求函数值时直接将函数值代入,求导数值时