Как определить, является ли матрица сингулярной в Matlab

Я использую функцию ниже, чтобы сгенерировать бета-версии для данного набора лямбда-догадок из моего оптимизатора.

При запуске я часто получаю следующее предупреждение:

Предупреждение: Матрица имеет исключительную точность работы. В NSS_betas в 9 В DElambda в 19 В Individual_Lambdas в 36I '

Я хотел бы иметь возможность исключить любые бета-версии, которые образуют особую матрицу из набора решений, однако я нене знаете, как это проверить?

я пытался использовать 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

Спасибо за совет:

Я проверил все три примера ниже после установки значений лямбда-функции равными, чтобы получить единственную матрицу

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

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

Таким образом, в этом тесте rank () и rcond () работали, предполагая, что я беру контрольные значения, как указано ниже.

Однако что происходит, когда у меня есть два значения, которые близки, но не совсем равны?

Как я могу решить, что слишком близко?

Ответы на вопрос(5)

Ваш ответ на вопрос