在Matlab中最小化简单目标的最佳方法

时间:2012-10-12 10:29:31

标签: matlab optimization

在此图像unshifted http://i49.tinypic.com/30m35zb.png中找到蓝线的x轴偏移的最佳方法是什么,它与红线匹配?结果必须看起来像这个图像shifted http://i47.tinypic.com/14ikd44.png)。在MATLAB中有像fmi​​nunc这样的复杂函数,但我必须处理一些时间限制,所以我想知道是否有更有效的方法。

编辑:数据来自模拟环境中激光扫描的距离测量。在x轴上,您可以看到以弧度表示的每次扫描的方位与在y轴上以米为单位测量的范围。对于红点(参考扫描),轴承确实均匀地间隔开。参考扫描始终如此,但当前扫描(蓝点)不是这样。

编辑:红点数据

-1.5708    6.8542
-1.3963    6.9530
-1.2217    7.2137
-1.0472    7.6592
-0.8727    8.3326
-0.6981    9.2984
-0.5236   10.6477
-0.3491   12.5060
-0.1745   15.0092
     0   18.2745
0.1745   22.3368
0.3491   27.1113
0.5236   32.4112
0.6981   38.0010

蓝点

-1.3963    7.0092
-1.2217    7.3112
-1.0472    7.8065
-0.8727    8.5420
-0.6981    9.5872
-0.5236   11.0407
-0.3491   13.0360
-0.1745   15.7225
     0   19.1849
0.1745   23.4301
0.3491   28.3466
0.5236   32.4114

2 个答案:

答案 0 :(得分:1)

好吧,这不是“最好的”方式,但如果你不知道描述曲线的正确模型,那就是一种方式:

% your first plot
figure(1), clf, hold on
plot(red(:,1), red(:,2), 'ro-')
plot(blue(:,1), blue(:,2), 'bo-')

% approximate reference with splines, so it can be evaluated anywhere
ppred = spline(red(:,1),red(:,2));

% minimize the distance between the curves
f = @(x) norm( ppval(ppred, blue(:,1)+x)-blue(:,2) );    
x0 = fminsearch(f, 0);    
blue(:,1) = blue(:,1)+x0;

% pretty close to your second plot
plot(blue(:,1), blue(:,2), 'ko-')

答案 1 :(得分:0)

为什么不进行网格搜索?制作偏移可能性网格,如delta_x = [0.0001:0.2:0.0001],然后在偏移网格中的每个位置评估目标函数(最小二乘?),并选择误差最小的网格。如果您使用fminfunc的时间太短,那么网格搜索可能是可接受的近似值。