我正在努力依靠計算多項式插值的Neville算法。更多關於它你可以在http://en.wikipedia.org/wiki/Neville%27s_algorithm找到。在某一點計算多項式對我來說不是問題。有很多關於它的來源。我的問題依賴於我不想在某個點計算多項式,我想以這種形式得到多項式:a_0 + a_1x + ... + a_nx^n
。我不知道如何開始。你能給我一些提示嗎?從Neville算法的符號計算多項式
2
A
回答
2
Neville算法的變體允許計算一些常數(不是多項式係數),以便與另一個函數一起使用,該函數可以評估任何點處的插值多項式。後一個功能很容易區分。下面的C代碼是我使用的,我相信它工作正常。但是我懷疑你可能會對多項式插值的工作情況感到失望,除非你提供的數據確實來自多項式。如果你可以很容易地在很多點上採樣數據,那麼通過對數據進行最小二乘擬合,找到一個多項式可能會更好(表示爲chebyshev多項式的和)。
// fill C (allocated if null) with params for interpolating polynomial
// use params with interp_poly_eval
// !! these are NOT polynomial coefficients.
double* interp_poly(Int deg, const double* x, const double* y, double* restrict C)
{
double* c = C ?: calloc(deg+1, sizeof *c);
Int i, j;
memcpy(c, y, (deg+1)*sizeof *y);
for (i=1; i<=deg; i++)
{ for (j=deg; j>=i; j--)
{ c[j] = (c[j]-c[j-1])/(x[j]-x[j-i]);
}
}
return c;
}
double interp_poly_eval(Int deg, const double* c, const double* x, double X)
{
double p = c[deg];
Int i = deg;
while(--i >= 0)
{ p = c[i] + (X-x[i])*p;
}
return p;
}
// as above but also returns derivative of the polynomial through pdp
double interp_poly_eval_d(Int deg, const double* c, const double* x, double X, double* pdp)
{
double p = c[deg];
double dp = 0.0;
Int i = deg;
while(--i >= 0)
{ dp = (X-x[i])*dp + p;
p = c[i] + (X-x[i])*p;
}
*pdp = dp;
return p;
}
1
您需要具有可以表示單變量(一個變量)多項式的類/數據結構。那麼很容易計算出實際的多項式用本場比賽的算法本身,即
P[0,0] = y[0] ; constant
P[1,1] = y[1] ; constant
,然後遞歸
P[a,b] = P[a,b-1] * x[b]/C + P[a,b-1] * -X/C + P[a+1,b] * -x[a]/C + P[a+1,b] * X/C
其中X是多項式「X(即其係數),而不是僅僅在單個點「(即一階單項式),C是常數X [b] -X [a]。
當您按照慣例在算法中進行遞歸時,這將爲您提供實際的多項式。注意,以上所有算法均爲多項式,即P [a,b-1] * x [b]/C表示多項式P [a,b-1]乘以常數x [b]/C(第b點除以C的x座標)。
如果你想得到一個確切的結果,使用任意精度理性運算包(例如C/C++的GMP)。或者,使用浮點數計算,但最終可能會影響到您的舍入誤差。
相關問題
- 1. 在MatLab中實現Neville的算法
- 2. 計算二項式係數的算法
- 3. 計算三次多項式
- 4. CRC多項式計算
- 5. 泰勒多項式計算
- 6. 計算多項式函數
- 7. 計算給定多項式的反向多項式以計算CRC
- 8. 用於計算多項式逆的算法
- 9. 式計算列號
- 10. 僞多項式算法 - 算術
- 11. 提出多項式算法
- 12. 多項式時間算法
- 13. 數獨多項式算法?
- 14. 多項式圓弧算法?
- 15. C++中的符號計算
- 16. C++中的符號計算
- 17. 如何計算大O符號遞歸算法的複雜性?
- 18. 按符號計算餘額
- 19. 什麼是符號計算?
- 20. 如何計算多項式導數?
- 21. numpy高效地計算多項式
- 22. 多項式運算
- 23. 2-SAT相關算法的多項式算法
- 24. 計算從形式
- 25. 計算攤鋪模式的算法
- 26. 算法的大O符號
- 27. 計算多列的模式
- 28. 計算字符串中的符號
- 29. C++多個運算符計算器
- 30. 如何計算傳遞函數矩陣的符號計算?
在Numerical Recipes中有這方面的材料,你可能想諮詢一下。然而,他們強調,計算係數是一個微妙的問題,這樣很容易就會失去很多精確度,並且越多的點越多,你越容易失去精度。你真的需要係數嗎?做什麼的? – dmuir 2014-10-30 17:56:04
我需要係數,因爲我需要計算這個多項式的導數。 – MC2DX 2014-10-30 18:02:20
您可能想閱讀http://en.wikipedia.org/wiki/Runge%27s_phenomenon – dmuir 2014-10-31 12:21:13