Это действительно зависит от многих вещей.Например, если ваша матрица очень мала, накладные расходы на деление (необходимые для .solve()
) значительны.Для очень больших матриц накладные расходы .solve()
будут уменьшаться.Для матриц с недостатком ранга .solve()
может быть быстрее (в зависимости от разложения).Но обычно .solve()
должен быть численно более стабильным.
Лучше всего сделать сравнительный анализ и проверить точность (например, путем сравнения остатков каждого метода) для матриц, обычно встречающихся в вашем приложении.
Другой вариант (особенно если настройкастоимость не имеет значения) состоит в разложении и инвертировании с двойной точностью и приведении результата к одинарной точности.Это, вероятно, будет немного более точным, чем разложение и решение с одинарной точностью, но умножение будет таким же быстрым или быстрым, как решение с одинарной точностью.