0

個別のデータである多くの異なるデータセットがあります。極小値は必ずしも最小のデータである必要はありませんが、最初のピークの周りの谷です。私は最初のピークの周りの最初の谷のインデックスを見つけようとしています。私の考えは、2つの隣接するポイント間の差を検索することです。差が臨界値よりも小さい場合、および前方のポイントが後方のポイントよりも大きい場合、それが必要なポイントです。例えば

for k=PEAK_POS:END_POS
  if ( (abs(y(k)-y(k-1))<=0.01) && (y(k-1)>y(k)) )
    expected_pos = k;
    break;
  end
end

これは一部のデータセットでは機能しますが、一部のデータセットではサンプルステップが異なる可能性があるため、クリティカル条件を変更する可能性があるため、すべてでは機能しませんが、分析するデータセットが非常に多いため、各セットを手動で分析することはできないと思います。私はその最小値を見つけるためのより良い方法を探しています。ありがとう。

4

3 に答える 3

1

@JakobS。が述べたように、最適化理論は数学の大きな分野であり、独自のジャーナルや会議などがあります。

あなたの問題は、最適化ツールボックスを正当化するほど複雑に聞こえません(私が間違っている場合は私を訂正してください)。fminsearchそれはあなたのニーズに十分であるように聞こえます。これがその簡単なチュートリアルです。help fminsearchまたはを入力doc fminsearchして詳細を確認してください。

% example cost function to minimize
z = @(x) sin(x(:,1)).*cos(x(:,2));

% Make a plot 
x = -pi:0.01:pi;
y = x;
[x,y] = meshgrid(x,y);
figure(1), surf(x,y, reshape(z([x(:) y(:)]), size(x)), 'edgecolor', 'none')

% find local minimum
[best, fval] = fminsearch(z, [pi,pi])

結果は

best =
     1.570819831365890e+00     3.141628097071647e+00
fval =
    -9.999999990956473e-01

これは明らかに、予想される局所最適の非常に合理的な近似です。

于 2012-08-09T06:58:17.800 に答える
0

最適化問題は非常に幅広いトピックであり、すでに多くのことが行われています。独自のアルゴリズムのコーディングを開始することは必ずしも良い考えではありません。matlabには、最適化ツールボックスがあります。これは役立つ場合があります:http: //www.mathworks.de/products/optimization/

于 2012-08-09T06:31:00.023 に答える
0

最小値の左側がその派生<0で、右側が>0であるという条件を使用します。

この例のように:

x = cumsum(rand(1,100));  % nonuniform distance
y = 5*sin(x/10)+randn(size(x)); % example data
dd = diff(y);
ig = [false (dd(1:end-1)<0 & dd(2:end)>0) false]; % patch to correct length
plot(x,y)
line(x(ig),y(ig),'Marker','+','LineStyle','none','Color','r')

そして、あなたが統計するとき、あなたはピークの後の最初のものが欲しいです:

x_peak = 15;
candidates = x(ig);
i_min=find(candidates>x_peak,1,'first');
candidates(i_min)
于 2012-08-09T10:27:50.847 に答える