algorithm - 在 MATLAB 中使用 Levenberg-Marquardt (lsqcurvefit) 获取协方差矩阵

标签 algorithm matlab covariance least-squares levenberg-marquardt

我正在使用 Matlab 中的 lsqcurvefit 函数对一些实验数据进行建模。数据采用特定的形状,因此算法只是调整该形状的系数来改变其幅度等。

该模型运行良好并且拟合良好(我已经计算了卡方)。 Levenberg-Marquardt 算法的其他实现将协方差作为输出,但在 Matlab 中它不是输出的选项(只有一阶最优性、没有迭代、Lambda 和 Jaccobian 以及边界)。

有人知道如何通过 lsqcurvefit 或独立地从给定的输出(我不是 100% 知道 lambda 和雅可比或一阶最优性)计算协方差矩阵吗?

任何帮助将不胜感激,谢谢!

最佳答案

我想我自己已经解决了这个问题,但如果其他人遇到同样的问题,我会在这里发布如何解决。

协方差矩阵可以通过雅可比行列式计算:

C = inv(J'*J)*MSE

其中 MSE 是均方误差:

MSE = (R'*R)/(N-p)

其中 R = 残差,N = 观测值数量,p = 估计系数数量。

或者可以通过迭代计算MSE。

希望这对其他人将来有帮助。

如果有人发现错误,请告诉我。谢谢

关于algorithm - 在 MATLAB 中使用 Levenberg-Marquardt (lsqcurvefit) 获取协方差矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737382/

相关文章:

MATLAB 删除一个轴上的刻度,同时保留标签

matlab - 从帧生成较小的视频文件大小

scala - 在逆变位置使用协变类型是否有其他选择?

c# - 逆变解释

javascript - 编写 QuickSort 算法 - 输出不太正确

.net - 为什么 Dictionary.First() 这么慢?

python - 如何从MatLab中的Python UDP客户端接收UDP数据。

python - Leetcode 90. 类型错误 : unhashable type: 'list'

java - 为什么我的选择排序算法不执行它应该执行的操作 (java)?

c# - 将 Func<T, T2> 转换为 Func<T, object> 的更快方法?