Нет проблем с вычислением матриц размером больше 250:
set.seed(12345)
N = 300
m <- matrix(rnorm(N*N), nrow = N)
str(m)
# num [1:300, 1:300] 0.586 0.709 -0.109 -0.453 0.606 ...
m.inv <- solve(m)
str(m.inv)
# num [1:300, 1:300] 0.0274 -0.0164 0.0384 -0.0936 -0.1086 ...
Однако, если определитель матрицы равен 0 (или почти нулю), то, очевидно, будет ошибка вычисления обратного:
p <- matrix(7, nrow = N, ncol=N)
str(p)
# num [1:300, 1:300] 7 7 7 7 7 7 7 7 7 7 ...
p.inv <- solve(p)
#Error in solve.default(p) :
# Lapack routine dgesv: system is exactly singular: U[2,2] = 0
В вашем случае похоже, что вы работаете с очень маленькими значениями. Попробуйте указать меньший допуск:
solve(..., tol = 1e-17)
# You can check the current tollerance on your system:
.Machine$double.eps
#[1] 2.220446e-16
Лучшим подходом, вероятно, будет сначала вычислить определитель, а затем обработать случаи, когда он очень мал:
det(p)
#[1] 0
Чтобы ответить на ваш вопрос, почему ошибка возникает только тогда, когда ваша матрица превышает 250 элементов, я бы порекомендовал рассчитать определитель для вашей матрицы 250x250, а затем вычислить определитель для более крупной матрицы и сравнить значения. Второе значение, вероятно, меньше допустимого, а первое - нет.