圧縮アルゴリズムを実現しました。次のように呼び出して実行するとします。
myCompression(data, th)
thパラメーターは 0 から 1 の間の実数です。212.19e-013 のように非常に小さい数値になる場合もあります。
num = length(myCompression(data, th))
圧縮後に残っているデータの数を教えてくれました。numを大きくしたい場合は、より低いthパラメータを選択する必要があります。逆に、より高いnumが必要な場合は、より低いthを選択する必要があります。
問題は次のとおりです。numが選択したターゲット番号と等しくなるような適切なthを見つけたいのです。ご存知のように、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)
が大きすぎるという事実によるものだと思います。つまり、1 回は目標を上回り、もう 1 回は目標を下回っています。したがって、スイングを続けて、結果をキャッチしないでください。
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
誰かが私を助けることができますか?