1

我遇到spap2了一些数据的奇怪结果:

在此处输入图像描述

实际数据是蓝色曲线,红色圆圈是我正在使用的节点,黄色曲线是三次样条曲线的显示。

代码很简单,我不知道是什么问题:

spgood = spap2(knots_zY, 4, ec, Y);
plot(ec, Y); 
hold on;
scatter(knots_zY, Y(ec==knots_zY));
fnplt(spgood)

ec是向量-4.12:0.02:-0.54。Y 是以下向量:

4.1291    4.0732    4.0173    4.2624    4.3826    4.3267    4.2708    4.4367    4.3808    4.1031    4.1721    3.8152    4.1572
4.1013    4.0454    3.5916    3.8367    3.7808    3.8218    3.6690    3.9141    3.7333    3.8023    3.3204    3.5656    3.4305
3.5787    3.3978    3.3419    3.2860    3.4062    3.4753    3.5706    3.2385    3.1826    3.4947    3.5315    3.1746    3.2089
3.2276    3.1940    2.9162    3.0364    3.0263    2.8155    2.7596    2.9555    2.8996    2.9081    2.7322    2.8524    2.6397
2.7662    2.5279    2.5417    2.2005    2.3409    2.5108    2.5202    2.3359    2.3660    2.3100    2.1682    2.1123    2.2140
2.1288    2.1116    1.9856    2.0089    1.8845    1.9148    1.9308    1.7273    1.7642    1.7326    1.6606    1.7378    1.6570
1.5815    1.5701    1.4630    1.5503    1.5181    1.4385    1.3083    1.3168    1.2991    1.2523    1.1390    0.9988    1.0373
0.9913    1.0113    0.9754    0.8912    0.8790    0.7491    0.7557    0.7544    0.7119    0.7031    0.6843    0.6418    0.5938
0.5193    0.5334    0.4312    0.4839    0.4437    0.3992    0.3689    0.3287    0.3348    0.3076    0.2274    0.2174    0.1970
0.2188    0.1760    0.1384    0.1773    0.1342    0.1388    0.1097    0.0830    0.0782    0.0725    0.0863    0.0581    0.0466
0.0398    0.0431    0.0187    0.0187    0.0176    0.0167    0.0231    0.0033   -0.0117   -0.0016    0.0084   -0.0055   -0.0120
-0.0080   -0.0064   -0.0075   -0.0134   -0.0075    0.0012   -0.0077   -0.0024    0.0006    0.0010    0.0043    0.0016    0.0018
0.0042    0.0030    0.0029    0.0029    0.0021    0.0013   -0.0002   -0.0020   -0.0030   -0.0032   -0.0002   -0.0013    0.0035
0.0028   -0.0000   -0.0057   -0.0032    0.0020    0.0597    0.1835    0.5083    1.0275    1.6448    3.0549

节点由以下 12 个值定义:

-4.1200   -3.9400   -3.5400   -3.3000   -3.1400   -2.6800   -2.3600   -2.0600   -1.5000   -1.1600   -0.7000   -0.5400

我不期望很好的配合,但至少样条配合与结保持一致......但这里的结果是完全错误的。我对此感到困惑,无法查看此数据样本的问题所在。

注意:节点是在单独的算法中计算的,应该用于插值器,这里不是问题。问题是为什么样条拟合不通过结。

4

1 回答 1

1

我犯了几个错误。

首先,假设结果样条曲线将通过节点是错误的,因为它是一个近似值(参见这个答案)。近似值使整个原始数据变得平滑,因此没有办法粘在节点上。

其次,我忘了延长末端结以施加边界条件。默认边界条件是使所有导数(包括 0 阶)为零,从而产生此形状。然后,解决方案是augknt用于获得具有两个连续导数的实际三次样条:

spgood = spap2(augknt(knots_zY,4), 4, ec, Y);

结果拟合为:

更合身

考虑到结序列的选择,这要好得多。

于 2018-11-14T15:50:39.960 回答