如何在 Mathematica 中找到局部最小值和列表?

How can I find the local minimum values and of a list in Mathematica?

我有干涉图像,我必须计算能见度。为此,我必须找到强度的最小值和最大值 "oscillations".

我已经用 FindPeaks 函数找到了最大值,但我不知道如何找到最小值。

img = Import["/home/martin/Dokumentumok/Egyetem/4. félév/Modern fizika labor/15. Kvantumradí­r/Képek/1a.JPG"];
dat = ParallelSum[ImageData[img, "Byte"][[n]], {n, 3456}];
peaks = N[FindPeaks[dat, 1.2, 1.2, 90000]];
Show[{ListLinePlot[dat, AxesLabel -> {"Pixel", "Intenzitas"},ImageSize -> Full, PlotTheme -> "Classic"], ListPlot[Tooltip[peaks], PlotStyle -> {PointSize[0.006], Red}]}]

如果我将鼠标悬停在红点上,它会显示强度值和位置。如果我能用最小值做同样的事情,那就太好了,但不幸的是我找不到像 FindPeaks 这样的函数。

有什么办法吗?

用于查找最小值的一个老技巧是查找 -1 乘以数据的最大值。

data = {1, 3, 1, 3};FindPeaks[data]

这给出了

{{2, 3}, {4, 3}}

为了得到最少的使用否定数据

FindPeaks[-data]

这给出了

{{1, -1}, {3, -1}}

x位置正确,y取反。所以将 -1 乘以那些 y 值。

Map[({x, y} = #; {x, -y}) &, FindPeaks[-data]]

这给出了

{{1, 1}, {3, 1}}

注意:# 和 & 是一个 Mathematica shorthand,用于定义一个带有名为 # 的参数的小函数。对于新用户来说可能有点混乱,但一旦理解它就可以快速编写且易于使用。