如何在Mathematica中找到本地最小值和列表?

Mar*_*tin 2 wolfram-mathematica list minimum

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

我已经找到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}]}]
Run Code Online (Sandbox Code Playgroud)

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

有没有办法做到这一点?

Bil*_*ill 6

用于找到最小值的旧技巧是找到数据的最大值-1倍.

data = {1, 3, 1, 3};FindPeaks[data]
Run Code Online (Sandbox Code Playgroud)

这使

{{2, 3}, {4, 3}}
Run Code Online (Sandbox Code Playgroud)

为了最小化使用否定数据

FindPeaks[-data]
Run Code Online (Sandbox Code Playgroud)

这使

{{1, -1}, {3, -1}}
Run Code Online (Sandbox Code Playgroud)

x位置是正确的,但y被否定.因此,将这些y值乘以-1倍.

Map[({x, y} = #; {x, -y}) &, FindPeaks[-data]]
Run Code Online (Sandbox Code Playgroud)

这使

{{1, 1}, {3, 1}}
Run Code Online (Sandbox Code Playgroud)

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

  • 该文档使用相同的技巧来查找山谷:http://www.wolfram.com/mathematica/new-in-10/enhanced-sound-and-signal-processing/valley-detection.html (2认同)