以下の関数を使用して、オプティマイザーから特定の推測ラムダのセットのベータを生成します。
実行すると、次の警告メッセージが表示されることがよくあります。
警告:マトリックスは、作業精度に対して特異です。NSS_betasで9でDElambdaで19でIndividual_Lambdasで36で
特異行列を形成するベータを解集合から除外できるようにしたいのですが、それをテストする方法がわかりませんか?
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
アドバイスをありがとう:
ラムダ値を等しく設定して特異行列を与えた後、以下の3つの例すべてをテストしました
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()が機能しました。
しかし、近いが完全に等しくない2つの値がある場合はどうなりますか?
近すぎるものをどのように判断できますか?