Matlab中用spaps替换cscvn时如何保留点的原始选取顺序?
问题:Matlab中用spaps替换cscvn实现按选点顺序的平滑样条拟合
我在Matlab中通过鼠标选取数据点并进行样条拟合,使用getcurve()函数获取点坐标与插值曲线:
[xy, spcv] = getcurve()
该函数返回鼠标选取点的x、y坐标:
x = [ -0.8103 -0.6740 -0.5599 -0.5120 -0.4936 -0.4530 -0.4494 -0.4494 -0.4494 -0.4751 -0.5157 -0.6409 -0.6667 -0.7772 -0.7772 -0.6998 -0.5304 -0.4641 -0.2431 0.0110 0.1142 0.1989 0.2836 0.3499 0.3499 0.4125 0.5267] y = [0.8621 0.8388 0.7640 0.7547 0.7266 0.6472 0.5911 0.5257 0.4696 0.3668 0.2967 0.2360 0.2220 0.0724 -0.1472 -0.1939 -0.2874 -0.4743 -0.5304 -0.5257 -0.4930 -0.3668 -0.2967 -0.2593 -0.2593 -0.2827 -0.3715]
绘制getcurve返回的spcv曲线可得到预期的插值效果,查看代码发现其使用cscvn生成参数化自然三次样条,会经过所有点且严格遵循点的选取顺序。
我尝试用三次平滑样条spaps替换:
sp = spaps(x, y, 0.); xx = -1:0.01:2; plot(xx, fnval(sp, xx), 'b', 'linewidth', 2); hold on; plot(x, y, 'ko');
但生成的曲线是按x从小到大拟合,而非点的选取顺序,无法得到预期的连续平滑曲线。
需要解决的问题:在getcurve中用spaps替换cscvn,同时保留点的原始选取顺序。
内容的提问来源于stack exchange,提问作者user1285419
相关产品推荐
相关产品推荐

