Я бы сделал собственное разложение матрицы:
C=Q D Q^-1
Если ваша матрица действительно положительно полуопределена, то все собственные значения (записи на диагонали D) должны быть неотрицательными. (Это, вероятно, тест, который выполняет ваш алгоритм факторного анализа, чтобы определить, является ли матрица положительной полуопределенной.)
Если вы испытываете числовые проблемы, некоторые из собственных значений, вероятно, будут чуть меньше нуля. Попробуйте установить эти записи в ноль, вычислите Q D Q^-1
, чтобы получить новый, исправленный C, а затем отправьте это в свой алгоритм факторного анализа.
С другой стороны, если вы обнаружите, что ваша матрица C имеет действительно отрицательные собственные значения, то вы знаете, что где-то ошибаетесь в построении C.