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