数字食谱样条

时间:2013-11-26 11:17:55

标签: spline

我正在尝试实现数字receipes函数样条和夹板,如下所述:

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

代码对我来说仍然很混乱。有人可以解释这个数字的含义吗?

if(yp1> 0.99e30 ) - 这是多少?

或者,如果有人可以提供一些链接来解释这一点,我将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:1)

Yp1和Ypn分别是1和n处插值函数的第一个推导。 所以在1 = Yp1

处推导出插值函数

再次查看链接,这是我对他们使用原因的看法(yp> 0.99e30) u []的值存储为浮点数。可以存储在float中的最小值是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是一个非常大的数字(例如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

相同