直视夜空的顶点
也说插值
上一篇 /
下一篇 2007-03-30 00:15:20
我们用的教材《计算方法引论》(徐萃薇、孙绳武第二版)实在是比较老了点,里面有很多不加思索的“算法”,数学上合理,数值上不稳;或是被认为是trivial而不提的东西,一编程就不是那回事了……
NR是好,而且作者牛B,呵呵,不过要还的(“出来混,要还的”)。
今天用四种方法测试了个简单的Cubic spline插值(边界条件为指定一阶导数),同一组数据,出来的结果大相径庭。四种方法是NR里的、教材上公式直接套的、IMSL库里的,还有MATLAB自带的。
NR的方法基于节点上二阶导数的求值,用的是三对角稀疏矩阵的求解。
书上死算的方法是求出节点的一阶导数,也是组成一个三对角矩阵为系数矩阵的线性系统。在MATLAB里求解的时候,直接用了sparse(M)命令然后反斜线算符求解,据说是“自动优化”的(真的吗?)
IMSL的算法是黑箱的,库都编译成.lib静态链接库了。在Fortran里调IMSL里的子程序,然后数据倒到MATLAB里
MATLAB的spline函数应该是个大类里的同名重载,还没来得及研究代码。据文档说是“自动优化”的。
这些所谓的“优化”是对什么优化的呢?
我的数据只有5个点加两个端点导数:
x=[.25, .30, .42, .45, .53]
y=[.5000, .6500, .5500, .6708, .6000]
左右端点导数分别是1.000和-5.000
看看吧
NR和课本的算法都不能反映出右端点的“陡降”。IMSL的算法似乎“抖动”很大。其实在用Cubic spline还有意义的问题上,大家给出的结果差别很小。我有意选了个比较“抖”的数据,试图撕裂算法能忍受的限度。
详细讨论超出本“文”范围 :-P
我们,继续 :)
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG: