我经常使用 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 个负数)。
然后您可以检查收敛的结果。