缩放因子以匹配具有最小偏差的曲线

时间:2014-01-04 22:11:19

标签: algorithm matlab optimization

我有一组曲线,其形状与我的目标曲线不同。我试图通过将它们的幅度乘以比例因子来将这些曲线与目标曲线相匹配。我只需要一个最佳比例因子,以便我的数据遵循目标的形状,在指定范围内偏差最小。我应该在这种情况下使用多目标优化还是有更好的算法?

以下是我的数据和目标曲线的样本矢量数组:

x=[ 0.1000  0.1072  0.1149  0.1232  0.1320  0.1415  0.1517  0.1626  0.1742...
     0.1868  0.2002  0.2146  0.2300  0.2465 0.2643  0.2833  0.3036  0.3254...
      0.3488 0.3739  0.4008  0.4296  0.4605]

data=[0.6080 0.6413 0.668 0.6888 0.6923  0.6490 0.6018 0.6461  0.6862  0.6519 0.7454...
    0.9117 0.9508 0.8383 0.6244 0.5010 0.4517 0.4484 0.4131 0.3792 0.3502 0.3300 0.3235]


target=[0.8666 0.8810 0.9026 0.9275 0.9542 0.9828 1.0120 1.0342 1.0578 1.0829 1.1096...
   1.1411 1.1749 1.2110 1.2413 1.2713 1.2955 1.2955 1.2817 1.2659 1.2618 1.2559 1.2034]

如果我想匹配x = 0.2时的振幅,我只需将此时的曲线幅度除以找到比例因子,然后将数据与该因子相乘,但缩放曲线的形状会导致其他目标的偏差很大。 x值范围。实际上,我无法弄清楚如何找到适合x = 0.2的最佳比例因子,以及缩放数据曲线跟随目标的偏差最小。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用fminbnd。它的第一个参数是要最小化的函数的句柄。该函数应该是您的“偏差”,这取决于优化参数,在本例中为scale

您需要指定优化标准(即,如何定义“偏差”)。我建议您使用normnorm的第二个参数表示您使用的是哪种规范。将其设置为2对应于最小化平方误差。有关其他选项,请参阅doc(上面的链接)。

optScale = fminbnd(@(scale) norm(scale*data-target, 2), .1, 10);

使用您的示例数据和2范数标准,最佳比例(最小化曲线之间的平方误差)是

>> optScale = fminbnd(@(scale) norm(scale*data-target, 2), .1, 10)
optScale =
    1.6921