Jak sprawdzić, czy macierz jest pojedyncza w Matlab

Używam poniższej funkcji, aby wygenerować bety dla danego zestawu zgadywania lambd z mojego optymalizatora.

Podczas uruchamiania często otrzymuję następujący komunikat ostrzegawczy:

Ostrzeżenie: Matrix jest wyjątkowy dla precyzji działania. W NSS_betas o 9 In DElambda na 19 In Individual_Lambdas na 36

Chciałbym móc wykluczyć wszelkie bety, które tworzą pojedynczą macierz z zestawu rozwiązań, jednak nie wiem, jak to sprawdzić?

Próbowałem użyć rcond (), ale nie wiem, gdzie zrobić odcięcie między pojedynczym a nie pojedynczym?

Z pewnością, jeśli Matlab generuje komunikat ostrzegawczy, wie już, czy macierz jest pojedyncza, czy nie, więc gdybym mógł znaleźć, gdzie ta zmienna była przechowywana, mógłbym z niej skorzystać?

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

Dzięki za radę:

Przetestowałem wszystkie trzy przykłady poniżej po ustawieniu wartości lambda na równe, tak aby uzyskać pojedynczą macierz

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

r = 3, r2 = 2,602085213965190e-16; r3 = 1,075949299504113e-15;

Tak więc w tym rankingu testowym () i rcond () działało, zakładając, że przyjmę wartości benchmarku podane poniżej.

Jednak co się dzieje, gdy mam dwie wartości, które są blisko, ale nie dokładnie równe?

Jak mogę zdecydować, co jest za blisko?

questionAnswers(5)

yourAnswerToTheQuestion