gpt4 book ai didi

matlab - 如何在 Matlab 中查找矩阵是否为奇异矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:45 24 4
gpt4 key购买 nike

我使用下面的函数从我的优化器中为一组给定的猜测 lambda 生成 beta。

在运行时我经常收到以下警告信息:

警告:Matrix 对工作精度来说是奇异的。在 NSS_betas 919 岁在 DElambda在 36 岁的 Individual_Lambdas 中

我希望能够从解决方案集中排除任何形成奇异矩阵的贝塔,但我不知道如何测试它?

我一直在尝试使用 rcond(),但我不知道在哪里可以区分单数和非单数?

当然,如果 Matlab 正在生成警告消息,它已经知道矩阵是否为奇异矩阵,所以如果我能找到该变量的存储位置,我就可以使用它吗?

function betas=NSS_betas(lambda,data)

mats=data.mats2';
lambda=lambda;
yM=data.y2';
nObs=size(yM,1);
G= [ones(nObs,1) (1-exp(-mats./lambda(1)))./(mats./lambda(1)) ((1-exp(-mats./lambda(1)))./(mats./lambda(1))-exp(-mats./lambda(1))) ((1-exp(-mats./lambda(2)))./(mats./lambda(2))-exp(-mats./lambda(2)))];

betas=G\yM;
r=rcond(G);

end

感谢您的建议:

在将 lambda 值设置为相等之后,我测试了下面的所有三个示例,因此给出了一个奇异矩阵

 if (~isinf(G))
r=rank(G);
r2=rcond(G);
r3=min(svd(G));
end

r=3, r2 =2.602085213965190e-16; r3= 1.075949299504113e-15;

所以在此测试中,rank() 和 rcond () 工作假设我采用下面给出的基准值。

但是,当我有两个接近但不完全相等的值时会发生什么?

我如何判断距离太近?

最佳答案

rcond 是去这里的正确方法。如果它接近零的机器精度,则您的矩阵是奇异的。我通常选择:

if( rcond(A) < 1e-12 )
% This matrix doesn't look good
end

您可以试验适合您需要的值,但使用 MATLAB 对甚至接近奇异的矩阵求逆会产生垃圾结果。

关于matlab - 如何在 Matlab 中查找矩阵是否为奇异矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com