So finden Sie heraus, ob eine Matrix in Matlab Singular ist
Ich benutze die unten stehende Funktion, um die Betas für einen bestimmten Satz von Rate-Lambdas aus meinem Optimierer zu generieren.
Beim Laufen erhalte ich oft die folgende Warnmeldung:
Warnung: Matrix ist einzigartig für Arbeitsgenauigkeit. In NSS_betas um 9 In DElambda um 19 In Individual_Lambdas um 36
Ich möchte Betas, die eine singuläre Matrix bilden, aus dem Lösungssatz ausschließen können, aber ich weiß nicht, wie ich es testen soll.
Ich habe versucht, rcond () zu verwenden, weiß aber nicht, wo ich die Grenze zwischen Singular und Nicht-Singular setzen soll.
Sicher, wenn Matlab die Warnmeldung generiert, weiß es bereits, ob die Matrix singulär ist oder nicht. Wenn ich nur herausfinden könnte, wo diese Variable gespeichert wurde, könnte ich das verwenden?
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
Danke für den Hinweis:
Ich habe alle drei folgenden Beispiele getestet, nachdem ich die Lambda-Werte auf gleich gesetzt hatte, um eine singuläre Matrix zu erhalten
if (~isinf(G))
r=rank(G);
r2=rcond(G);
r3=min(svd(G));
end
r = 3, r2 = 2,602085213965190e-16; r3 = 1,075949299504113e-15;
In diesem Test haben rank () und rcond () unter der Annahme gearbeitet, dass ich die unten angegebenen Benchmark-Werte nehme.
Was passiert jedoch, wenn ich zwei Werte habe, die nahe beieinander liegen, aber nicht genau gleich sind?
Wie kann ich entscheiden, was zu nah ist?