FAQ

FAMOS

シーケンス / 関数top

シーケンス / 関数

ID.

Q. 極大値、極小値を絶対値が大きい順にトップ10を求めたい。

A.


直接求める関数は用意されてないため、下記の様なシーケンスで求めて下さい。

; 極大値、極小値の絶対値が大きい順にTOP10を求める
_sin = sin(ramp(0,0.01,500)*PI2)*ramp(0,0.01,500) ; サンプルデータ作成用
Data = Join(_sin, -Mirror(_sin)*0.8) ; サンプルデータ

_max = xMax( Data, -1e35) ; 極大値のX座標
_min = xMax(-Data, -1e35) ; 極小値のX座標
_x = Sort(Join(_max, _min), 1) ; 昇順で並べた極大値、極小値のX座標
_y = Value(Abs(Data), _x) ; 極大値、極小値の値の絶対値
_sort = Sort(XYof(_x, _y), 6) ; Y値(絶対値)の降順で並べ替え
_xy = XYof(_sort.x, Value(Data, _sort.x)) ; 元のY値でXY波形を作成
TOP10 = CutIndex(_xy, 1, 10) ; 上位10
TOP10Y = TOP10.Y ; 上位10のY値

; カーブウィンドウで表示
CwNewWindow("Cv1", "show")
CwSelectWindow("Cv1")
CwAction("reset")
CwPosition(0,0,640,480)
CwDisplaySet("title", "")
CwNewChannel("append last axis", Data)
CwNewChannel("append last axis", TOP10)
CwLineSet("type", 0)
CwLineSet("symbol", 8)
; マーカーで順位を表示
_th = Max(Data)-(Max(Data)-Min(Data))*0.1
for _iii = 1to 10 step 1
    CwNewElement("marker")
    CwSelectByIndex("marker", _iii)
    CwMarkerSet("x.type", 1)
    CwMarkerSet("y.type", 1)
    CwMarkerSet("x", TOP10[_iii].X)
    CwMarkerSet("y", TOP10[_iii].Y)
    CwMarkerSet("text", _iii)
    if _th < TOP10[_iii].Y
        CwMarkerSet("angle", -45)
    end
end
del _*


製品詳細はこちら

<< シーケンス / 関数に関するFAQ一覧へ戻る