0

我已经实现了一个压缩算法,假设我执行它,调用:

myCompression(data, th)

th参数是一个介于 0 和 1 之间的实数。有时这可能是非常小的数字,例如 212.19e-013。

num = length(myCompression(data, th))

给了我压缩后剩余的数据数量。如果我想让num更大,我需要选择一个较低的参数。反之亦然,如果我想要更高的num,我必须选择更低的th

现在的问题是:我想找到一个合适的th使得num等于我选择的目标数。如您所知,find th是一项非常漫长的工作,我会实现一种蛮力算法,它可以找到满足我需要的th 。我写了这个:

target = 304;
th = 2.49e-011;
num = 0;

while(num~=target)    
    num = length(MCSimplify3(time, latitudes, longitudes, th));
    disp(horzcat('tol: ', num2str(th), ' num: ', num2str(num)));

    if (num>target)
        th = th+(rand()*th);
    else
        th = th-(rand()*th);
    end

    th = abs(th);
end

前一个脚本启动但从未捕获目标。我想这个问题是由于加减(rand()*th)法太大,所以一次在目标之上,一次在目标之下。所以继续摆动,永远不要看到结果,正如你在这里看到的:

tol: 2.67e-012 num: 333
tol: 4.0685e-012 num: 303
tol: 2.9909e-012 num: 320
tol: 3.1953e-012 num: 316
tol: 4.5895e-012 num: 298
tol: 3.7916e-012 num: 308
tol: 3.8906e-012 num: 308
tol: 7.6049e-012 num: 257
tol: 4.3302e-012 num: 299
tol: 1.6646e-013 num: 624
tol: 2.9337e-013 num: 562
tol: 2.9553e-013 num: 561
tol: 4.965e-013 num: 503
tol: 8.47e-013 num: 448
tol: 1.3934e-012 num: 391
tol: 2.163e-012 num: 350
tol: 2.6348e-012 num: 335
tol: 4.6699e-012 num: 296

有人能帮我吗?

4

3 回答 3

1

给你的猫剥皮的方法不止一种,你需要做的第一件事是 remove rand,因为它是一个高度不可预测的参数。话虽如此,我将您推荐给Nelder-Mead

从更实际的角度来看,您应该将 rand() 替换为常数(例如 0.1),或测量 num 和目标之间的距离乘以变化参数的变量。

或者,您可以使用 fminsearch(使用 Nelder-Mead)之类的最小化例程,并可能对不连续性进行一些小的调整。

在无法运行代码的情况下很难提供更多信息(即我需要 MCSimplify3)。

于 2012-04-23T16:49:55.270 回答
1

首先,绘制您向我们展示的数据的图表。这应该让您清楚地了解在哪里搜索一个值,th该值可以为您提供您所寻求的目标值。

th其次,通过正确范围内的值实现某种搜索;即使是对包含所需目标值的区间进行简单的二等分搜索也会比您当前的方法更好。

只是观察您的数据表明,对于 的目标值304, 的值th应该在范围内(3.7916e-012,4.0685e-012)

于 2012-04-23T16:18:20.987 回答
0

有了High Performance Mark的宝贵提示,我就是这样解决的。

target = 304;
len = 0;

a = 0;
b = 1;

while(len~=target)
    c = (a+b)/2;
    len = length(MCSimplify3(time, latitudes, longitudes, c));
    if(len<target)
        b = c;
    end
    if (len>target)
        a = c;
    end
    if (len==target)
        disp(horzcat('tol: ', num2str(th), ' num: ', num2str(len)));
    end
end
于 2012-04-23T17:09:30.080 回答