最初に、x のリストを生成します。
1: [1, 2, 3, ..., 21] 1: [0, 1, 2, ..., 20] 1: [0, 0.25, 0.5, ..., 5] . . . v x 21 RET 1 - 4 / s 1
次に、Bessel 関数の値を計算します。
1: [0., 0.124, 0.242, ..., -0.328] . V M ' besJ(1,$) RET
(1 TAB V M f j でも同じ事ができます。)
最大値を分離する方法は、V R X で最大値を計算し、 この最大値と全ベッセル値を比較することです。
2: [0., 0.124, 0.242, ... ] 1: [0, 0, 0, ... ] 2: [0, 0, 0, ... ] 1: 0.5801562 . 1: 1 . . RET V R X V M a = RET V R + DEL
上の最後のステップのように、最大値が唯一かどうか確認するのは良い考えです。 (結局、 sin(x) のプロットは多くの点が最大値 1 に一致したかもしれません。)
ここで得たベクトルは、ただ1個の 1 が最大値に対応する x を指し示します。 これを対応する x の値に変換するのは今や簡単なことです。
2: [0, 0, 0, ... ] 1: [0, 0., 0., ... ] 1: 1.75 1: [0, 0.25, 0.5, ... ] . . . r 1 V M * V R +
もし a = が複数の最大値を見つけていた場合、
この方法の結果は最大値を示す x の合計になってしまい、
あまり便利ではありません。
こんな時は代わりに v m (calc-mask-vector
) を使うことができました。
このコマンドは、「マスク」ベクトルのゼロに対応する「データ」ベクトルの要素を
削除するので、この例では最大値を示す x 値のベクトルを残します。
組込みの a X コマンドは、もっと効率的な方法で関数を最大化します。 具体例として、 a X を使って同じ区間で `besJ(1,x)' を最大化してみましょう。
2: besJ(1, x) 1: [1.84115, 0.581865] 1: [0 .. 5] . . ' besJ(1,x), [0..5] RET a X x RET
a X の出力は、関数を最大にする x の値と最大値を含むベクトルです。 ごらんのように、先の単純サーチの結果は正解にかなり近いです。
Go to the first, previous, next, last section, table of contents.
利用度数