4

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

我发现的问题是,如果我JacobPattern的太稀疏(例如,在 500x500 雅可比行列式中只有几行),求解器将忽略它,而是计算完整的雅可比行列式。

此行为未记录在案;任何人都可以进一步阐明它吗?我希望能够强制求解器使用 myJacobPattern无论它多么荒谬,或者它的梯度有多浅。


更新:

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

4

1 回答 1

0

我的猜测如下:

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

至于故意将错误的雅可比行列式交给算法,您为什么要这样做?

于 2012-11-09T18:46:44.943 回答