2013-11-26 54 views
0

我想這裏描述來實現的數值receipes功能樣條和夾板:數值Recipies樣條

http://www.arcetri.astro.it/irlab/library/recipes/bookcpdf/c3-3.pdf - 第3.3節

的代碼仍然是相當混亂給我。有人可以解釋這個數字的含義嗎?

if(yp1>0.99e30) - 這個數字是多少?

或者如果有人可以給一些鏈接來解釋這更多,我將不勝感激。

謝謝。

+0

'0.99e30'指 「0.99乘以10升高到功率30」。用C語言編寫... – sgarizvi

回答

1

Yp1和Ypn分別是1和n處插值函數的第一個導數。 所以derivitive 1 = YP1

插值功能通過觀察在鏈路再次,這是我爲什麼他們使用(YP> 0.99e30) []存儲爲浮動u的取值意見。可以存儲在浮點數中的最小值爲1.2e-38(根據此鏈接http://floating-point-gui.de/formats/fp/)。現在,用於計算u對應的功能[1]是現在

u[1]=(3.0/(x[2]-x[1]))*((y[2]-y[1])/(x[2]-x[1])-yp1); 
Let (3.0/(x[2]-x[1]) = A, (y[2]-y[1]) = B, (x[2]-x[1])-yp1) = C. 
u[1]= A * (B/C); 

如果YP是一個非常大的數目(例如黃頁> 1e30)。這意味着C是一個很大的數字。這意味着B/C是一個非常小的數字,這意味着A *(B/C)〜= 0(爲了準確存儲,要小)。因此,基本上說,如果一階導數太大(或太小)不能用於不使用它的位置(稱爲自然樣條並且具有O(h^4)的誤差),並且如果它們可以使用它們,將使用一個鉗位樣條(它有一個誤差O(h^2),這意味着它比自然樣條方法更準確)

對於Ypn也是如此。

請注意,您應該在另一個檢查中添加if(Yp> 10e30)來檢查負值。 等。

if((Yp > 10e30 || Yp < -10e30)) 

同樣爲YPN

+0

1的斜率不是45度角嗎?所以,如果它是1或更大,那麼我們把它歸零?否則,我們做一些不可思議的計算?基本上樣條線計算功能和夾板得到該功能上的一個點? – user1876942

+0

推薦答案見上文 –