Как определить, является ли матрица сингулярной в 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 () работали, предполагая, что я беру контрольные значения, как указано ниже.
Однако что происходит, когда у меня есть два значения, которые близки, но не совсем равны?
Как я могу решить, что слишком близко?