C++多项式除法的探讨
最近的一項工作就是用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
其他為早期版本。
總結
以上是生活随笔為你收集整理的C++多项式除法的探讨的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用正则表达式大全,手机、电话、邮箱、身
- 下一篇: 基于C++的OpenCV(八)图像处理