在MATLAB的lsqnonlin中用户定义的雅可比模式被忽略

时间:2012-07-26 15:05:18

标签: matlab mathematical-optimization least-squares

我正在使用MATLAB的lsqnonlin函数,我试图通过选项JacobPattern设置用户定义的Jacboian 模式。我设置了要使用的trust-region-reflective算法的首选项,而来自output的{​​{1}}表示这确实是解算器使用的算法(使用{{1}所需的算法选项)。

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

此行为未记录;任何人都可以进一步了解它吗?我希望能够强制求解器使用我的JacobPattern,无论它是多么荒谬稀疏,或者它的渐变有多浅。


更新

我已经完成了一些实验,如果雅可比模式中存在任何全零,则雅可比行列似乎只会被重新计算。任何数量的全零列都可以,只要每行至少有一个'1'。虽然这有助于避免这个问题,但问题仍然存在---为什么求解器要求每个因变量都有一个相关的梯度?在任何情况下,我都希望忽略用户定义的选项至少值得警告......

1 个答案:

答案 0 :(得分:0)

我的猜测如下:

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

至于故意将错误的雅可比人交给算法, 你为什么要那样做?