首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)(2)

三次样条插值(Cubic Spline Interpolation)及代码实现(C语言)(2)

b. 固定边界(Clamped)
首尾两端点的微分值是被指定的,这里分别定为A和B。则可以推出


将上述两个公式带入方程组,新的方程组左侧为

c. 非节点边界(Not-A-Knot)
指定样条曲线的三次微分匹配,即


根据 ,则上述条件变为


新的方程组系数矩阵可写为:



右下图可以看出不同的端点边界对样条曲线的影响:


1.3 算法总结假定有n+1个数据节点

a. 计算步长 (i = 0, 1, …, n-1)
b. 将数据节点和指定的首位端点条件带入矩阵方程
c. 解矩阵方程,求得二次微分值。该矩阵为三对角矩阵,具体求法参见我的上篇文章:三对角矩阵的求解
d. 计算样条曲线的系数:

其中i = 0, 1, …, n-1
e. 在每个子区间 中,创建方程

2. C语言实现用C语言写了一个三次样条插值(自然边界)的S-Function,代码如下:
View Code

3. 例子以y=sin(x)为例,  x步长为1,x取值范围是[0,10]。对它使用三次样条插值,插值前后对比如下:
继承事业,薪火相传
很好的代码分析,路过帮顶
返回列表