matlab提供了一些三次样条插值函数spline
以及样条工具箱函数,如
http://blog.csdn.net/wuzoujing/article/details/4943251
请问通过这些函数拟合之后,如何获得拟合后的曲线方程?
那么第一行就表示 0.1177*(x-1)^3 - 0.7711*(x-1)^2 +0.7212*(x-1) + 0.8415
第三行是 0.1177(x-3)^3 -0.00649(x-3)^2 -0.9508*(x-3) +0.1411
是这样吗
就是说第n行的区间如果是m ~ m+1 , 那么这一行的多项式就是关于 (x-m)的?
是的
追问另外 我看样条工具箱的函数 sp = spmak(knots,ctrlpoints)(就是我的问题里那个链接),好像返回值sp结构体中不包含方程,您能否帮我看看?
非常感谢!!!
还是这个例子
clear;clc;
x=1:4;
y=sin(x);
b=spapi(3,x,y)
得到b如下
b =
form: 'B-'
knots: [1 1 1 2.5000 4 4 4]
coefs: [0.8415 1.2500 -0.0788 -0.7568]
number: 4
order: 3
dim: 1
说明这个插值表达式是由4个3阶b样条函数加权相加得到,权值为coefs,即
y=coefs[1]*B[1][3](x)+coefs[2]*B[2][3](x)+coefs[3]*B[3][3](x)+coefs[4]*B[4][3](x)
其中b样条函数B[j][k](x)通过如下递归关系得到:
B[j][k](x)=B[j][k-1](x)*(x-knots[j])/(knots[j+k-1]-knots[j])+B[j+1][k-1](x)*(knots[j+k]-x)/(knots[j+k]-knots[j+1])
其中初值B[j][0](x)是一个分段函数,满足当x∈(knots[j],knots[j+1]),B[j][0](x)=1,否则B[j][0](x)=0
实际计算插值时直接使用spval函数即可。
首先 非常感谢您耐心的解答
但我给的例子是:
先给定一些点,用spmak函数进行b样条拟合,最后得出结果是:
这样的情况如何获得方程呢??
一样的,只不过你插值了x和y两个,所以coefs是两行,也就是第一行表示x的b样条插值函数,第二行表示y的b样条插值函数。
按照你的智力水平我觉得应该没必要一一赘述吧,相信你会举一反三,否则什么都说要累死的。
还有,matlab的帮助很详细的,相信以你的智商90%以上问题都能通过帮助解决,没必要都求助。
谢谢你鄙视我的智力,但是我觉得得出的coefs就是我前面输入的ctrlpoints,knots也是我原来输入的
追答你本来就是用spmak来直接定义的啊,你又不是用spapi之类的插值函数来插值的。