我正在使用 MATLAB 的 lsqnonlin
函数,并且我试图通过选项 JacobPattern
设置用户定义的 Jacboian 模式。我为要使用的 trust-region-reflective
算法设置了偏好,来自 output
的 lsqnonlin
表明这确实是求解器使用的算法(使用 JacobPattern
选项需要)。
我发现的问题是,如果我的 JacobPattern
太稀疏(例如,500x500 Jacobian 矩阵中只有几行),求解器会忽略它,而是计算完整的 Jacobian 矩阵。
这种行为没有记录;任何人都可以进一步了解它吗?我希望能够强制求解器使用我的 JacobPattern
,无论它有多荒谬,或者它的梯度有多浅。
更新:
我做了一些更多的实验,似乎只有在雅可比模式中有任何全零行时才重新计算雅可比行列式。任何数量的全零列都可以,只要每行中至少有一个“1”。虽然这有助于避免这个问题,但问题仍然存在——为什么求解器要求每个因变量都具有相关的梯度?无论如何,我希望忽略用户定义的选项至少值得警告......
最佳答案
我的猜测如下:
如果你看看雅可比的实际含义,你会发现全零行意味着相应的函数(定义的向量函数的一部分)独立于任何变量。因此,将其添加到优化中是完全没有意义的。
至于故意将错误的雅可比矩阵交给算法,
你为什么想这么做?
关于matlab - MATLAB lsqnonlin 中用户定义的雅可比模式被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11672319/