我正在使用 MATLAB 的 lsqnonlin 函数,并且我试图通过选项 JacobPattern 设置用户定义的 Jacboian 模式。我为要使用的 trust-region-reflective 算法设置了偏好,来自 outputlsqnonlin 表明这确实是求解器使用的算法(使用 JacobPattern 选项需要)。

我发现的问题是,如果我的 JacobPattern 太稀疏(例如,500x500 Jacobian 矩阵中只有几行),求解器会忽略它,而是计算完整的 Jacobian 矩阵。

这种行为没有记录;任何人都可以进一步了解它吗?我希望能够强制求解器使用我的 JacobPattern,无论它有多荒谬,或者它的梯度有多浅。

更新:

我做了一些更多的实验,似乎只有在雅可比模式中有任何全零行时才重新计算雅可比行列式。任何数量的全零列都可以,只要每行中至少有一个“1”。虽然这有助于避免这个问题,但问题仍然存在——为什么求解器要求每个因变量都具有相关的梯度?无论如何,我希望忽略用户定义的选项至少值得警告......

最佳答案

我的猜测如下:

如果你看看雅可比的实际含义,你会发现全零行意味着相应的函数(定义的向量函数的一部分)独立于任何变量。因此,将其添加到优化中是完全没有意义的。

至于故意将错误的雅可比矩阵交给算法,
你为什么想这么做?

关于matlab - MATLAB lsqnonlin 中用户定义的雅可比模式被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11672319/

10-12 22:07