我正在使用MATLAB的lsqnonlin
函数,我试图通过选项JacobPattern
设置用户定义的Jacboian 模式。我设置了要使用的trust-region-reflective
算法的首选项,而来自output
的{{1}}表示这确实是解算器使用的算法(使用{{1}所需的算法选项)。
我发现的问题是,如果我的lsqnonlin
太稀疏(例如,在500x500雅可比行列式中只有几行),解算器会忽略它,而是计算完整的雅可比行列式。
此行为未记录;任何人都可以进一步了解它吗?我希望能够强制求解器使用我的JacobPattern
,无论它是多么荒谬稀疏,或者它的渐变有多浅。
更新
我已经完成了一些实验,如果雅可比模式中存在任何全零行,则雅可比行列似乎只会被重新计算。任何数量的全零列都可以,只要每行至少有一个'1'。虽然这有助于避免这个问题,但问题仍然存在---为什么求解器要求每个因变量都有一个相关的梯度?在任何情况下,我都希望忽略用户定义的选项至少值得警告......
答案 0 :(得分:0)
我的猜测如下:
如果你看看jacobian实际意味着什么,你会看到全零行意味着相应的函数(定义的向量函数的一部分)独立于任何变量。因此,将其添加到优化中是完全没有意义的。
至于故意将错误的雅可比人交给算法, 你为什么要那样做?