You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:01:06