如何在 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,用于定义一个带有名为 # 的参数的小函数。对于新用户来说可能有点混乱,但一旦理解它就可以快速编写且易于使用。
我有干涉图像,我必须计算能见度。为此,我必须找到强度的最小值和最大值 "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,用于定义一个带有名为 # 的参数的小函数。对于新用户来说可能有点混乱,但一旦理解它就可以快速编写且易于使用。