Matlab - генерировать случайную невырожденную треугольную матрицу

Как я могу создать случайную треугольную матрицу? (верхний и нижний)

Обычно я использую rand(n), но если я попробую tril(rand(n)), это будет единственное число, а я этого не хочу.


person Giuseppe Trapasso    schedule 07.10.2015    source источник
comment
Я не уверен, что понимаю вопрос, не будет ли верхняя и нижняя треугольная матрица просто вашей прямоугольной матрицей?   -  person excaza    schedule 07.10.2015
comment
а почему он будет единичным? оно всегда единственное?   -  person Severin Pappadeux    schedule 07.10.2015


Ответы (3)


ваш ответ правильный:

 A=tril(rand(n))

вы можете проверить, что эта матрица не сингулярна, используя

 rcond(A)>eps

or

 min(svd(A))>eps

и проверка того, что наименьшее единичное значение больше, чем eps, или любой другой числовой допуск, соответствующий вашим потребностям. (код вернет 1 или 0). Для n>50 вы начнете приближаться к сингулярным матрицам.

Вот небольшой анализ того, как матрица приближается к сингулярности с ее размером...

введите здесь описание изображения

person bla    schedule 07.10.2015
comment
Ух ты! Быстрее, чем экспоненциальное поведение. Интересно, почему? - person Severin Pappadeux; 07.10.2015
comment
На самом деле, я тоже не хотел плохо обусловленную матрицу, а мое 'n' было 100. Это могло быть проблемой... - person Giuseppe Trapasso; 07.10.2015
comment
Имеют ли аналогичные матрицы одинаковый номер взаимной обусловленности? - person BillBokeey; 08.10.2015
comment
Треугольные матрицы невырожденны, если по определению нет нуля на диагонали. Вы можете получить те же проблемы с tril(rand(100)+100), это настоящая проблема реализации, и этому анализу нельзя доверять. - person percusse; 08.10.2015
comment
@percusse matrices are nonsingular if there is no zero on the diagonal by definition Ерунда! Матрица невырожденна, если определитель отличен от нуля. Я мог легко составить сингулярную триматрицу с ненулевой диагональю. - person Severin Pappadeux; 08.10.2015
comment
@severin Пожалуйста, сделайте один для удовольствия. Буду ждать. - person percusse; 08.10.2015
comment
@SeverinPappadeux И что-нибудь еще? - person percusse; 09.10.2015
comment
@SeverinPappadeux Все еще ничего? И пока вы не докажете этот бред комментарием. - person percusse; 10.10.2015
comment
Существует большая разница между матрицами, близкими от сингулярности по отношению к определенной норме, и матрицами, не имеющими сингулярности в своей окрестности. Это определение обусловленности. Я, конечно, согласен с вами, перкуссия, что матрица будет сингулярной тогда и только тогда, когда у нее есть ноль на диагонали, но вы все равно можете быть очень близки к сингулярности (тогда очень плохо обусловленной) и иметь ненулевой определитель . В этом смысл ответа @bla - person BillBokeey; 12.10.2015
comment
@BillBokeey Не с треугольными матрицами. Ясно, что tril(rand(100)+0.1) несингулярно. Но не по номеру его состояния (запускать несколько раз). Это настоящая ошибка анализа, связанная с тем, как вычисляются определитель и собственные значения для таких матриц. При таких размерах вам необходимо сначала предварительно обработать свои матрицы или вызвать соответствующую процедуру Фортрана, предназначенную для треугольных матриц, для оценки числовой стабильности. Вы не можете просто пойти det(A), если не знаете, как выглядит ваша матрица, в чем здесь проблема. - person percusse; 12.10.2015
comment
@BillBokeey Приведенный мной пример не близок ни к какой единственной матрице. Но если вы проверите его номер состояния, у вас сложится впечатление, что это так. Так что нет, мы не говорим одно и то же. Анализ в этом сюжете неверен. Это показывает успех анализа rcond и svd, который становится все хуже и хуже, а матрица вообще не становится сингулярной. - 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 или около того, что делает все упражнение спорным.

К сожалению, я не могу предложить ничего, кроме этого простого анализа.

person Severin Pappadeux    schedule 12.10.2015
comment
Я получу этот пример в ближайшее время или нет? - person percusse; 14.10.2015

Если вам нужна хорошо обусловленная случайная треугольная матрица, вы можете взять треугольную часть A2 с помощью A = rand(n< /эм>). Таким образом, triu(A * A) для любого размера n хорошо обусловлен, но, конечно, имеет сложность O(n3 ) для умножения матрицы на матрицу.

person ps3lister    schedule 12.04.2019