我經常使用 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 Ridge 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 個負數)。
然後您可以檢查收斂的結果。