Как я могу создать случайную треугольную матрицу? (верхний и нижний)
Обычно я использую rand(n)
, но если я попробую tril(rand(n))
, это будет единственное число, а я этого не хочу.
Как я могу создать случайную треугольную матрицу? (верхний и нижний)
Обычно я использую rand(n)
, но если я попробую tril(rand(n))
, это будет единственное число, а я этого не хочу.
ваш ответ правильный:
A=tril(rand(n))
вы можете проверить, что эта матрица не сингулярна, используя
rcond(A)>eps
or
min(svd(A))>eps
и проверка того, что наименьшее единичное значение больше, чем eps, или любой другой числовой допуск, соответствующий вашим потребностям. (код вернет 1 или 0). Для n>50
вы начнете приближаться к сингулярным матрицам.
Вот небольшой анализ того, как матрица приближается к сингулярности с ее размером...
tril(rand(100)+100)
, это настоящая проблема реализации, и этому анализу нельзя доверять.
- person percusse; 08.10.2015
matrices are nonsingular if there is no zero on the diagonal by definition
Ерунда! Матрица невырожденна, если определитель отличен от нуля. Я мог легко составить сингулярную триматрицу с ненулевой диагональю.
- person Severin Pappadeux; 08.10.2015
tril(rand(100)+0.1)
несингулярно. Но не по номеру его состояния (запускать несколько раз). Это настоящая ошибка анализа, связанная с тем, как вычисляются определитель и собственные значения для таких матриц. При таких размерах вам необходимо сначала предварительно обработать свои матрицы или вызвать соответствующую процедуру Фортрана, предназначенную для треугольных матриц, для оценки числовой стабильности. Вы не можете просто пойти det(A)
, если не знаете, как выглядит ваша матрица, в чем здесь проблема.
- person percusse; 12.10.2015
Хорошо, вот мысли о сингулярности треугольной матрицы. Определитель треугольной матрицы определяет сингулярность, потому что он входит в знаменатель при построении обратной матрицы. Свойство треугольной матрицы таково, что определитель равен произведению диагональных элементов.
Таким образом, для матрицы NxN
у нас на диагонали есть произведение i.i.d. U(0,1) чисел. Очевидно, что определитель будет уменьшаться по мере увеличения N
из-за того, что все числа равны ‹1 и чем больше у вас есть, тем меньше значение будет иметь произведение (оно же определитель).
Интересно проверить, что для det=X1X2...*XN среднее значение уменьшится как 2-N, потому что каждое слагаемое в произведении равно U(0,1) со средним значением 1/2, и все они являются i.i.d. Альтернативной проверкой может быть вычисление среднего значения из PDF-файла продукта (см. -more">https://math.stackexchange.com/questions/659254/product-distribution-of-two-uniform-distribution-what-about-3-or-more), и, действительно, даст вам точно такой же результат, 2-N. Дисперсия определителя также может быть вычислена как второй импульс минус среднеквадратичное, и она равна (3-N-4-N).
Обратите внимание, что это средние значения, которые вы можете ожидать в среднем, скажем, если вы выберете 106 треугольных матриц с N = 100, вычислите их определитель и усредните его, вы должны найти это довольно хорошо близко к 2-100.
Вот где проблема. В среднем треугольная случайная матрица стремится к сингулярности экспоненциально с ростом N
. 2-10 примерно равно 1/1000. 2-20 примерно равно 1/1 000 000. Для N=100 оно должно быть в среднем около 10-30 или около того, что делает все упражнение спорным.
К сожалению, я не могу предложить ничего, кроме этого простого анализа.
Если вам нужна хорошо обусловленная случайная треугольная матрица, вы можете взять треугольную часть A2 с помощью A = rand(n< /эм>). Таким образом, triu(A * A) для любого размера n хорошо обусловлен, но, конечно, имеет сложность O(n3 ) для умножения матрицы на матрицу.