私は、JSL の Minimize 関数を使用して非線形方程式を解くことがよくありますが、関数が収束に達しない場合があることに気付きました。スクリプトからこれらの結果を取得する方法はありますか?
多くの異なるデータのサブセットのモデルを解決するためのスクリプトを作成しています。パラメーター、最小化された目的、解決された各モデルの反復回数を取得できますが、結果が得られたかどうかはわかりません。最大反復回数に達したか、収束したか、収束に失敗しました。以下は、関数の例と、JMP の Milo による素晴らしい投稿の結果です。
https://community.jmp.com/t5/JMPer-Cable/Minimize-and-Maximize-Functions-in-JSL/ba-p/36355
x = 0;
y = 0;
{objVal, iters, gradient, hessian} =
Minimize(
((2 * x ^ 2 + 12 * x * y - y * 3)),
{x( -1, 1 ), y( -1, 1 )},
<<MAXITER></MAXITER>
以下の詳細はログ ウィンドウに出力されます。実行した各モデルの結果について「収束成功」を取得したいと考えています。任意の提案をいただければ幸いです。
nParm=2 ニュートン ********************************************** ********
Iter nFree オブジェクティブ RelGrad NormGrad2 リッジ nObj nGrad nHess Parm0 Parm1
0 2 0 0.125 0.5 0 1 1 1 0 0
1 1 -0.23568 29.52863 0.514107 2048 16 1 1 0.282987 -1
2 1 -1.92154 26.15693 0.310463 16 1 1 1 0.442808 -1
3 1 -6.6297 16.7406 0.002094 4 1 1 1 0.954236 -1
4 0 -7 . 0 1 1 1 1 1 -1
収束成功: 勾配
時間: 0.0166666666627862
x = 1;
y = -1;
objVal = -7;
繰り返し = 4;
勾配 = [-8, 9];
ヘシアン = [4 12, 12 0];
感謝@マークベイリーそれが私がやったことです。ログをクリアし、get log() を使用してウィンドウを取得し、循環して「収束」という用語を使用してアイテムを引き出します。私はそれを得るより直接的な方法があることを望んでいます。
Minimize() が戻った後、Get Log() 関数を呼び出すことができます。 構文は list = Get Log( < n > ) です。 結果は、ログ ウィンドウからの行のリストです。 オプションの整数引数を使用すると、最初の n 行 (n 正) または最後の n 行 (n 負) を選択できます。
その後、収束の結果を調べることができます。