Matlab 有没有办法找到当地的minium?

Matlab 有没有办法找到当地的minium?,matlab,minimum,Matlab,Minimum,我有许多不同的数据集,它们是离散数据。局部最小值不是最小数据所必需的,但它是第一个峰值周围的谷值。我试图找到围绕第一峰的第一个山谷的指数。我的想法是搜索两个相邻点之间的差值,当差值小于某个临界值,当前进点大于后退点时,这就是我们想要的点。e、 g 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

我有许多不同的数据集,它们是离散数据。局部最小值不是最小数据所必需的,但它是第一个峰值周围的谷值。我试图找到围绕第一峰的第一个山谷的指数。我的想法是搜索两个相邻点之间的差值,当差值小于某个临界值,当前进点大于后退点时,这就是我们想要的点。e、 g

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
k=峰值位置:结束位置的

if((abs(y(k)-y(k-1))y(k)))
预期的_pos=k;
打破
结束
结束

这适用于某些数据集,但不适用于所有数据集,因为某些数据集可能具有不同的采样步骤,因此我们可能会更改临界条件,但我有太多的数据集要分析,我认为我无法手动分析每个数据集。我正在寻找更好的方法来找到最小值。谢谢。

优化问题是一个非常广泛的话题,已经做了很多,开始编写自己的算法不一定是个好主意。对于matlab来说,有一个优化工具箱,它可能会有所帮助:

正如@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

这显然是一个非常合理的近似预期的局部最优

我将使用最小值左边的条件,其导数为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)