matrix - 保证更安全的矩阵求逆的数值方法是什么?
问题描述
我正在尝试为 SEM(结构方程模型)问题开发一种算法(在梯度下降的框架内)。有一个参数矩阵 B(n*n),其所有对角线元素都固定为零。还有一个术语inv(IB)(I - B 的反转)在我的目标函数中。没有其他约束,例如 B 上的对称性。
我的问题是,我们如何确保 (IB) 在迭代中不是奇异的?
在这个问题中,由于目标函数的域不是整个R^n空间,似乎不能满足梯度下降收敛的严格条件。标准教科书会假设目标在整个空间中都有一个域R^n 空间。似乎梯度下降不会有保证的收敛性。
在迭代算法的更新中,目前我的实现是检查(IB)是否接近奇异,如果不是,则梯度下降的步长会被缩小。有没有更好的数值方法来处理这个问题?
解决方案
您可以尝试设置一个对数障碍,det(I-B)>0
或者det(I-B)<0
取决于哪个可以为您提供更好的结果,或者您是否有更多关于您的问题的信息。的梯度logdet
非常好https://math.stackexchange.com/questions/38701/how-to-calculate-the-gradient-of-log-det-matrix-inverse
您还可以计算 Fenchel 对偶,因此您可以使用原始对偶方法。
推荐阅读
- java - 从 Java 中的控制台读取时如何设置默认输入?
- java - 如何在 Java Springboot 中使用 Jackson 在自动启动时加载 JSON 配置文件
- javascript - 元素相互叠加,直到我第二次加载页面
- java - 在休眠期间清理连接池需要太长时间
- mysql - mysql select query WHERE json_contains 匹配但不返回数据?
- python - “无”出现在输出中,我不知道为什么
- asp.net - nopCommerce 4.2:如何在 nopCommerce 上配置 SSL 相关设置以在商店主页上使用 https
- reactive-programming - 反应式编程如何做决策
- java - Javafx 一个事件处理程序来捕获它们?
- python - Python Django:将输出作为“任务对象(1)”而不是模型表中的实际值